From 961b3c5775a805eae02718884cfa9dedc8188897 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 9 Oct 2017 16:10:12 +0200 Subject: Ensure we copy all blobs when copying to another resource --- common/pipeline.cpp | 8 +++++--- tests/interresourcemovetest.cpp | 32 +++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/common/pipeline.cpp b/common/pipeline.cpp index f29c7db..0cdedee 100644 --- a/common/pipeline.cpp +++ b/common/pipeline.cpp @@ -295,9 +295,11 @@ KAsync::Job Pipeline::modifiedEntity(void const *command, size_t size) //The entity is either being copied or moved if (newEntity.resourceInstanceIdentifier() != d->resourceContext.resourceInstanceIdentifier) { - SinkTraceCtx(d->logCtx) << "Moving entity to new resource " << newEntity.identifier() << newEntity.resourceInstanceIdentifier(); - newEntity.setChangedProperties(newEntity.availableProperties().toSet()); - return create(bufferType, newEntity) + auto copy = *ApplicationDomain::ApplicationDomainType::getInMemoryCopy(newEntity, newEntity.availableProperties()); + copy.setResource(newEntity.resourceInstanceIdentifier()); + copy.setChangedProperties(copy.availableProperties().toSet()); + SinkTraceCtx(d->logCtx) << "Moving entity to new resource " << copy.identifier() << copy.resourceInstanceIdentifier(); + return create(bufferType, copy) .then([=](const KAsync::Error &error) { if (!error) { SinkTraceCtx(d->logCtx) << "Move of " << current.identifier() << "was successfull"; diff --git a/tests/interresourcemovetest.cpp b/tests/interresourcemovetest.cpp index 5438bc7..174befc 100644 --- a/tests/interresourcemovetest.cpp +++ b/tests/interresourcemovetest.cpp @@ -121,24 +121,26 @@ private slots: void testCopy() { - Event event("instance1"); - event.setProperty("uid", "testuid"); - QCOMPARE(event.getProperty("uid").toByteArray(), QByteArray("testuid")); - event.setProperty("summary", "summaryValue"); - VERIFYEXEC(Sink::Store::create(event)); + QByteArray testuid = "testuid@test.test"; + QString subject = "summaryValue"; + auto mimeMessage = message(testuid, subject); + + Mail mail("instance1"); + mail.setMimeMessage(mimeMessage); + VERIFYEXEC(Sink::Store::create(mail)); - Event createdEvent; + Mail createdMail; // Ensure all local data is processed VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(QByteArrayList() << "instance1")); { auto query = Query().resourceFilter("instance1") ; - auto list = Sink::Store::read(query.filter("testuid")); + auto list = Sink::Store::read(query.filter(testuid)); QCOMPARE(list.size(), 1); - createdEvent = list.first(); + createdMail = list.first(); } - VERIFYEXEC(Sink::Store::copy(createdEvent, "instance2")); + VERIFYEXEC(Sink::Store::copy(createdMail, "instance2")); //FIXME we can't guarantee that that the create command arrives at instance2 before the flush command, so we'll just wait for a little bit. QTest::qWait(100); @@ -148,15 +150,23 @@ private slots: VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(QByteArrayList() << "instance2")); { auto query = Query().resourceFilter("instance2") ; - auto list = Sink::Store::read(query.filter("testuid")); + auto list = Sink::Store::read(query.filter(testuid)); QCOMPARE(list.size(), 1); + const auto mail = list.first(); + QVERIFY(!mail.getMimeMessagePath().isEmpty()); + QCOMPARE(mail.getSubject(), subject); + QCOMPARE(mail.getMimeMessage(), mimeMessage); } VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(QByteArrayList() << "instance1")); { auto query = Query().resourceFilter("instance1") ; - auto list = Sink::Store::read(query.filter("testuid")); + auto list = Sink::Store::read(query.filter(testuid)); QCOMPARE(list.size(), 1); + const auto mail = list.first(); + QVERIFY(!mail.getMimeMessagePath().isEmpty()); + QCOMPARE(mail.getSubject(), subject); + QCOMPARE(mail.getMimeMessage(), mimeMessage); } } -- cgit v1.2.3