1 /* 2 SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com> 3 4 SPDX-License-Identifier: LGPL-2.0-or-later 5 */ 6 7 #include "attributefactorytest.h" 8 #include "collectionpathresolver.h" 9 #include "testattribute.h" 10 11 #include "attributefactory.h" 12 #include "collection.h" 13 #include "itemcreatejob.h" 14 #include "itemfetchjob.h" 15 #include "itemfetchscope.h" 16 #include "qtest_akonadi.h" 17 #include "resourceselectjob_p.h" 18 19 using namespace Akonadi; 20 21 QTEST_AKONADIMAIN(AttributeFactoryTest) 22 23 static Collection res1; 24 initTestCase()25void AttributeFactoryTest::initTestCase() 26 { 27 AkonadiTest::checkTestIsIsolated(); 28 auto resolver = new CollectionPathResolver(QStringLiteral("res1"), this); 29 AKVERIFYEXEC(resolver); 30 res1 = Collection(resolver->collection()); 31 } 32 testUnknownAttribute()33void AttributeFactoryTest::testUnknownAttribute() 34 { 35 // The attribute is currently not registered. 36 Item item; 37 item.setMimeType(QStringLiteral("text/directory")); 38 item.setPayload<QByteArray>("payload"); 39 auto ta = new TestAttribute; 40 { 41 auto created = AttributeFactory::createAttribute(ta->type()); // DefaultAttribute 42 QVERIFY(created != nullptr); 43 delete created; 44 } 45 ta->data = "lalala"; 46 item.addAttribute(ta); 47 auto cjob = new ItemCreateJob(item, res1); 48 AKVERIFYEXEC(cjob); 49 int id = cjob->item().id(); 50 item = Item(id); 51 auto fjob = new ItemFetchJob(item); 52 fjob->fetchScope().fetchFullPayload(); 53 fjob->fetchScope().fetchAllAttributes(); 54 AKVERIFYEXEC(fjob); 55 QCOMPARE(fjob->items().count(), 1); 56 item = fjob->items().first(); 57 QVERIFY(item.hasAttribute<TestAttribute>()); // has DefaultAttribute 58 ta = item.attribute<TestAttribute>(); 59 QVERIFY(!ta); // but can't cast it to TestAttribute 60 } 61 testRegisteredAttribute()62void AttributeFactoryTest::testRegisteredAttribute() 63 { 64 AttributeFactory::registerAttribute<TestAttribute>(); 65 66 Item item; 67 item.setMimeType(QStringLiteral("text/directory")); 68 item.setPayload<QByteArray>("payload"); 69 auto ta = new TestAttribute; 70 { 71 auto created = AttributeFactory::createAttribute(ta->type()); 72 QVERIFY(created != nullptr); 73 delete created; 74 } 75 ta->data = "lalala"; 76 item.addAttribute(ta); 77 auto cjob = new ItemCreateJob(item, res1); 78 AKVERIFYEXEC(cjob); 79 int id = cjob->item().id(); 80 item = Item(id); 81 auto fjob = new ItemFetchJob(item); 82 fjob->fetchScope().fetchFullPayload(); 83 fjob->fetchScope().fetchAllAttributes(); 84 AKVERIFYEXEC(fjob); 85 QCOMPARE(fjob->items().count(), 1); 86 item = fjob->items().first(); 87 QVERIFY(item.hasAttribute<TestAttribute>()); 88 ta = item.attribute<TestAttribute>(); 89 QVERIFY(ta); 90 QCOMPARE(ta->data, QByteArray("lalala")); 91 } 92