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"