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()25 void 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()33 void 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()62 void 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