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

0001 /***************************************************************************
0002  *  Copyright (C) 2020 by Renaud Guezennec                               *
0003  *   http://www.rolisteam.org/contact                                      *
0004  *                                                                         *
0005  *   This software is free software; you can redistribute it and/or modify *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  *                                                                         *
0010  *   This program is distributed in the hope that it will be useful,       *
0011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0013  *   GNU General Public License for more details.                          *
0014  *                                                                         *
0015  *   You should have received a copy of the GNU General Public License     *
0016  *   along with this program; if not, write to the                         *
0017  *   Free Software Foundation, Inc.,                                       *
0018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
0019  ***************************************************************************/
0020 
0021 #include <QSignalSpy>
0022 #include <QTest>
0023 
0024 #include "controller/view_controller/charactersheetcontroller.h"
0025 #include "model/charactermodel.h"
0026 #include "model/playermodel.h"
0027 #include "data/player.h"
0028 #include "data/character.h"
0029 #include <helper.h>
0030 #include <QAbstractItemModelTester>
0031 #include <memory>
0032 
0033 class CharacterSheetControllerTest : public QObject
0034 {
0035     Q_OBJECT
0036 public:
0037     CharacterSheetControllerTest()= default;
0038 
0039 private slots:
0040     void init();
0041     void cleanupTestCase();
0042 
0043     void gameMasterTest();
0044 
0045 private:
0046     std::unique_ptr<CharacterSheetController> m_ctrl;
0047     std::unique_ptr<CharacterModel> m_characterModel;
0048     std::unique_ptr<PlayerModel> m_playerModel;
0049 };
0050 
0051 void CharacterSheetControllerTest::init()
0052 {
0053     m_playerModel.reset(new PlayerModel());
0054     m_characterModel.reset(new CharacterModel());
0055     new QAbstractItemModelTester(m_playerModel.get());
0056     m_characterModel->setSourceModel(m_playerModel.get());
0057     new QAbstractItemModelTester(m_characterModel.get());
0058     // m_characterModel.get(),
0059     m_ctrl.reset(new CharacterSheetController());
0060 
0061     CharacterSheetController::setCharacterModel(m_characterModel.get());
0062 }
0063 
0064 void CharacterSheetControllerTest::cleanupTestCase() {}
0065 
0066 void CharacterSheetControllerTest::gameMasterTest()
0067 {
0068     QCOMPARE(m_ctrl->gameMasterId(), QString());
0069     new QAbstractItemModelTester(m_ctrl->model());
0070 
0071     QSignalSpy spy(m_ctrl.get(), &CharacterSheetController::gameMasterIdChanged);
0072 
0073 
0074     m_ctrl->setGameMasterId("GameMasterID");
0075     m_ctrl->setGameMasterId("GameMasterID");
0076 
0077     QCOMPARE(m_ctrl->gameMasterId(), QString("GameMasterID"));
0078     QCOMPARE(spy.count(), 1);
0079 
0080     auto qml = Helper::randomString();
0081     m_ctrl->setQmlCode(qml);
0082 
0083     QVERIFY(!m_ctrl->cornerEnabled());
0084 
0085     QJsonObject obj;
0086     m_ctrl->setRootJson(obj);
0087     m_ctrl->setRootJson(obj);
0088 
0089     auto idsheet = Helper::randomString();
0090     auto id = Helper::randomString();
0091 
0092     obj["name"]= Helper::randomString();
0093     obj["idSheet"]= idsheet;
0094     QJsonObject array= QJsonObject();
0095 
0096     for(int i = 0; i  < 10 ; ++i)
0097     {
0098         QJsonObject item;
0099         item["type"]= "field";
0100         item["typefield"]= Helper::generate<int>(0,15);
0101         item["id"]= QString::number(i);
0102         item["label"]= Helper::randomString();
0103         item["value"]= Helper::randomString();
0104         item["formula"]=QString{};
0105         item["readonly"]= false;
0106         array[Helper::randomString()]= item;
0107     }
0108     obj["values"]= array;
0109 
0110     QSignalSpy spy2(m_ctrl.get(), &CharacterSheetController::sheetCreated);
0111     m_ctrl->addCharacterSheet(obj,id);
0112 
0113     Player* p1 = new Player;
0114     p1->setUuid(id);
0115 
0116     spy2.wait(10);
0117     QCOMPARE(spy2.count(), 0);
0118 
0119     m_playerModel->addPlayer(p1);
0120     m_ctrl->addCharacterSheet(obj,id);
0121 
0122     spy2.wait(10);
0123     QCOMPARE(spy2.count(), 0);
0124 
0125     p1->setUuid(Helper::randomString());
0126 
0127     Character* charac = new Character;
0128     charac->setNpc(false);
0129     charac->setUuid(id);
0130     p1->addCharacter(charac);
0131 
0132     m_ctrl->addCharacterSheet(obj,id);
0133 
0134     spy2.wait(10);
0135     QCOMPARE(spy2.count(), 1);
0136 
0137 
0138     QSignalSpy spyAll(m_ctrl.get(), &CharacterSheetController::share);
0139 
0140     m_ctrl->setLocalGM(false);
0141     m_ctrl->shareCharacterSheetToAll(0);
0142     spyAll.wait(10);
0143     QCOMPARE(spyAll.count(), 0);
0144 
0145     m_ctrl->setLocalGM(true);
0146     m_ctrl->shareCharacterSheetToAll(80);
0147     spyAll.wait(10);
0148     QCOMPARE(spyAll.count(), 0);
0149 
0150     m_ctrl->shareCharacterSheetToAll(0);
0151     spyAll.wait(10);
0152     QCOMPARE(spyAll.count(), 1);
0153 
0154     spyAll.clear();
0155 
0156     m_ctrl->shareCharacterSheetTo(Helper::randomString(), 0);
0157     spyAll.wait(10);
0158     QCOMPARE(spyAll.count(), 0);
0159     m_ctrl->shareCharacterSheetTo(p1->uuid(), 80);
0160     spyAll.wait(10);
0161     QCOMPARE(spyAll.count(), 0);
0162 
0163     m_ctrl->shareCharacterSheetTo(p1->uuid(), 0);
0164     spyAll.wait(10);
0165     QCOMPARE(spyAll.count(), 0);
0166 
0167     m_ctrl->shareCharacterSheetTo(charac->uuid(), 0);
0168     spyAll.wait(10);
0169     QCOMPARE(spyAll.count(), 1);
0170 }
0171 QTEST_MAIN(CharacterSheetControllerTest);
0172 
0173 #include "tst_charactersheetcontrollertest.moc"