File indexing completed on 2024-05-12 05:22:08
0001 /* 0002 * SPDX-FileCopyrightText: 2023 Claudio Cambra <claudio.cambra@kde.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include <QObject> 0008 #include <QTest> 0009 0010 #include <KContacts/Picture> 0011 0012 #include "peopleservice.h" 0013 #include "peopletestutils.h" 0014 #include "fakenetworkaccessmanagerfactory.h" 0015 #include "testutils.h" 0016 0017 #include "account.h" 0018 #include "types.h" 0019 #include "people/person.h" 0020 #include "people/personfetchjob.h" 0021 0022 Q_DECLARE_METATYPE(QList<FakeNetworkAccessManager::Scenario>) 0023 Q_DECLARE_METATYPE(KGAPI2::People::PersonList) 0024 0025 namespace KGAPI2 { 0026 namespace People { 0027 0028 class PersonFetchJobTest : public QObject 0029 { 0030 Q_OBJECT 0031 0032 private Q_SLOTS: 0033 void initTestCase() 0034 { 0035 NetworkAccessManagerFactory::setFactory(new FakeNetworkAccessManagerFactory); 0036 } 0037 0038 void testFetch_data() 0039 { 0040 QTest::addColumn<QList<FakeNetworkAccessManager::Scenario>>("scenarios"); 0041 QTest::addColumn<QString>("personResourceName"); 0042 QTest::addColumn<People::PersonList>("peopleFetched"); 0043 0044 const auto person1FetchRequest = scenarioFromFile(QFINDTESTDATA("data/person1_fetch_request.txt"), QFINDTESTDATA("data/person1_fetch_response.txt")); 0045 const auto person2FetchRequest = scenarioFromFile(QFINDTESTDATA("data/person2_fetch_request.txt"), QFINDTESTDATA("data/person2_fetch_response.txt")); 0046 const auto fullConnectionsFetchRequest = scenarioFromFile(QFINDTESTDATA("data/connections_initial_fetch_request.txt"), QFINDTESTDATA("data/connections_full_fetch_response.txt")); 0047 const auto partialConnectionsInitialFetchRequest = scenarioFromFile(QFINDTESTDATA("data/connections_initial_fetch_request.txt"), QFINDTESTDATA("data/connections_partial_fetch_response_1.txt")); 0048 const auto partialConnectionsFollowupFetchRequest = scenarioFromFile(QFINDTESTDATA("data/connections_partial_followup_fetch_request.txt"), QFINDTESTDATA("data/connections_partial_fetch_response_2.txt")); 0049 const auto person1 = TestUtils::personFromFile(QFINDTESTDATA("data/person1.json")); 0050 const auto person2 = TestUtils::personFromFile(QFINDTESTDATA("data/person2.json")); 0051 0052 QTest::newRow("simple person1 fetch") << QList<FakeNetworkAccessManager::Scenario>{ person1FetchRequest } 0053 << person1->resourceName() 0054 << People::PersonList{ person1 }; 0055 0056 QTest::newRow("simple person2 fetch") << QList<FakeNetworkAccessManager::Scenario>{ person2FetchRequest } 0057 << person2->resourceName() 0058 << People::PersonList{ person2 }; 0059 0060 QTest::newRow("full connections fetch") << QList<FakeNetworkAccessManager::Scenario>{ fullConnectionsFetchRequest } 0061 << QString() 0062 << People::PersonList{ person1, person2 }; 0063 0064 QTest::newRow("partial connections fetch") << QList<FakeNetworkAccessManager::Scenario>{ partialConnectionsInitialFetchRequest, partialConnectionsFollowupFetchRequest } 0065 << QString() 0066 << People::PersonList{ person1, person2 }; 0067 } 0068 0069 void testFetch() 0070 { 0071 QFETCH(QList<FakeNetworkAccessManager::Scenario>, scenarios); 0072 QFETCH(QString, personResourceName); 0073 QFETCH(PersonList, peopleFetched); 0074 0075 FakeNetworkAccessManagerFactory::get()->setScenarios(scenarios); 0076 0077 const auto account = AccountPtr::create(QStringLiteral("MockAccount"), QStringLiteral("MockToken")); 0078 const auto job = new PersonFetchJob(personResourceName, account); 0079 QVERIFY(execJob(job)); 0080 const auto items = job->items(); 0081 QCOMPARE(items.count(), peopleFetched.count()); 0082 0083 for (auto i = 0; i < peopleFetched.count(); ++i) { 0084 const auto returnedPerson = items.at(i).dynamicCast<Person>(); 0085 QVERIFY(returnedPerson); 0086 QCOMPARE(*returnedPerson, *peopleFetched.at(i)); 0087 } 0088 } 0089 }; 0090 0091 } 0092 } 0093 0094 QTEST_GUILESS_MAIN(KGAPI2::People::PersonFetchJobTest) 0095 0096 #include "personfetchjobtest.moc"