File indexing completed on 2024-05-12 05:26:22
0001 #include <QTest> 0002 0003 #include <QString> 0004 #include <QSharedPointer> 0005 #include <QDebug> 0006 0007 #include "dummyresource/resourcefactory.h" 0008 #include "store.h" 0009 0010 #include "common/domainadaptor.h" 0011 #include "common/entitybuffer.h" 0012 #include "event_generated.h" 0013 #include "mail_generated.h" 0014 #include "metadata_generated.h" 0015 #include "entity_generated.h" 0016 0017 class TestFactory : public DomainTypeAdaptorFactory<Sink::ApplicationDomain::Event> 0018 { 0019 public: 0020 TestFactory() = default; 0021 }; 0022 0023 class TestMailFactory : public DomainTypeAdaptorFactory<Sink::ApplicationDomain::Mail> 0024 { 0025 public: 0026 TestMailFactory() = default; 0027 }; 0028 0029 class TestContactFactory : public DomainTypeAdaptorFactory<Sink::ApplicationDomain::Contact> 0030 { 0031 public: 0032 TestContactFactory() = default; 0033 }; 0034 0035 /** 0036 * Test of domain adaptor, that it can read and write buffers. 0037 */ 0038 class DomainAdaptorTest : public QObject 0039 { 0040 Q_OBJECT 0041 private slots: 0042 void initTestCase() 0043 { 0044 } 0045 0046 void cleanupTestCase() 0047 { 0048 } 0049 0050 void testCreateBufferPart() 0051 { 0052 auto writeMapper = QSharedPointer<PropertyMapper>::create(); 0053 Sink::ApplicationDomain::TypeImplementation<Sink::ApplicationDomain::Event>::configure(*writeMapper); 0054 0055 Sink::ApplicationDomain::Event event; 0056 event.setProperty("summary", "foo"); 0057 0058 flatbuffers::FlatBufferBuilder fbb; 0059 auto pos = createBufferPart<Sink::ApplicationDomain::Buffer::EventBuilder, Sink::ApplicationDomain::Buffer::Event>(event, fbb, *writeMapper); 0060 Sink::ApplicationDomain::Buffer::FinishEventBuffer(fbb, pos); 0061 0062 flatbuffers::Verifier verifier(fbb.GetBufferPointer(), fbb.GetSize()); 0063 QVERIFY(verifier.VerifyBuffer<Sink::ApplicationDomain::Buffer::Event>(nullptr)); 0064 } 0065 0066 void testAdaptor() 0067 { 0068 // Create entity buffer 0069 flatbuffers::FlatBufferBuilder metadataFbb; 0070 auto metadataBuilder = Sink::MetadataBuilder(metadataFbb); 0071 metadataBuilder.add_revision(1); 0072 auto metadataBuffer = metadataBuilder.Finish(); 0073 Sink::FinishMetadataBuffer(metadataFbb, metadataBuffer); 0074 0075 flatbuffers::FlatBufferBuilder m_fbb; 0076 auto summary = m_fbb.CreateString("summary1"); 0077 auto description = m_fbb.CreateString("description"); 0078 0079 auto builder = Sink::ApplicationDomain::Buffer::EventBuilder(m_fbb); 0080 builder.add_summary(summary); 0081 builder.add_description(description); 0082 auto buffer = builder.Finish(); 0083 Sink::ApplicationDomain::Buffer::FinishEventBuffer(m_fbb, buffer); 0084 0085 flatbuffers::FlatBufferBuilder fbb; 0086 Sink::EntityBuffer::assembleEntityBuffer( 0087 fbb, metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), m_fbb.GetBufferPointer(), m_fbb.GetSize(), m_fbb.GetBufferPointer(), m_fbb.GetSize()); 0088 0089 // Extract entity buffer 0090 { 0091 std::string data(reinterpret_cast<const char *>(fbb.GetBufferPointer()), fbb.GetSize()); 0092 Sink::EntityBuffer buffer((void *)(data.data()), data.size()); 0093 0094 TestFactory factory; 0095 auto adaptor = factory.createAdaptor(buffer.entity()); 0096 QCOMPARE(adaptor->getProperty("summary").toString(), QString("summary1")); 0097 } 0098 } 0099 0100 void testMail() 0101 { 0102 auto writeMapper = QSharedPointer<PropertyMapper>::create(); 0103 Sink::ApplicationDomain::TypeImplementation<Sink::ApplicationDomain::Mail>::configure(*writeMapper); 0104 0105 Sink::ApplicationDomain::Mail mail; 0106 mail.setExtractedSubject("summary"); 0107 mail.setMimeMessage("foobar"); 0108 mail.setFolder("folder"); 0109 0110 flatbuffers::FlatBufferBuilder metadataFbb; 0111 auto metadataBuilder = Sink::MetadataBuilder(metadataFbb); 0112 metadataBuilder.add_revision(1); 0113 auto metadataBuffer = metadataBuilder.Finish(); 0114 Sink::FinishMetadataBuffer(metadataFbb, metadataBuffer); 0115 0116 flatbuffers::FlatBufferBuilder mailFbb; 0117 auto pos = createBufferPart<Sink::ApplicationDomain::Buffer::MailBuilder, Sink::ApplicationDomain::Buffer::Mail>(mail, mailFbb, *writeMapper); 0118 Sink::ApplicationDomain::Buffer::FinishMailBuffer(mailFbb, pos); 0119 0120 flatbuffers::FlatBufferBuilder fbb; 0121 Sink::EntityBuffer::assembleEntityBuffer( 0122 fbb, metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), mailFbb.GetBufferPointer(), mailFbb.GetSize(), mailFbb.GetBufferPointer(), mailFbb.GetSize()); 0123 0124 { 0125 std::string data(reinterpret_cast<const char *>(fbb.GetBufferPointer()), fbb.GetSize()); 0126 Sink::EntityBuffer buffer((void *)(data.data()), data.size()); 0127 0128 TestMailFactory factory; 0129 auto adaptor = factory.createAdaptor(buffer.entity()); 0130 Sink::ApplicationDomain::Mail readMail{QByteArray{}, QByteArray{}, 0, adaptor}; 0131 QCOMPARE(readMail.getSubject(), mail.getSubject()); 0132 QCOMPARE(readMail.getMimeMessage(), mail.getMimeMessage()); 0133 QCOMPARE(readMail.getFolder(), mail.getFolder()); 0134 } 0135 0136 } 0137 0138 void testContact() 0139 { 0140 auto writeMapper = QSharedPointer<PropertyMapper>::create(); 0141 Sink::ApplicationDomain::TypeImplementation<Sink::ApplicationDomain::Contact>::configure(*writeMapper); 0142 0143 auto binaryData = QByteArray::fromRawData("\xEF\xBF\xBD\x00\xEF\xBF", 5); 0144 0145 Sink::ApplicationDomain::Contact contact; 0146 contact.setPhoto(binaryData); 0147 QVERIFY(!contact.getPhoto().isEmpty()); 0148 0149 flatbuffers::FlatBufferBuilder metadataFbb; 0150 auto metadataBuilder = Sink::MetadataBuilder(metadataFbb); 0151 metadataBuilder.add_revision(1); 0152 auto metadataBuffer = metadataBuilder.Finish(); 0153 Sink::FinishMetadataBuffer(metadataFbb, metadataBuffer); 0154 0155 flatbuffers::FlatBufferBuilder mailFbb; 0156 auto pos = createBufferPart<Sink::ApplicationDomain::Buffer::ContactBuilder, Sink::ApplicationDomain::Buffer::Contact>(contact, mailFbb, *writeMapper); 0157 Sink::ApplicationDomain::Buffer::FinishContactBuffer(mailFbb, pos); 0158 0159 flatbuffers::FlatBufferBuilder fbb; 0160 Sink::EntityBuffer::assembleEntityBuffer( 0161 fbb, metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), mailFbb.GetBufferPointer(), mailFbb.GetSize(), mailFbb.GetBufferPointer(), mailFbb.GetSize()); 0162 0163 { 0164 std::string data(reinterpret_cast<const char *>(fbb.GetBufferPointer()), fbb.GetSize()); 0165 Sink::EntityBuffer buffer((void *)(data.data()), data.size()); 0166 0167 TestContactFactory factory; 0168 auto adaptor = factory.createAdaptor(buffer.entity()); 0169 Sink::ApplicationDomain::Contact readContact{QByteArray{}, QByteArray{}, 0, adaptor}; 0170 QCOMPARE(readContact.getPhoto(), contact.getPhoto()); 0171 } 0172 0173 } 0174 }; 0175 0176 QTEST_MAIN(DomainAdaptorTest) 0177 #include "domainadaptortest.moc"