File indexing completed on 2024-05-12 05:26:22
0001 #include <QTest> 0002 0003 #include <QDebug> 0004 #include <QString> 0005 0006 #include "common/storage/entitystore.h" 0007 #include "common/datastorequery.h" 0008 #include "common/adaptorfactoryregistry.h" 0009 #include "common/definitions.h" 0010 #include "testimplementations.h" 0011 0012 class DataStoreQueryTest : public QObject 0013 { 0014 Q_OBJECT 0015 private: 0016 QString resourceInstanceIdentifier{"resourceId"}; 0017 0018 struct Result { 0019 QVector<QByteArray> creations; 0020 QVector<QByteArray> modifications; 0021 QVector<QByteArray> removals; 0022 }; 0023 0024 Result readResult (ResultSet &resultSet) { 0025 Result result; 0026 resultSet.replaySet(0, 0, [&](const ResultSet::Result &r) { 0027 switch (r.operation) { 0028 case Sink::Operation_Creation: 0029 result.creations << r.entity.identifier(); 0030 break; 0031 case Sink::Operation_Modification: 0032 result.modifications << r.entity.identifier(); 0033 break; 0034 case Sink::Operation_Removal: 0035 result.removals << r.entity.identifier(); 0036 break; 0037 } 0038 }); 0039 return result; 0040 }; 0041 0042 0043 private slots: 0044 void initTestCase() 0045 { 0046 Sink::AdaptorFactoryRegistry::instance().registerFactory<Sink::ApplicationDomain::Mail, TestMailAdaptorFactory>("test"); 0047 } 0048 0049 void cleanup() 0050 { 0051 Sink::Storage::DataStore(Sink::storageLocation(), resourceInstanceIdentifier).removeFromDisk(); 0052 } 0053 0054 void testCleanup() 0055 { 0056 } 0057 0058 void testFullScan() 0059 { 0060 using namespace Sink; 0061 ResourceContext resourceContext{resourceInstanceIdentifier.toUtf8(), "dummy", AdaptorFactoryRegistry::instance().getFactories("test")}; 0062 Storage::EntityStore store(resourceContext, {}); 0063 0064 auto mail = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::Mail>("res1"); 0065 mail.setExtractedMessageId("messageid"); 0066 mail.setExtractedSubject("boo"); 0067 mail.setDraft(false); 0068 0069 auto mail2 = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::Mail>("res1"); 0070 mail2.setExtractedMessageId("messageid2"); 0071 mail2.setExtractedSubject("foo"); 0072 0073 auto mail3 = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::Mail>("res1"); 0074 mail3.setExtractedMessageId("messageid2"); 0075 mail3.setExtractedSubject("foo"); 0076 0077 store.startTransaction(Storage::DataStore::ReadWrite); 0078 store.add("mail", mail, false); 0079 store.add("mail", mail2, false); 0080 store.add("mail", mail3, false); 0081 0082 { 0083 auto query = DataStoreQuery {{}, "mail", store}; 0084 auto resultset = query.execute(); 0085 const auto result = readResult(resultset); 0086 QCOMPARE(result.creations.size(), 3); 0087 } 0088 //Ensure an incremental query with no changes also yields nothing 0089 { 0090 auto query = DataStoreQuery {{}, "mail", store}; 0091 auto resultset = query.update(store.maxRevision() + 1); 0092 const auto result = readResult(resultset); 0093 QCOMPARE(result.creations.size(), 0); 0094 QCOMPARE(result.modifications.size(), 0); 0095 } 0096 0097 auto revisionBeforeModification = store.maxRevision(); 0098 0099 mail.setExtractedSubject("foo"); 0100 store.modify("mail", mail, QByteArrayList{}, false); 0101 0102 { 0103 auto query = DataStoreQuery {{}, "mail", store}; 0104 auto resultset = query.execute(); 0105 const auto result = readResult(resultset); 0106 QCOMPARE(result.creations.size(), 3); 0107 } 0108 0109 { 0110 auto query = DataStoreQuery {{}, "mail", store}; 0111 auto resultset = query.update(revisionBeforeModification); 0112 const auto result = readResult(resultset); 0113 QCOMPARE(result.modifications.size(), 1); 0114 } 0115 0116 store.remove("mail", mail3, false); 0117 0118 { 0119 auto query = DataStoreQuery {{}, "mail", store}; 0120 auto resultset = query.execute(); 0121 const auto result = readResult(resultset); 0122 QCOMPARE(result.creations.size(), 2); 0123 } 0124 { 0125 auto query = DataStoreQuery {{}, "mail", store}; 0126 auto resultset = query.update(revisionBeforeModification); 0127 const auto result = readResult(resultset); 0128 QCOMPARE(result.modifications.size(), 1); 0129 //FIXME we shouldn't have the same id twice 0130 QCOMPARE(result.removals.size(), 2); 0131 } 0132 } 0133 0134 0135 }; 0136 0137 QTEST_MAIN(DataStoreQueryTest) 0138 #include "datastorequerytest.moc"