File indexing completed on 2024-05-12 05:40:46

0001 /***************************************************************************
0002  *   Copyright (C) 2015 by Renaud Guezennec                                *
0003  *   Copyright (C) 2015 by Benoit Lagarde                                  *
0004  *   http://renaudguezennec.homelinux.org/accueil,3.html                   *
0005  *                                                                         *
0006  *   Rolisteam is free software; you can redistribute it and/or modify     *
0007  *   it under the terms of the GNU General Public License as published by  *
0008  *   the Free Software Foundation; either version 2 of the License, or     *
0009  *   (at your option) any later version.                                   *
0010  *                                                                         *
0011  *   This program is distributed in the hope that it will be useful,       *
0012  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0013  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0014  *   GNU General Public License for more details.                          *
0015  *                                                                         *
0016  *   You should have received a copy of the GNU General Public License     *
0017  *   along with this program; if not, write to the                         *
0018  *   Free Software Foundation, Inc.,                                       *
0019  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
0020  ***************************************************************************/
0021 #include <QtTest/QtTest>
0022 
0023 #include <QDir>
0024 #include <QFileInfo>
0025 #include <QTemporaryDir>
0026 #include <QTreeView>
0027 #include <memory>
0028 
0029 #include "data/campaign.h"
0030 #include "data/campaigneditor.h"
0031 #include "data/campaignmanager.h"
0032 #include "data/media.h"
0033 #include "diceparser/dicealias.h"
0034 #include "diceparser_qobject/diceroller.h"
0035 #include "model/characterstatemodel.h"
0036 #include "model/dicealiasmodel.h"
0037 #include "model/mediamodel.h"
0038 #include "model/nonplayablecharactermodel.h"
0039 #include "utils/iohelper.h"
0040 #include "worker/fileserializer.h"
0041 #include <helper.h>
0042 
0043 #include <QCryptographicHash>
0044 #include <QQuickStyle>
0045 
0046 constexpr int delay{2000};
0047 
0048 QFileInfoList fileAndDirRecusive(const QString& path)
0049 {
0050     QFileInfoList list;
0051     QDir dir(path);
0052 
0053     auto importedFile= dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);
0054     list << importedFile;
0055     for(auto const& res : qAsConst(importedFile))
0056     {
0057         if(res.isDir())
0058         {
0059             qDebug() << res.absoluteFilePath();
0060             QDir subdir(res.absoluteFilePath());
0061             list << subdir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);
0062         }
0063     }
0064 
0065     return list;
0066 }
0067 
0068 class CampaignTest : public QObject
0069 {
0070     Q_OBJECT
0071 
0072 public:
0073     CampaignTest();
0074 
0075     void create(const QString& path);
0076 
0077 private slots:
0078     void initTestCase();
0079     void init();
0080     void cleanup();
0081 
0082     void createCampaign();
0083     void createCampaign_data();
0084 
0085     void campaignModel();
0086     void campaignModel_data();
0087 
0088     void addAndRemoveMedia();
0089     void addAndRemoveMedia_data();
0090 
0091     void copyCampaign();
0092     void copyCampaign_data();
0093 
0094     void importFromAnotherCampaign();
0095     void importFromAnotherCampaign_data();
0096 
0097     void editorCampaign();
0098     void campaignTest();
0099     void campaignManagerTest();
0100 
0101 private:
0102     std::unique_ptr<campaign::CampaignManager> m_manager;
0103     std::unique_ptr<DiceRoller> m_diceparser;
0104 };
0105 
0106 using TupleMedia= QList<std::tuple<QString, QString, QByteArray>>;
0107 using TupleState= QList<std::tuple<QString, QString, QColor>>;
0108 using TupleDice= QList<std::tuple<QString, QString, bool>>;
0109 using TupleNPC= QList<std::tuple<QString, QString, QString, QColor>>;
0110 Q_DECLARE_METATYPE(TupleMedia)
0111 Q_DECLARE_METATYPE(TupleState)
0112 Q_DECLARE_METATYPE(TupleDice)
0113 Q_DECLARE_METATYPE(TupleNPC)
0114 
0115 CampaignTest::CampaignTest() {}
0116 
0117 void CampaignTest::initTestCase()
0118 {
0119     QQuickStyle::setStyle(":/rolistyle");
0120     QQuickStyle::setFallbackStyle("Default");
0121 }
0122 
0123 void CampaignTest::init()
0124 {
0125     m_diceparser.reset(new DiceRoller);
0126     m_manager.reset(new campaign::CampaignManager(m_diceparser.get()));
0127 }
0128 
0129 void CampaignTest::cleanup() {}
0130 
0131 void CampaignTest::createCampaign()
0132 {
0133     QFETCH(QString, subdir);
0134     QTemporaryDir dir;
0135     if(dir.isValid())
0136     {
0137         auto path= dir.path();
0138         path+= subdir;
0139         auto b= m_manager->createCampaign(QUrl::fromLocalFile(path));
0140         QVERIFY(b);
0141         QVERIFY(QFileInfo::exists(path + "/" + campaign::TRASH_FOLDER));
0142         QVERIFY(QFileInfo::exists(path + "/" + campaign::MEDIA_ROOT));
0143         QVERIFY(QFileInfo::exists(path + "/" + campaign::STATE_ROOT));
0144     }
0145 }
0146 
0147 void CampaignTest::create(const QString& path)
0148 {
0149     m_manager->createCampaign(QUrl::fromLocalFile(path));
0150     QSignalSpy spy(m_manager.get(), &campaign::CampaignManager::campaignLoaded);
0151 
0152     QVERIFY(spy.wait(delay));
0153 }
0154 
0155 void CampaignTest::createCampaign_data()
0156 {
0157     QTest::addColumn<QString>("subdir");
0158 
0159     QTest::addRow("cmd1") << QString{};
0160     QTest::addRow("cmd2") << QString{"/campaign"};
0161 }
0162 
0163 void CampaignTest::campaignModel()
0164 {
0165     QFETCH(QStringList, paths);
0166     QFETCH(QStringList, ids);
0167     QFETCH(QStringList, names);
0168     QFETCH(int, expected);
0169 
0170     auto campaign= m_manager->campaign();
0171     campaign->setRootDirectory(QDir::tempPath());
0172     auto model= new campaign::MediaModel(campaign);
0173 
0174     int i= 0;
0175     for(const auto& path : paths)
0176     {
0177         auto id= ids[i];
0178         auto name= names[i];
0179         std::unique_ptr<campaign::Media> media(
0180             new campaign::Media(id, name, path, campaign::FileSerializer::typeFromExtention(path)));
0181         campaign->addMedia(std::move(media));
0182         ++i;
0183     }
0184 
0185     // auto model2= new campaign::MediaModel(campaign);
0186 
0187     QCOMPARE(model->rowCount(), expected);
0188     // QCOMPARE(model2->rowCount(), expected);
0189 
0190     QTreeView* view= new QTreeView();
0191     view->setModel(model);
0192     view->setVisible(true);
0193 
0194     QTest::qWait(2000);
0195     delete view;
0196     delete model;
0197 }
0198 
0199 void CampaignTest::campaignModel_data()
0200 {
0201     QTest::addColumn<QStringList>("paths");
0202     QTest::addColumn<QStringList>("ids");
0203     QTest::addColumn<QStringList>("names");
0204     QTest::addColumn<int>("expected");
0205 
0206     auto campaign= m_manager->campaign();
0207     campaign->setRootDirectory(QDir::tempPath());
0208 
0209     auto root= campaign->directory(campaign::Campaign::Place::MEDIA_ROOT);
0210 
0211     QTest::addRow("cmd1") << QStringList{} << QStringList{} << QStringList{} << 0;
0212     QTest::addRow("cmd2") << QStringList{root + "/image.jpg"} << QStringList{"image"} << QStringList{"image"} << 1;
0213     QTest::addRow("cmd3") << QStringList{root + "/image.jpg", root + "/image.jpg"} << QStringList{"image", "image"}
0214                           << QStringList{"image", "image"} << 1;
0215 
0216     QTest::addRow("cmd4") << QStringList{root + "/image.jpg", root + "/tavern.vmap"} << QStringList{"image", "tavern"}
0217                           << QStringList{"image", "tavern"} << 2;
0218 
0219     QTest::addRow("cmd5") << QStringList{root + "/image.jpg", root + "/chapter1/tavern.vmap"}
0220                           << QStringList{"image", "tavern"} << QStringList{"image", "tavern"} << 2;
0221 
0222     QTest::addRow("cmd6") << QStringList{root + "/chapter1/image.jpg", root + "/chapter1/tavern.vmap"}
0223                           << QStringList{"image", "tavern"} << QStringList{"image", "tavern"} << 1;
0224 }
0225 
0226 void CampaignTest::addAndRemoveMedia()
0227 {
0228     QFETCH(QStringList, paths);
0229     QFETCH(QStringList, ids);
0230     QFETCH(QStringList, names);
0231     QFETCH(int, expected);
0232 
0233     auto campaign= m_manager->campaign();
0234     campaign->setRootDirectory(QDir::tempPath());
0235     auto model= new campaign::MediaModel(campaign);
0236     QTreeView* view= new QTreeView();
0237     view->setModel(model);
0238     view->setVisible(true);
0239     QCOMPARE(model->rowCount(), 0);
0240 
0241     int i= 0;
0242     for(const auto& path : paths)
0243     {
0244         auto id= ids[i];
0245         auto name= names[i];
0246         std::unique_ptr<campaign::Media> media(
0247             new campaign::Media(id, name, path, campaign::FileSerializer::typeFromExtention(path)));
0248         campaign->addMedia(std::move(media));
0249         campaign->removeMedia(id);
0250         ++i;
0251     }
0252 
0253     QCOMPARE(model->rowCount(), expected);
0254 
0255     QTest::qWait(2000);
0256     delete view;
0257     delete model;
0258 }
0259 
0260 void CampaignTest::addAndRemoveMedia_data()
0261 {
0262     QTest::addColumn<QStringList>("paths");
0263     QTest::addColumn<QStringList>("ids");
0264     QTest::addColumn<QStringList>("names");
0265     QTest::addColumn<int>("expected");
0266 
0267     auto campaign= m_manager->campaign();
0268     campaign->setRootDirectory(QDir::tempPath());
0269 
0270     auto root= campaign->directory(campaign::Campaign::Place::MEDIA_ROOT);
0271 
0272     QTest::addRow("cmd1") << QStringList{} << QStringList{} << QStringList{} << 0;
0273     QTest::addRow("cmd2") << QStringList{root + "/image.jpg"} << QStringList{"image"} << QStringList{"image"} << 0;
0274     QTest::addRow("cmd3") << QStringList{root + "/image.jpg", root + "/image.jpg"} << QStringList{"image", "image"}
0275                           << QStringList{"image", "image"} << 0;
0276 
0277     QTest::addRow("cmd4") << QStringList{root + "/image.jpg", root + "/tavern.vmap"} << QStringList{"image", "tavern"}
0278                           << QStringList{"image", "tavern"} << 0;
0279 
0280     QTest::addRow("cmd5") << QStringList{root + "/image.jpg", root + "/chapter1/tavern.vmap"}
0281                           << QStringList{"image", "tavern"} << QStringList{"image", "tavern"} << 1;
0282 
0283     QTest::addRow("cmd6") << QStringList{root + "/chapter1/image.jpg", root + "/chapter1/tavern.vmap"}
0284                           << QStringList{"image", "tavern"} << QStringList{"image", "tavern"} << 1;
0285 }
0286 
0287 void CampaignTest::copyCampaign()
0288 {
0289     QFETCH(TupleMedia, medias);
0290     QFETCH(TupleDice, dices);
0291     QFETCH(TupleState, states);
0292     QFETCH(TupleNPC, npcs);
0293 
0294     QTemporaryDir root1;
0295     if(root1.isValid())
0296     {
0297         auto path= root1.path();
0298         create(path);
0299     }
0300 
0301     auto campaign= m_manager -> campaign();
0302     auto edit= m_manager -> editor();
0303     auto stateModel= campaign -> stateModel();
0304     auto diceModel= campaign -> diceAliases();
0305     auto npcModel= campaign -> npcModel();
0306 
0307     // add states
0308     for(auto const& t : states)
0309     {
0310         CharacterState state;
0311         state.setId(std::get<0>(t));
0312         state.setLabel(std::get<1>(t));
0313         state.setColor(std::get<2>(t));
0314         stateModel->appendState(std::move(state));
0315     }
0316     // add dices
0317     for(auto const& a : dices)
0318     {
0319         DiceAlias alias(std::get<0>(a), std::get<1>(a), {}, std::get<2>(a));
0320         diceModel->appendAlias(std::move(alias));
0321     }
0322     // add NPC
0323     for(auto const& n : npcs)
0324     {
0325         auto npc= new campaign::NonPlayableCharacter();
0326         npc->setUuid(std::get<0>(n));
0327         npc->setName(std::get<1>(n));
0328         npc->setDescription(std::get<2>(n));
0329         npc->setColor(std::get<3>(n));
0330         npcModel->addCharacter(npc);
0331     }
0332     // add medias
0333     for(auto const& m : medias)
0334     {
0335         edit->addMedia(std::get<0>(m), std::get<1>(m), std::get<2>(m));
0336     }
0337     m_manager->saveCampaign();
0338 
0339     // QTest::qWait(2000);
0340 
0341     QTemporaryDir dir;
0342     if(dir.isValid())
0343     {
0344         auto path= dir.path();
0345         m_manager->copyCampaign(QUrl::fromUserInput(path));
0346         QTest::qWait(2000);
0347 
0348         QDir copyDir(path);
0349         QDir sourceDir(campaign->rootDirectory());
0350 
0351         auto copyListFile= copyDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);
0352         auto sourceListFile= sourceDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);
0353 
0354         if(copyListFile.size() != sourceListFile.size())
0355             qDebug() << copyListFile << sourceListFile;
0356 
0357         QCOMPARE(copyListFile.size(), sourceListFile.size());
0358 
0359         for(int i= 0; i < copyListFile.size(); ++i)
0360         {
0361             auto copy= copyListFile[i];
0362             auto source= sourceListFile[i];
0363             QVERIFY2(copy.size() == source.size(), copy.absoluteFilePath().toStdString().c_str());
0364 
0365             QFile copyFile(copy.absoluteFilePath());
0366             QFile sourceFile(source.absoluteFilePath());
0367             if(copyFile.open(QFile::ReadOnly) && sourceFile.open(QFile::ReadOnly))
0368             {
0369                 QCOMPARE(QCryptographicHash::hash(copyFile.readAll(), QCryptographicHash::Md5),
0370                          QCryptographicHash::hash(sourceFile.readAll(), QCryptographicHash::Md5));
0371             }
0372         }
0373     }
0374 }
0375 
0376 void CampaignTest::copyCampaign_data()
0377 {
0378 
0379     QTest::addColumn<TupleMedia>("medias");
0380     QTest::addColumn<TupleDice>("dices");
0381     QTest::addColumn<TupleState>("states");
0382     QTest::addColumn<TupleNPC>("npcs");
0383 
0384     QTest::addRow("cmd1") << TupleMedia{} << TupleDice{} << TupleState{} << TupleNPC{};
0385     QTest::addRow("cmd2") << TupleMedia{{"girafe1", "girafe1", utils::IOHelper::loadFile(":/img/girafe.jpg")}} << TupleDice{}
0386                           << TupleState{} << TupleNPC{};
0387 
0388     QTest::addRow("cmd3") << TupleMedia{{"girafe1", "girafe1", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0389                           << TupleDice{{"pattern", "dicecommand", false}} << TupleState{} << TupleNPC{};
0390 
0391     QTest::addRow("cmd4") << TupleMedia{{"girafe1", "girafe1", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0392                           << TupleDice{{"pattern", "dicecommand", false}}
0393                           << TupleState{{"state1", "state1", QColor(Qt::blue)}} << TupleNPC{};
0394 
0395     QTest::addRow("cmd5") << TupleMedia{{"girafe1", "girafe1", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0396                           << TupleDice{{"pattern", "dicecommand", false}}
0397                           << TupleState{{"state1", "state1", QColor(Qt::blue)}}
0398                           << TupleNPC{{"character1", "character1", "character1", QColor(Qt::blue)}};
0399 }
0400 
0401 
0402 void CampaignTest::importFromAnotherCampaign()
0403 {
0404     QFETCH(TupleMedia, medias);
0405     QFETCH(TupleDice, dices);
0406     QFETCH(TupleState, states);
0407     QFETCH(TupleNPC, npcs);
0408     QFETCH(QVector<Core::CampaignDataCategory>, categories);
0409     QFETCH(bool, expectedEguality);
0410 
0411     QTemporaryDir root1;
0412     if(root1.isValid())
0413     {
0414         auto path= root1.path();
0415         create(path);
0416     }
0417 
0418     auto campaign= m_manager->campaign();
0419     auto edit= m_manager->editor();
0420     auto stateModel= campaign->stateModel();
0421     auto diceModel= campaign->diceAliases();
0422     auto npcModel= campaign->npcModel();
0423 
0424     auto oldCampaignPath= campaign->rootDirectory();
0425 
0426     // add states
0427     for(auto const& t : states)
0428     {
0429         CharacterState state;
0430         state.setId(std::get<0>(t));
0431         state.setLabel(std::get<1>(t));
0432         state.setColor(std::get<2>(t));
0433         stateModel->appendState(std::move(state));
0434     }
0435     // add dices
0436     for(auto const& a : dices)
0437     {
0438         DiceAlias alias(std::get<0>(a), std::get<1>(a), {}, std::get<2>(a));
0439         diceModel->appendAlias(std::move(alias));
0440     }
0441     // add NPC
0442     for(auto const& n : npcs)
0443     {
0444         auto npc= new campaign::NonPlayableCharacter();
0445         npc->setUuid(std::get<0>(n));
0446         npc->setName(std::get<1>(n));
0447         npc->setDescription(std::get<2>(n));
0448         npc->setColor(std::get<3>(n));
0449         npcModel->addCharacter(npc);
0450     }
0451     // add medias
0452     for(auto const& m : medias)
0453     {
0454         edit->addMedia(std::get<0>(m), QString("%1/media/%2").arg(oldCampaignPath, std::get<1>(m)), std::get<2>(m));
0455     }
0456     m_manager->saveCampaign();
0457 
0458     QTest::qWait(delay);
0459 
0460     QTemporaryDir dir;
0461     if(dir.isValid())
0462     {
0463         m_manager.reset(new campaign::CampaignManager(m_diceparser.get()));
0464         auto path= dir.path();
0465         create(path);
0466         m_manager->importDataFrom(oldCampaignPath, categories);
0467         // m_manager->reload();
0468         QTest::qWait(delay);
0469         m_manager->saveCampaign();
0470         QTest::qWait(delay);
0471 
0472         auto importedFile= fileAndDirRecusive(path);
0473         auto sourceListFile= fileAndDirRecusive(root1.path());
0474 
0475         // qDebug() << importedFile << sourceListFile;
0476 
0477         if(expectedEguality)
0478             QCOMPARE(importedFile.size(), sourceListFile.size());
0479 
0480         if(expectedEguality)
0481         {
0482             for(int i= 0; i < importedFile.size(); ++i)
0483             {
0484                 auto copy= importedFile[i];
0485                 auto source= sourceListFile[i];
0486                 if(copy.absoluteFilePath().endsWith(campaign::MODEL_FILE))
0487                     continue;
0488 
0489                 if(copy.size() != source.size())
0490                     qDebug() << "size issue" << copy.size() << source.size();
0491                 QVERIFY2(copy.size() == source.size(), copy.absoluteFilePath().toStdString().c_str());
0492 
0493                 QFile copyFile(copy.absoluteFilePath());
0494                 QFile sourceFile(source.absoluteFilePath());
0495                 if(copyFile.open(QFile::ReadOnly) && sourceFile.open(QFile::ReadOnly))
0496                 {
0497                     QCOMPARE(QCryptographicHash::hash(copyFile.readAll(), QCryptographicHash::Md5),
0498                              QCryptographicHash::hash(sourceFile.readAll(), QCryptographicHash::Md5));
0499                 }
0500             }
0501         }
0502         else
0503         {
0504             if(importedFile.size() != sourceListFile.size())
0505                 return;
0506             int i= 0;
0507             QVERIFY2(!std::all_of(std::begin(importedFile), std::end(importedFile),
0508                                   [sourceListFile, &i](const QFileInfo& copy)
0509                                   {
0510                                       auto source= sourceListFile[i];
0511 
0512                                       ++i;
0513                                       return copy.size() == source.size();
0514                                   }),
0515                      "All files have the same size");
0516         }
0517     }
0518 }
0519 void CampaignTest::importFromAnotherCampaign_data()
0520 {
0521     QTest::addColumn<TupleMedia>("medias");
0522     QTest::addColumn<TupleDice>("dices");
0523     QTest::addColumn<TupleState>("states");
0524     QTest::addColumn<TupleNPC>("npcs");
0525     QTest::addColumn<QVector<Core::CampaignDataCategory>>("categories");
0526     QTest::addColumn<bool>("expectedEguality");
0527 
0528     QTest::addRow("cmd1") << TupleMedia{} << TupleDice{} << TupleState{} << TupleNPC{}
0529                           << QVector<Core::CampaignDataCategory>{} << true;
0530 
0531     QTest::addRow("cmd2") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0532                           << TupleDice{} << TupleState{} << TupleNPC{}
0533                           << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images} << true;
0534 
0535     QTest::addRow("cmd3") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0536                           << TupleDice{} << TupleState{} << TupleNPC{}
0537                           << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::PDFDoc} << false;
0538 
0539     QTest::addRow("cmd4") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0540                           << TupleDice{{"pattern", "dicecommand", false}} << TupleState{} << TupleNPC{}
0541                           << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images,
0542                                                                  Core::CampaignDataCategory::DiceAlias}
0543                           << true;
0544 
0545     QTest::addRow("cmd5") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0546                           << TupleDice{{"pattern", "dicecommand", false}} << TupleState{} << TupleNPC{}
0547                           << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images} << false;
0548 
0549     QTest::addRow("cmd6") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0550                           << TupleDice{{"pattern", "dicecommand", false}}
0551                           << TupleState{{"state1", "state1", QColor(Qt::blue)}} << TupleNPC{}
0552                           << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images,
0553                                                                  Core::CampaignDataCategory::CharacterStates,
0554                                                                  Core::CampaignDataCategory::DiceAlias}
0555                           << true;
0556 
0557     QTest::addRow("cmd7") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0558                           << TupleDice{{"pattern", "dicecommand", false}}
0559                           << TupleState{{"state1", "state1", QColor(Qt::blue)}} << TupleNPC{}
0560                           << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images,
0561                                                                  Core::CampaignDataCategory::DiceAlias}
0562                           << false;
0563 
0564     QTest::addRow("cmd8") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0565                           << TupleDice{{"pattern", "dicecommand", false}}
0566                           << TupleState{{"state1", "state1", QColor(Qt::blue)}}
0567                           << TupleNPC{{"character1", "character1", "character1", QColor(Qt::blue)}}
0568                           << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images,
0569                                                                  Core::CampaignDataCategory::CharacterStates,
0570                                                                  Core::CampaignDataCategory::DiceAlias,
0571                                                                  Core::CampaignDataCategory::AntagonistList}
0572                           << true;
0573 
0574     QTest::addRow("cmd9") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}}
0575                           << TupleDice{{"pattern", "dicecommand", false}}
0576                           << TupleState{{"state1", "state1", QColor(Qt::blue)}}
0577                           << TupleNPC{{"character1", "character1", "character1", QColor(Qt::blue)}}
0578                           << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images,
0579                                                                  Core::CampaignDataCategory::CharacterStates,
0580                                                                  Core::CampaignDataCategory::DiceAlias}
0581                           << false;
0582 
0583     /* {
0584          Core::CampaignDataCategory::AudioPlayer1, Core::CampaignDataCategory::AudioPlayer2,
0585              Core::CampaignDataCategory::AudioPlayer3, Core::CampaignDataCategory::Images,
0586              Core::CampaignDataCategory::Maps, Core::CampaignDataCategory::MindMaps, Core::CampaignDataCategory::Notes,
0587              Core::CampaignDataCategory::WebLink, Core::CampaignDataCategory::PDFDoc,
0588              Core::CampaignDataCategory::DiceAlias, Core::CampaignDataCategory::CharacterStates,
0589              Core::CampaignDataCategory::Themes, Core::CampaignDataCategory::CharacterSheets,
0590              Core::CampaignDataCategory::AntagonistList
0591      }*/
0592 }
0593 
0594 void CampaignTest::editorCampaign()
0595 {
0596     auto editor = m_manager->editor();
0597 
0598     editor->mergeAudioFile(Helper::randomString(),Helper::randomString());
0599 
0600     QVERIFY(!editor->copyTheme(Helper::randomString(),Helper::randomString()));
0601     QVERIFY(!editor->mergeJsonArrayFile(Helper::randomString(),Helper::randomString()));
0602     QVERIFY(!editor->removeFile(Helper::randomString()));
0603     QVERIFY(!editor->removeMedia(Helper::randomString()));
0604     QVERIFY(!editor->mediaFullPath(Helper::randomString()).isEmpty());
0605     QCOMPARE(editor->currentDir(), QString());
0606     //QVERIFY(!editor->currentDir().isEmpty());
0607     QVERIFY(!editor->mediaFullPathWithExtension(Helper::randomString(),
0608                                                 Helper::randomFromList<Core::ContentType>(
0609                                                     {
0610                                                      Core::ContentType::CHARACTERSHEET,
0611                                                      Core::ContentType::INSTANTMESSAGING,
0612                                                      Core::ContentType::MINDMAP,
0613                                                      Core::ContentType::NOTES,
0614                                                      Core::ContentType::PDF,
0615                                                      Core::ContentType::PICTURE,
0616                                                      Core::ContentType::SHAREDNOTE,
0617                                                      Core::ContentType::VECTORIALMAP,
0618                                                      Core::ContentType::WEBVIEW
0619                                                     })
0620                                                 ).isEmpty());
0621 
0622     editor->saveAvatar(Helper::randomString(),{});
0623     editor->doCommand(nullptr);
0624 
0625 }
0626 
0627 void CampaignTest::campaignTest()
0628 {
0629     auto camp = m_manager->campaign();
0630 
0631     QVERIFY(!camp->currentStorePath().isEmpty());
0632     camp->renameMedia(Helper::randomString(), Helper::randomString());
0633     camp->pathFromUuid(Helper::randomString());
0634 
0635     QList<campaign::Campaign::Place> places{campaign::Campaign::Place::DICE_MODEL,
0636                                             campaign::Campaign::Place::NPC_MODEL,
0637                                             campaign::Campaign::Place::STATE_MODEL,
0638                                             campaign::Campaign::Place::FIRST_AUDIO_PLAYER_FILE,
0639                                             campaign::Campaign::Place::SECOND_AUDIO_PLAYER_FILE,
0640                                             campaign::Campaign::Place::THIRD_AUDIO_PLAYER_FILE,
0641                                             campaign::Campaign::Place::MEDIA_ROOT,
0642                                             campaign::Campaign::Place::STATE_MODEL,
0643                                             campaign::Campaign::Place::STATE_ROOT,
0644                                             campaign::Campaign::Place::NPC_MODEL,
0645                                             campaign::Campaign::Place::NPC_ROOT,
0646                                             campaign::Campaign::Place::THEME_FILE,
0647                                             campaign::Campaign::Place::TRASH_ROOT};
0648 
0649     for(auto type : places)
0650         QVERIFY(!camp->directory(type).isEmpty());
0651 
0652 
0653     camp->postError(Helper::randomString());
0654 
0655     camp->addAlias();
0656     camp->deleteAlias(QModelIndex());
0657     auto model = camp->diceAliases();
0658     camp->deleteAlias(model->index(0,0,QModelIndex()));
0659 
0660     camp->convertAlias(Helper::randomString());
0661 
0662     camp->addState();
0663     camp->deleteState(QModelIndex());
0664 
0665     auto states = camp->stateModel();
0666     camp->deleteState(states->index(0,0,QModelIndex()));
0667 
0668 
0669     QList<campaign::Campaign::Move> moves{campaign::Campaign::Move::UP, campaign::Campaign::Move::TOP, campaign::Campaign::Move::DOWN, campaign::Campaign::Move::BOTTOM};
0670 
0671     for(auto m : moves)
0672         camp->moveState(states->index(0,0,QModelIndex()),m);
0673 
0674 
0675     for(auto m : moves)
0676         camp->moveAlias(model->index(0,0,QModelIndex()),m);
0677 
0678 
0679     camp->addCharacter();
0680     camp->removeCharacter(Helper::randomString());
0681 }
0682 
0683 void CampaignTest::campaignManagerTest()
0684 {
0685     m_manager->importFile(Helper::randomUrl());
0686     auto file = Helper::randomString();
0687     m_manager->createFileFromData(file, Helper::imageData());
0688 
0689     m_manager->removeFile(file);
0690     m_manager->reload();
0691 
0692     m_manager->openCampaign(Helper::randomUrl());
0693     m_manager->shareModels();
0694 
0695     QList<QPair<QString, Core::CampaignAction>> actions{{Helper::randomString(),Core::CampaignAction::ForgetAction},
0696         {Helper::randomString(),Core::CampaignAction::CreateAction},
0697         {Helper::randomString(),Core::CampaignAction::ManageAction},
0698         {Helper::randomString(),Core::CampaignAction::DeleteAction}};
0699 
0700 
0701 
0702     m_manager->performAction(actions);
0703 
0704     m_manager->importDataFrom(Helper::randomString(), {Core::CampaignDataCategory::AudioPlayer1,
0705                                                        Core::CampaignDataCategory::AudioPlayer2,
0706                                                        Core::CampaignDataCategory::AudioPlayer3,
0707                                                        Core::CampaignDataCategory::Images,
0708                                                        Core::CampaignDataCategory::Maps,
0709                                                        Core::CampaignDataCategory::MindMaps,
0710                                                        Core::CampaignDataCategory::Notes,
0711                                                        Core::CampaignDataCategory::WebLink,
0712                                                        Core::CampaignDataCategory::PDFDoc,
0713                                                        Core::CampaignDataCategory::DiceAlias,
0714                                                        Core::CampaignDataCategory::CharacterStates,
0715                                                        Core::CampaignDataCategory::Themes,
0716                                                        Core::CampaignDataCategory::CharacterSheets,
0717                                                        Core::CampaignDataCategory::AntagonistList});
0718 
0719 
0720 
0721 }
0722 
0723 QTEST_MAIN(CampaignTest)
0724 
0725 #include "tst_campaign.moc"