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"