File indexing completed on 2025-03-09 04:57:04
0001 /* 0002 * SPDX-FileCopyrightText: 2015 Kevin Ottens <ervin@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 */ 0005 0006 0007 #include "testlib/akonadifakedata.h" 0008 #include "akonadi/akonadimonitorinterface.h" 0009 #include "akonadi/akonadiserializer.h" 0010 0011 #include <testlib/qtest_zanshin.h> 0012 0013 #include <akonadiserializer.h> 0014 0015 namespace QTest { 0016 0017 template<typename T> 0018 inline bool zCompareHelper(bool isOk, 0019 const T &left, const T &right, 0020 const char *actual, const char *expected, 0021 const char *file, int line) 0022 { 0023 return compare_helper(isOk, isOk ? "COMPARE()" : "Compared values are not the same", 0024 toString<T>(left), toString<T>(right), 0025 actual, expected, 0026 file, line); 0027 } 0028 0029 // More aggressive compare to make sure we just don't get collections with ids out 0030 template <> 0031 inline bool qCompare(const Akonadi::Collection &left, const Akonadi::Collection &right, 0032 const char *actual, const char *expected, 0033 const char *file, int line) 0034 { 0035 return zCompareHelper((left == right) && (left.displayName() == right.displayName()), 0036 left, right, actual, expected, file, line); 0037 } 0038 0039 // More aggressive compare to make sure we just don't get items with ids out 0040 template <> 0041 inline bool qCompare(const Akonadi::Item &left, const Akonadi::Item &right, 0042 const char *actual, const char *expected, 0043 const char *file, int line) 0044 { 0045 return zCompareHelper((left == right) && (left.payloadData() == right.payloadData()), 0046 left, right, actual, expected, file, line); 0047 } 0048 0049 } 0050 0051 namespace 0052 { 0053 template<typename T> 0054 QSet<T> listToSet(const QList<T> &list) 0055 { 0056 return {list.cbegin(), list.cend()}; 0057 } 0058 } 0059 0060 class AkonadiFakeDataTest : public QObject 0061 { 0062 Q_OBJECT 0063 public: 0064 explicit AkonadiFakeDataTest(QObject *parent = nullptr) 0065 : QObject(parent) 0066 { 0067 qRegisterMetaType<Akonadi::Collection>(); 0068 qRegisterMetaType<Akonadi::Item>(); 0069 } 0070 0071 private slots: 0072 void shouldBeInitiallyEmpty() 0073 { 0074 // GIVEN 0075 auto data = Testlib::AkonadiFakeData(); 0076 0077 // THEN 0078 QVERIFY(data.collections().isEmpty()); 0079 QVERIFY(data.contexts().isEmpty()); 0080 QVERIFY(data.items().isEmpty()); 0081 } 0082 0083 void shouldCreateCollections() 0084 { 0085 // GIVEN 0086 auto data = Testlib::AkonadiFakeData(); 0087 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0088 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::collectionAdded); 0089 0090 auto c1 = Akonadi::Collection(42); 0091 c1.setName(QStringLiteral("42")); 0092 auto c2 = Akonadi::Collection(43); 0093 c2.setName(QStringLiteral("43")); 0094 const auto colSet = QSet<Akonadi::Collection>() << c1 << c2; 0095 0096 // WHEN 0097 data.createCollection(c1); 0098 data.createCollection(c2); 0099 0100 // THEN 0101 QCOMPARE(listToSet(data.collections()), colSet); 0102 QCOMPARE(data.collection(c1.id()), c1); 0103 QCOMPARE(data.collection(c2.id()), c2); 0104 0105 QCOMPARE(spy.size(), 2); 0106 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Collection>(), c1); 0107 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Collection>(), c2); 0108 } 0109 0110 void shouldModifyCollections() 0111 { 0112 // GIVEN 0113 auto data = Testlib::AkonadiFakeData(); 0114 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0115 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::collectionChanged); 0116 0117 auto c1 = Akonadi::Collection(42); 0118 c1.setName(QStringLiteral("42")); 0119 data.createCollection(c1); 0120 0121 auto c2 = Akonadi::Collection(c1.id()); 0122 c2.setName(QStringLiteral("42-bis")); 0123 0124 // WHEN 0125 data.modifyCollection(c2); 0126 0127 // THEN 0128 QCOMPARE(data.collections().size(), 1); 0129 QCOMPARE(data.collection(c1.id()), c2); 0130 0131 QCOMPARE(spy.size(), 1); 0132 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Collection>(), c2); 0133 } 0134 0135 void shouldNotLoseParentCollectionOnModifyCollection() 0136 { 0137 // GIVEN 0138 auto data = Testlib::AkonadiFakeData(); 0139 0140 auto root = Akonadi::Collection(42); 0141 root.setName(QStringLiteral("root")); 0142 data.createCollection(root); 0143 0144 auto c1 = Akonadi::Collection(43); 0145 c1.setName(QStringLiteral("43")); 0146 c1.setParentCollection(Akonadi::Collection(root.id())); 0147 data.createCollection(c1); 0148 0149 auto c2 = Akonadi::Collection(c1.id()); 0150 c2.setName(QStringLiteral("43-bis")); 0151 0152 // WHEN 0153 data.modifyCollection(c2); 0154 0155 // THEN 0156 QCOMPARE(data.collections().size(), 2); 0157 QCOMPARE(data.collection(c1.id()), c2); 0158 QCOMPARE(data.collection(c1.id()).parentCollection().id(), root.id()); 0159 } 0160 0161 void shouldListChildCollections() 0162 { 0163 // GIVEN 0164 auto data = Testlib::AkonadiFakeData(); 0165 auto c1 = Akonadi::Collection(42); 0166 c1.setName(QStringLiteral("42")); 0167 auto c2 = Akonadi::Collection(43); 0168 c2.setName(QStringLiteral("43")); 0169 c2.setParentCollection(Akonadi::Collection(42)); 0170 const auto colSet = QSet<Akonadi::Collection>() << c2; 0171 0172 // WHEN 0173 data.createCollection(c1); 0174 data.createCollection(c2); 0175 0176 // THEN 0177 QVERIFY(data.childCollections(c2.id()).isEmpty()); 0178 QCOMPARE(listToSet(data.childCollections(c1.id())), colSet); 0179 } 0180 0181 void shouldReparentCollectionsOnModify() 0182 { 0183 // GIVEN 0184 auto data = Testlib::AkonadiFakeData(); 0185 0186 auto c1 = Akonadi::Collection(42); 0187 c1.setName(QStringLiteral("42")); 0188 data.createCollection(c1); 0189 0190 auto c2 = Akonadi::Collection(43); 0191 c2.setName(QStringLiteral("43")); 0192 data.createCollection(c2); 0193 0194 auto c3 = Akonadi::Collection(44); 0195 c3.setParentCollection(Akonadi::Collection(42)); 0196 data.createCollection(c3); 0197 0198 // WHEN 0199 c3.setParentCollection(Akonadi::Collection(43)); 0200 data.modifyCollection(c3); 0201 0202 // THEN 0203 QVERIFY(data.childCollections(c1.id()).isEmpty()); 0204 QCOMPARE(data.childCollections(c2.id()).size(), 1); 0205 QCOMPARE(data.childCollections(c2.id()).at(0), c3); 0206 } 0207 0208 void shouldRemoveCollections() 0209 { 0210 // GIVEN 0211 auto data = Testlib::AkonadiFakeData(); 0212 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0213 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::collectionRemoved); 0214 Akonadi::Serializer serializer; 0215 0216 auto c1 = Akonadi::Collection(42); 0217 c1.setName(QStringLiteral("42")); 0218 data.createCollection(c1); 0219 0220 auto c2 = Akonadi::Collection(43); 0221 c2.setName(QStringLiteral("43")); 0222 c2.setParentCollection(Akonadi::Collection(42)); 0223 data.createCollection(c2); 0224 0225 auto c3 = Akonadi::Collection(44); 0226 c3.setName(QStringLiteral("44")); 0227 c3.setParentCollection(Akonadi::Collection(43)); 0228 data.createCollection(c3); 0229 0230 auto task1 = Domain::Task::Ptr::create(); 0231 auto i1 = serializer.createItemFromTask(task1); 0232 i1.setId(42); 0233 i1.setParentCollection(Akonadi::Collection(43)); 0234 data.createItem(i1); 0235 0236 auto task2 = Domain::Task::Ptr::create(); 0237 auto i2 = serializer.createItemFromTask(task2); 0238 i2.setId(43); 0239 i2.setParentCollection(Akonadi::Collection(44)); 0240 data.createItem(i2); 0241 0242 // WHEN 0243 data.removeCollection(c2); 0244 0245 // THEN 0246 QCOMPARE(data.collections().size(), 1); 0247 QCOMPARE(data.collections().at(0), c1); 0248 0249 QVERIFY(!data.collection(c2.id()).isValid()); 0250 QVERIFY(!data.collection(c3.id()).isValid()); 0251 0252 QVERIFY(data.childCollections(c1.id()).isEmpty()); 0253 QVERIFY(data.childCollections(c2.id()).isEmpty()); 0254 QVERIFY(data.childCollections(c3.id()).isEmpty()); 0255 0256 QVERIFY(data.items().isEmpty()); 0257 0258 QVERIFY(!data.item(i1.id()).isValid()); 0259 QVERIFY(!data.item(i2.id()).isValid()); 0260 0261 QVERIFY(data.childItems(c2.id()).isEmpty()); 0262 QVERIFY(data.childItems(c3.id()).isEmpty()); 0263 0264 QCOMPARE(spy.size(), 2); 0265 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Collection>(), c3); 0266 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Collection>(), c2); 0267 } 0268 0269 void shouldCreateContexts() 0270 { 0271 // GIVEN 0272 auto data = Testlib::AkonadiFakeData(); 0273 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0274 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::itemAdded); 0275 Akonadi::Serializer serializer; 0276 0277 auto context1 = Domain::Context::Ptr::create(); 0278 context1->setName(QStringLiteral("42")); 0279 context1->setProperty("todoUid", "ctx-42"); 0280 auto t1 = serializer.createItemFromContext(context1); 0281 0282 auto context2 = Domain::Context::Ptr::create(); 0283 context2->setName(QStringLiteral("43")); 0284 context2->setProperty("todoUid", "ctx-43"); 0285 auto t2 = serializer.createItemFromContext(context2); 0286 0287 // WHEN 0288 data.createContext(t1); 0289 data.createContext(t2); 0290 0291 // THEN 0292 QCOMPARE(data.contexts().size(), 2); 0293 QVERIFY(data.contexts().contains(t1)); 0294 QVERIFY(data.contexts().contains(t2)); 0295 QCOMPARE(data.contextItem("ctx-42"), t1); 0296 QCOMPARE(data.contextItem("ctx-43"), t2); 0297 0298 QCOMPARE(spy.size(), 2); 0299 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Item>(), t1); 0300 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Item>(), t2); 0301 } 0302 0303 void shouldModifyContexts() 0304 { 0305 // GIVEN 0306 auto data = Testlib::AkonadiFakeData(); 0307 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0308 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::itemChanged); 0309 Akonadi::Serializer serializer; 0310 0311 auto context1 = Domain::Context::Ptr::create(); 0312 context1->setName(QStringLiteral("42")); 0313 context1->setProperty("todoUid", "ctx-42"); 0314 auto t1 = serializer.createItemFromContext(context1); 0315 data.createContext(t1); 0316 0317 auto context2 = Domain::Context::Ptr::create(); 0318 context2->setName(QStringLiteral("42-bis")); 0319 context2->setProperty("todoUid", "ctx-42"); 0320 auto t2 = serializer.createItemFromContext(context2); 0321 0322 // WHEN 0323 data.modifyContext(t2); 0324 0325 // THEN 0326 QCOMPARE(data.contexts().size(), 1); 0327 QCOMPARE(data.contextItem("ctx-42"), t2); 0328 0329 QCOMPARE(spy.size(), 1); 0330 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Item>(), t2); 0331 } 0332 0333 void shouldRemoveContexts() 0334 { 0335 // GIVEN 0336 auto data = Testlib::AkonadiFakeData(); 0337 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0338 QSignalSpy contextSpy(monitor.data(), &Akonadi::MonitorInterface::itemRemoved); 0339 QSignalSpy itemSpy(monitor.data(), &Akonadi::MonitorInterface::itemChanged); 0340 Akonadi::Serializer serializer; 0341 0342 auto c1 = Akonadi::Collection(42); 0343 data.createCollection(c1); 0344 0345 auto context1 = Domain::Context::Ptr::create(); 0346 context1->setName(QStringLiteral("1")); 0347 context1->setProperty("todoUid", "ctx-1"); 0348 auto t1 = serializer.createItemFromContext(context1); 0349 data.createContext(t1); 0350 0351 auto context2 = Domain::Context::Ptr::create(); 0352 context2->setName(QStringLiteral("2")); 0353 context2->setProperty("todoUid", "ctx-2"); 0354 auto t2 = serializer.createItemFromContext(context2); 0355 data.createContext(t2); 0356 0357 auto task1 = Domain::Task::Ptr::create(); 0358 auto i1 = serializer.createItemFromTask(task1); 0359 i1.setParentCollection(c1); 0360 i1.setId(42); 0361 serializer.addContextToTask(context1, i1); 0362 data.createItem(i1); 0363 QVERIFY(serializer.isContextChild(context1, i1)); 0364 0365 auto task2 = Domain::Task::Ptr::create(); 0366 auto i2 = serializer.createItemFromTask(task2); 0367 i2.setParentCollection(c1); 0368 i2.setId(43); 0369 serializer.addContextToTask(context2, i2); 0370 data.createItem(i2); 0371 QVERIFY(serializer.isContextChild(context2, i2)); 0372 0373 const auto itemSet = QSet<Akonadi::Item>() << i1 << i2; 0374 0375 // WHEN 0376 data.removeContext(t2); 0377 0378 // THEN 0379 QCOMPARE(data.contexts().size(), 1); 0380 QCOMPARE(data.contexts().at(0), t1); 0381 0382 QVERIFY(!data.contextItem("ctx-2").isValid()); 0383 0384 QCOMPARE(data.contextItems("ctx-1").size(), 1); 0385 QCOMPARE(data.contextItems("ctx-1").at(0), i1); 0386 QVERIFY(data.contextItems("ctx-2").isEmpty()); 0387 0388 QCOMPARE(listToSet(data.items()), itemSet); 0389 0390 QVERIFY(data.item(i1.id()).isValid()); 0391 const auto item2 = data.item(i2.id()); 0392 QVERIFY(item2.isValid()); 0393 QVERIFY(!serializer.isContextChild(context2, item2)); 0394 0395 QCOMPARE(contextSpy.size(), 1); 0396 QCOMPARE(contextSpy.takeFirst().at(0).value<Akonadi::Item>().id(), t2.id()); 0397 0398 QCOMPARE(itemSpy.size(), 1); 0399 const auto emittedItem2 = itemSpy.first().at(0).value<Akonadi::Item>(); 0400 QCOMPARE(emittedItem2, i2); 0401 QVERIFY(!serializer.isContextChild(context2, emittedItem2)); 0402 } 0403 0404 void shouldCreateItems() 0405 { 0406 // GIVEN 0407 auto data = Testlib::AkonadiFakeData(); 0408 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0409 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::itemAdded); 0410 0411 auto i1 = Akonadi::Item(42); 0412 i1.setPayloadFromData("42"); 0413 auto i2 = Akonadi::Item(43); 0414 i2.setPayloadFromData("43"); 0415 const auto itemSet = QSet<Akonadi::Item>() << i1 << i2; 0416 0417 // WHEN 0418 data.createItem(i1); 0419 data.createItem(i2); 0420 0421 // THEN 0422 QCOMPARE(listToSet(data.items()), itemSet); 0423 QCOMPARE(data.item(i1.id()), i1); 0424 QCOMPARE(data.item(i2.id()), i2); 0425 0426 QCOMPARE(spy.size(), 2); 0427 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Item>(), i1); 0428 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Item>(), i2); 0429 } 0430 0431 void shouldModifyItems() 0432 { 0433 // GIVEN 0434 auto data = Testlib::AkonadiFakeData(); 0435 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0436 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::itemChanged); 0437 QSignalSpy moveSpy(monitor.data(), &Akonadi::MonitorInterface::itemMoved); 0438 0439 auto c1 = Akonadi::Collection(42); 0440 c1.setName(QStringLiteral("42")); 0441 data.createCollection(c1); 0442 0443 auto i1 = Akonadi::Item(42); 0444 i1.setPayloadFromData("42"); 0445 i1.setParentCollection(Akonadi::Collection(42)); 0446 data.createItem(i1); 0447 0448 auto i2 = Akonadi::Item(i1.id()); 0449 i2.setPayloadFromData("42-bis"); 0450 i2.setParentCollection(Akonadi::Collection(42)); 0451 0452 // WHEN 0453 data.modifyItem(i2); 0454 0455 // THEN 0456 QCOMPARE(data.items().size(), 1); 0457 QCOMPARE(data.item(i1.id()), i2); 0458 0459 QCOMPARE(spy.size(), 1); 0460 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Item>(), i2); 0461 0462 QCOMPARE(moveSpy.size(), 0); 0463 } 0464 0465 void shouldNotLoseParentCollectionOnModifyItem() 0466 { 0467 // GIVEN 0468 auto data = Testlib::AkonadiFakeData(); 0469 0470 auto c1 = Akonadi::Collection(42); 0471 c1.setName(QStringLiteral("42")); 0472 data.createCollection(c1); 0473 0474 auto i1 = Akonadi::Item(42); 0475 i1.setPayloadFromData("42"); 0476 i1.setParentCollection(Akonadi::Collection(42)); 0477 data.createItem(i1); 0478 0479 auto i2 = Akonadi::Item(i1.id()); 0480 i2.setPayloadFromData("42-bis"); 0481 0482 // WHEN 0483 data.modifyItem(i2); 0484 0485 // THEN 0486 QCOMPARE(data.items().size(), 1); 0487 QCOMPARE(data.item(i1.id()), i2); 0488 QCOMPARE(data.item(i1.id()).parentCollection().id(), c1.id()); 0489 } 0490 0491 void shouldListChildItems() 0492 { 0493 // GIVEN 0494 auto data = Testlib::AkonadiFakeData(); 0495 auto c1 = Akonadi::Collection(42); 0496 c1.setName(QStringLiteral("42")); 0497 data.createCollection(c1); 0498 0499 auto i1 = Akonadi::Item(42); 0500 i1.setPayloadFromData("42"); 0501 i1.setParentCollection(Akonadi::Collection(42)); 0502 0503 // WHEN 0504 data.createItem(i1); 0505 0506 // THEN 0507 QCOMPARE(data.childItems(c1.id()).size(), 1); 0508 QCOMPARE(data.childItems(c1.id()).at(0), i1); 0509 } 0510 0511 void shouldReparentItemsOnModify() 0512 { 0513 // GIVEN 0514 auto data = Testlib::AkonadiFakeData(); 0515 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0516 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::itemMoved); 0517 0518 auto c1 = Akonadi::Collection(42); 0519 c1.setName(QStringLiteral("42")); 0520 data.createCollection(c1); 0521 0522 auto c2 = Akonadi::Collection(43); 0523 c2.setName(QStringLiteral("43")); 0524 data.createCollection(c2); 0525 0526 auto i1 = Akonadi::Item(42); 0527 i1.setPayloadFromData("42"); 0528 i1.setParentCollection(Akonadi::Collection(42)); 0529 data.createItem(i1); 0530 0531 // WHEN 0532 i1.setPayloadFromData("42-bis"); 0533 i1.setParentCollection(Akonadi::Collection(43)); 0534 data.modifyItem(i1); 0535 0536 // THEN 0537 QVERIFY(data.childItems(c1.id()).isEmpty()); 0538 QCOMPARE(data.childItems(c2.id()).size(), 1); 0539 QCOMPARE(data.childItems(c2.id()).at(0), i1); 0540 0541 QCOMPARE(spy.size(), 1); 0542 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Item>(), i1); 0543 } 0544 0545 void shouldListContextItems() 0546 { 0547 // GIVEN 0548 auto data = Testlib::AkonadiFakeData(); 0549 Akonadi::Serializer serializer; 0550 0551 auto context1 = Domain::Context::Ptr::create(); 0552 context1->setName(QStringLiteral("42")); 0553 context1->setProperty("todoUid", "ctx-42"); 0554 auto t1 = serializer.createItemFromContext(context1); 0555 data.createContext(t1); 0556 0557 auto task1 = Domain::Task::Ptr::create(); 0558 auto i1 = serializer.createItemFromTask(task1); 0559 i1.setId(1); 0560 serializer.addContextToTask(context1, i1); 0561 0562 // WHEN 0563 data.createItem(i1); 0564 0565 // THEN 0566 QCOMPARE(data.contextItems("ctx-42").size(), 1); 0567 QCOMPARE(data.contextItems("ctx-42").at(0), i1); 0568 } 0569 0570 void shouldRetagItemsOnModify() 0571 { 0572 // GIVEN 0573 auto data = Testlib::AkonadiFakeData(); 0574 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0575 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::itemChanged); 0576 Akonadi::Serializer serializer; 0577 0578 auto context1 = Domain::Context::Ptr::create(); 0579 context1->setName(QStringLiteral("42")); 0580 context1->setProperty("todoUid", "ctx-42"); 0581 auto t1 = serializer.createItemFromContext(context1); 0582 data.createContext(t1); 0583 0584 auto context2 = Domain::Context::Ptr::create(); 0585 context2->setName(QStringLiteral("43")); 0586 context2->setProperty("todoUid", "ctx-43"); 0587 auto t2 = serializer.createItemFromContext(context2); 0588 data.createContext(t2); 0589 0590 auto task1 = Domain::Task::Ptr::create(); 0591 auto i1 = serializer.createItemFromTask(task1); 0592 i1.setId(1); 0593 serializer.addContextToTask(context1, i1); 0594 data.createItem(i1); 0595 0596 // WHEN 0597 auto i2 = serializer.createItemFromTask(task1); 0598 i2.setId(1); 0599 serializer.addContextToTask(context2, i2); 0600 data.modifyItem(i2); 0601 0602 // THEN 0603 QVERIFY(data.contextItems("ctx-42").isEmpty()); 0604 QCOMPARE(data.contextItems("ctx-43").size(), 1); 0605 QCOMPARE(data.contextItems("ctx-43").at(0), i2); 0606 0607 QCOMPARE(spy.size(), 1); 0608 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Item>(), i2); 0609 } 0610 0611 void shouldRemoveItems() 0612 { 0613 // GIVEN 0614 auto data = Testlib::AkonadiFakeData(); 0615 QScopedPointer<Akonadi::MonitorInterface> monitor(data.createMonitor()); 0616 QSignalSpy spy(monitor.data(), &Akonadi::MonitorInterface::itemRemoved); 0617 0618 auto c1 = Akonadi::Collection(42); 0619 c1.setName(QStringLiteral("42")); 0620 data.createCollection(c1); 0621 0622 auto i1 = Akonadi::Item(42); 0623 i1.setPayloadFromData("42"); 0624 i1.setParentCollection(Akonadi::Collection(42)); 0625 data.createItem(i1); 0626 0627 // WHEN 0628 data.removeItem(i1); 0629 0630 // THEN 0631 QVERIFY(data.items().isEmpty()); 0632 QVERIFY(!data.item(i1.id()).isValid()); 0633 QVERIFY(data.childItems(c1.id()).isEmpty()); 0634 0635 QCOMPARE(spy.size(), 1); 0636 QCOMPARE(spy.takeFirst().at(0).value<Akonadi::Item>().id(), i1.id()); 0637 } 0638 }; 0639 0640 ZANSHIN_TEST_MAIN(AkonadiFakeDataTest) 0641 0642 #include "akonadifakedatatest.moc"