void ItemAppendTest::testMultipartAppend() { const Collection testFolder1(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(testFolder1.isValid()); Item item; item.setMimeType(QStringLiteral("application/octet-stream")); item.setPayload<QByteArray>("body data"); item.attribute<TestAttribute>(Item::AddIfMissing)->data = "extra data"; item.setFlag("TestFlag"); ItemCreateJob *job = new ItemCreateJob(item, testFolder1, this); AKVERIFYEXEC(job); Item ref = job->item(); ItemFetchJob *fjob = new ItemFetchJob(ref, this); fjob->fetchScope().fetchFullPayload(); fjob->fetchScope().fetchAttribute<TestAttribute>(); AKVERIFYEXEC(fjob); QCOMPARE(fjob->items().count(), 1); item = fjob->items().first(); QCOMPARE(item.payload<QByteArray>(), QByteArray("body data")); QVERIFY(item.hasAttribute<TestAttribute>()); QCOMPARE(item.attribute<TestAttribute>()->data, QByteArray("extra data")); QVERIFY(item.flags().contains("TestFlag")); ItemDeleteJob *djob = new ItemDeleteJob(ref, this); AKVERIFYEXEC(djob); }
void TagTest::testFetchItemsByTag() { const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Tag tag; { TagCreateJob *createjob = new TagCreateJob(Tag(QStringLiteral("gid1")), this); AKVERIFYEXEC(createjob); tag = createjob->tag(); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); //FIXME This should also be possible with create, but isn't item1.setTag(tag); } ItemModifyJob *modJob = new ItemModifyJob(item1, this); AKVERIFYEXEC(modJob); ItemFetchJob *fetchJob = new ItemFetchJob(tag, this); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().size(), 1); Item i = fetchJob->items().first(); QCOMPARE(i, item1); TagDeleteJob *deleteJob = new TagDeleteJob(tag, this); AKVERIFYEXEC(deleteJob); }
void ItemAppendTest::testContent() { const Collection testFolder1(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(testFolder1.isValid()); QFETCH(QByteArray, data); Item item; item.setMimeType(QStringLiteral("application/octet-stream")); if (!data.isNull()) { item.setPayload(data); } ItemCreateJob *job = new ItemCreateJob(item, testFolder1, this); AKVERIFYEXEC(job); Item ref = job->item(); ItemFetchJob *fjob = new ItemFetchJob(testFolder1, this); fjob->fetchScope().setCacheOnly(true); fjob->fetchScope().fetchFullPayload(); AKVERIFYEXEC(fjob); QCOMPARE(fjob->items().count(), 1); Item item2 = fjob->items().first(); QCOMPARE(item2.hasPayload(), !data.isNull()); if (item2.hasPayload()) { QCOMPARE(item2.payload<QByteArray>(), data); } ItemDeleteJob *djob = new ItemDeleteJob(ref, this); AKVERIFYEXEC(djob); }
void TagTest::testModifyItemWithTagByGID() { const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); { Tag tag; tag.setGid("gid2"); TagCreateJob *createjob = new TagCreateJob(tag, this); AKVERIFYEXEC(createjob); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } Tag tag; tag.setGid("gid2"); item1.setTag(tag); ItemModifyJob *modJob = new ItemModifyJob(item1, this); AKVERIFYEXEC(modJob); ItemFetchJob *fetchJob = new ItemFetchJob(item1, this); fetchJob->fetchScope().setFetchTags(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().tags().size(), 1); TagDeleteJob *deleteJob = new TagDeleteJob(fetchJob->items().first().tags().first(), this); AKVERIFYEXEC(deleteJob); }
void TagTest::testFetchTagIdWithItem() { const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Tag tag; { TagCreateJob *createjob = new TagCreateJob(Tag(QStringLiteral("gid1")), this); AKVERIFYEXEC(createjob); tag = createjob->tag(); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); item1.setTag(tag); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } ItemFetchJob *fetchJob = new ItemFetchJob(item1, this); fetchJob->fetchScope().setFetchTags(true); fetchJob->fetchScope().tagFetchScope().setFetchIdOnly(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().tags().size(), 1); Tag t = fetchJob->items().first().tags().first(); QCOMPARE(t.id(), tag.id()); QVERIFY(t.gid().isEmpty()); TagDeleteJob *deleteJob = new TagDeleteJob(tag, this); AKVERIFYEXEC(deleteJob); }
void RelationTest::testCreateFetch() { const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } Item item2; { item2.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item2, res3, this); AKVERIFYEXEC(append); item2 = append->item(); } Relation rel(Relation::GENERIC, item1, item2); RelationCreateJob *createjob = new RelationCreateJob(rel, this); AKVERIFYEXEC(createjob); //Test fetch & create { RelationFetchJob *fetchJob = new RelationFetchJob(QVector<QByteArray>(), this); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->relations().size(), 1); QCOMPARE(fetchJob->relations().first().type(), QByteArray(Relation::GENERIC)); } //Test item fetch { ItemFetchJob *fetchJob = new ItemFetchJob(item1); fetchJob->fetchScope().setFetchRelations(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().relations().size(), 1); } { ItemFetchJob *fetchJob = new ItemFetchJob(item2); fetchJob->fetchScope().setFetchRelations(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().relations().size(), 1); } //Test delete { RelationDeleteJob *deleteJob = new RelationDeleteJob(rel, this); AKVERIFYEXEC(deleteJob); RelationFetchJob *fetchJob = new RelationFetchJob(QVector<QByteArray>(), this); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->relations().size(), 0); } }
void TagTest::testModifyItemWithTagByRID() { { ResourceSelectJob *select = new ResourceSelectJob(QStringLiteral("akonadi_knut_resource_0")); AKVERIFYEXEC(select); } const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Tag tag3; { tag3.setGid("gid3"); tag3.setRemoteId("rid3"); TagCreateJob *createjob = new TagCreateJob(tag3, this); AKVERIFYEXEC(createjob); tag3 = createjob->tag(); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } Tag tag; tag.setRemoteId("rid2"); item1.setTag(tag); ItemModifyJob *modJob = new ItemModifyJob(item1, this); AKVERIFYEXEC(modJob); ItemFetchJob *fetchJob = new ItemFetchJob(item1, this); fetchJob->fetchScope().setFetchTags(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().tags().size(), 1); { TagDeleteJob *deleteJob = new TagDeleteJob(fetchJob->items().first().tags().first(), this); AKVERIFYEXEC(deleteJob); } { TagDeleteJob *deleteJob = new TagDeleteJob(tag3, this); AKVERIFYEXEC(deleteJob); } { ResourceSelectJob *select = new ResourceSelectJob(QStringLiteral("")); AKVERIFYEXEC(select); } }
void ItemAppendTest::testItemSize() { QFETCH(Akonadi::Item, item); QFETCH(qint64, size); const Collection col(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(col.isValid()); ItemCreateJob *create = new ItemCreateJob(item, col, this); AKVERIFYEXEC(create); Item newItem = create->item(); ItemFetchJob *fetch = new ItemFetchJob(newItem, this); AKVERIFYEXEC(fetch); QCOMPARE(fetch->items().count(), 1); QCOMPARE(fetch->items().first().size(), size); }
void ItemAppendTest::testInvalidMultipartAppend() { Item item; item.setMimeType(QStringLiteral("application/octet-stream")); item.setPayload<QByteArray>("body data"); item.attribute<TestAttribute>(Item::AddIfMissing)->data = "extra data"; item.setFlag("TestFlag"); ItemCreateJob *job = new ItemCreateJob(item, Collection(-1), this); QVERIFY(!job->exec()); Item item2; item2.setMimeType(QStringLiteral("application/octet-stream")); item2.setPayload<QByteArray>("more body data"); item2.attribute<TestAttribute>(Item::AddIfMissing)->data = "even more extra data"; item2.setFlag("TestFlag"); ItemCreateJob *job2 = new ItemCreateJob(item2, Collection(-1), this); QVERIFY(!job2->exec()); }
void ItemAppendTest::testNewMimetype() { const Collection col(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(col.isValid()); Item item; item.setMimeType(QStringLiteral("application/new-type")); ItemCreateJob *job = new ItemCreateJob(item, col, this); AKVERIFYEXEC(job); item = job->item(); QVERIFY(item.isValid()); ItemFetchJob *fetch = new ItemFetchJob(item, this); AKVERIFYEXEC(fetch); QCOMPARE(fetch->items().count(), 1); QCOMPARE(fetch->items().first().mimeType(), item.mimeType()); }
void RelationTest::testMonitor() { Akonadi::Monitor monitor; monitor.setTypeMonitored(Akonadi::Monitor::Relations); const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } Item item2; { item2.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item2, res3, this); AKVERIFYEXEC(append); item2 = append->item(); } Relation rel(Relation::GENERIC, item1, item2); { QSignalSpy addedSpy(&monitor, SIGNAL(relationAdded(Akonadi::Relation))); QVERIFY(addedSpy.isValid()); RelationCreateJob *createjob = new RelationCreateJob(rel, this); AKVERIFYEXEC(createjob); //We usually pick up signals from the previous tests as well (due to server-side notification caching) QTRY_VERIFY(addedSpy.count() >= 1); QTRY_COMPARE(addedSpy.last().first().value<Akonadi::Relation>(), rel); } { QSignalSpy removedSpy(&monitor, SIGNAL(relationRemoved(Akonadi::Relation))); QVERIFY(removedSpy.isValid()); RelationDeleteJob *deleteJob = new RelationDeleteJob(rel, this); AKVERIFYEXEC(deleteJob); QTRY_VERIFY(removedSpy.count() >= 1); QTRY_COMPARE(removedSpy.last().first().value<Akonadi::Relation>(), rel); } }
void ItemAppendTest::testIllegalAppend() { const Collection testFolder1(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(testFolder1.isValid()); Item item; item.setMimeType(QStringLiteral("application/octet-stream")); // adding item to non-existing collection ItemCreateJob *job = new ItemCreateJob(item, Collection(INT_MAX), this); QVERIFY(!job->exec()); // adding item into a collection which can't handle items of this type const Collection col(collectionIdFromPath(QStringLiteral("res1/foo/bla"))); QVERIFY(col.isValid()); job = new ItemCreateJob(item, col, this); QEXPECT_FAIL("", "Test not yet implemented in the server.", Continue); QVERIFY(!job->exec()); }
void TagTest::testTagItem() { Akonadi::Monitor monitor; monitor.itemFetchScope().setFetchTags(true); monitor.setAllMonitored(true); const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Tag tag; { TagCreateJob *createjob = new TagCreateJob(Tag(QStringLiteral("gid1")), this); AKVERIFYEXEC(createjob); tag = createjob->tag(); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } item1.setTag(tag); QSignalSpy tagsSpy(&monitor, SIGNAL(itemsTagsChanged(Akonadi::Item::List,QSet<Akonadi::Tag>,QSet<Akonadi::Tag>))); QVERIFY(tagsSpy.isValid()); ItemModifyJob *modJob = new ItemModifyJob(item1, this); AKVERIFYEXEC(modJob); QTRY_VERIFY(tagsSpy.count() >= 1); QTRY_COMPARE(tagsSpy.last().first().value<Akonadi::Item::List>().first().id(), item1.id()); QTRY_COMPARE(tagsSpy.last().at(1).value< QSet<Tag> >().size(), 1); //1 added tag ItemFetchJob *fetchJob = new ItemFetchJob(item1, this); fetchJob->fetchScope().setFetchTags(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().tags().size(), 1); TagDeleteJob *deleteJob = new TagDeleteJob(tag, this); AKVERIFYEXEC(deleteJob); }
void ItemAppendTest::testItemAppend() { const Collection testFolder1(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(testFolder1.isValid()); QFETCH(QString, remoteId); Item ref; // for cleanup Item item(-1); item.setRemoteId(remoteId); item.setMimeType(QStringLiteral("application/octet-stream")); item.setFlag("TestFlag"); item.setSize(3456); ItemCreateJob *job = new ItemCreateJob(item, testFolder1, this); AKVERIFYEXEC(job); ref = job->item(); QCOMPARE(ref.parentCollection(), testFolder1); ItemFetchJob *fjob = new ItemFetchJob(testFolder1, this); fjob->fetchScope().setAncestorRetrieval(ItemFetchScope::Parent); AKVERIFYEXEC(fjob); QCOMPARE(fjob->items().count(), 1); QCOMPARE(fjob->items()[0], ref); QCOMPARE(fjob->items()[0].remoteId(), remoteId); QVERIFY(fjob->items()[0].flags().contains("TestFlag")); QCOMPARE(fjob->items()[0].parentCollection(), ref.parentCollection()); qint64 size = 3456; QCOMPARE(fjob->items()[0].size(), size); ItemDeleteJob *djob = new ItemDeleteJob(ref, this); AKVERIFYEXEC(djob); fjob = new ItemFetchJob(testFolder1, this); AKVERIFYEXEC(fjob); QVERIFY(fjob->items().isEmpty()); }
void ItemAppendTest::testItemMerge() { QFETCH(Akonadi::Item, item1); QFETCH(Akonadi::Item, item2); QFETCH(Akonadi::Item, mergedItem); QFETCH(bool, silent); const Collection col(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(col.isValid()); ItemCreateJob *create = new ItemCreateJob(item1, col, this); AKVERIFYEXEC(create); const Item createdItem = create->item(); ItemCreateJob *merge = new ItemCreateJob(item2, col, this); ItemCreateJob::MergeOptions options = ItemCreateJob::GID | ItemCreateJob::RID; if (silent) { options |= ItemCreateJob::Silent; } merge->setMerge(options); AKVERIFYEXEC(merge); QCOMPARE(merge->item().id(), createdItem.id()); if (!silent) { QCOMPARE(merge->item().gid(), mergedItem.gid()); QCOMPARE(merge->item().remoteId(), mergedItem.remoteId()); QCOMPARE(merge->item().remoteRevision(), mergedItem.remoteRevision()); QCOMPARE(merge->item().payloadData(), mergedItem.payloadData()); QCOMPARE(merge->item().size(), mergedItem.size()); QCOMPARE(merge->item().flags(), mergedItem.flags()); } if (merge->item().id() != createdItem.id()) { ItemDeleteJob *del = new ItemDeleteJob(merge->item(), this); AKVERIFYEXEC(del); } ItemDeleteJob *del = new ItemDeleteJob(createdItem, this); AKVERIFYEXEC(del); }
Akonadi::Item VirtualResource::createItem(const Akonadi::Item &item, const Collection &parent) { ItemCreateJob *create = new ItemCreateJob(item, parent, mSession); EXEC(create); return create->item(); }