mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-24 10:52:52 +00:00
116 lines
3.6 KiB
C++
116 lines
3.6 KiB
C++
![]() |
/*
|
||
|
Copyright 2013 Christian Mollekopf <mollekopf@kolabsys.com>
|
||
|
|
||
|
This library is free software; you can redistribute it and/or modify it
|
||
|
under the terms of the GNU Library General Public License as published by
|
||
|
the Free Software Foundation; either version 2 of the License, or (at your
|
||
|
option) any later version.
|
||
|
|
||
|
This library is distributed in the hope that it will be useful, but WITHOUT
|
||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
|
||
|
License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Library General Public License
|
||
|
along with this library; see the file COPYING.LIB. If not, write to the
|
||
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||
|
02110-1301, USA.
|
||
|
*/
|
||
|
#include "testgidmigration.h"
|
||
|
|
||
|
#include <akonadi/item.h>
|
||
|
#include <Akonadi/ItemFetchJob>
|
||
|
#include <akonadi/itemfetchscope.h>
|
||
|
#include <Akonadi/EntityTreeModel>
|
||
|
#include <Akonadi/Control>
|
||
|
#include <akonadi/qtest_akonadi.h>
|
||
|
#include <akonadi/collectionpathresolver_p.h>
|
||
|
|
||
|
#include "gid/gidmigrationjob.h"
|
||
|
|
||
|
|
||
|
bool TestSerializer::deserialize(Akonadi::Item &item, const QByteArray &label, QIODevice &data, int /* version */ )
|
||
|
{
|
||
|
if (label != Akonadi::Item::FullPayload) {
|
||
|
return false;
|
||
|
}
|
||
|
item.setPayload(data.readAll());
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void TestSerializer::serialize(const Akonadi::Item &item, const QByteArray &label, QIODevice &data, int &/* version */)
|
||
|
{
|
||
|
Q_ASSERT(label == Akonadi::Item::FullPayload);
|
||
|
data.write(item.payload<QByteArray>());
|
||
|
}
|
||
|
|
||
|
QString TestSerializer::extractGid(const Akonadi::Item &item) const
|
||
|
{
|
||
|
if (item.gid().isEmpty()) {
|
||
|
return item.url().url();
|
||
|
}
|
||
|
return item.gid();
|
||
|
}
|
||
|
|
||
|
|
||
|
void TestGidMigration::allItemsHaveGid(const Collection &col, bool haveGid, bool *success)
|
||
|
{
|
||
|
*success = false;
|
||
|
|
||
|
ItemFetchJob *fetchJob = new ItemFetchJob(col);
|
||
|
fetchJob->fetchScope().fetchFullPayload();
|
||
|
fetchJob->fetchScope().setFetchGid(true);
|
||
|
AKVERIFYEXEC(fetchJob);
|
||
|
QCOMPARE(fetchJob->items().count(), 15);
|
||
|
|
||
|
Q_FOREACH (const Item &item, fetchJob->items()) {
|
||
|
if (haveGid) {
|
||
|
QVERIFY2(!item.gid().isEmpty(), QString::fromLatin1("Item %1 (%2) does not have GID!").arg(item.id()).arg(item.remoteId()).toUtf8().constData());
|
||
|
} else {
|
||
|
QVERIFY2(item.gid().isEmpty(), QString::fromLatin1("Item %1 (%2) has GID!").arg(item.id()).arg(item.remoteId()).toUtf8().constData());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*success = true;
|
||
|
}
|
||
|
|
||
|
TestGidMigration::TestGidMigration(QObject *parent)
|
||
|
: QObject(parent)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void TestGidMigration::initTestCase()
|
||
|
{
|
||
|
AkonadiTest::checkTestIsIsolated();
|
||
|
}
|
||
|
|
||
|
void TestGidMigration::init()
|
||
|
{
|
||
|
AkonadiTest::setAllResourcesOffline();
|
||
|
Akonadi::AgentInstance agent = Akonadi::AgentManager::self()->instance(QLatin1String("akonadi_knut_resource_0"));
|
||
|
QVERIFY(agent.isValid());
|
||
|
agent.setIsOnline(true);
|
||
|
|
||
|
Akonadi::ItemSerializerPlugin::overridePluginLookup(new TestSerializer);
|
||
|
}
|
||
|
|
||
|
void TestGidMigration::testMigration()
|
||
|
{
|
||
|
Akonadi::CollectionPathResolver *resolver = new CollectionPathResolver(QLatin1String("res1/foo"), this);
|
||
|
AKVERIFYEXEC(resolver);
|
||
|
const Entity::Id colId = resolver->collection();
|
||
|
bool allItemsHaveGidOk = false;
|
||
|
|
||
|
allItemsHaveGid(Collection(colId), false, &allItemsHaveGidOk);
|
||
|
QVERIFY(allItemsHaveGidOk);
|
||
|
|
||
|
GidMigrationJob *migrationJob = new GidMigrationJob(QStringList() << QLatin1String("application/octet-stream"), this);
|
||
|
AKVERIFYEXEC(migrationJob);
|
||
|
|
||
|
allItemsHaveGid(Collection(colId), true, &allItemsHaveGidOk);
|
||
|
QVERIFY(allItemsHaveGidOk);
|
||
|
}
|
||
|
|
||
|
QTEST_AKONADIMAIN(TestGidMigration, NoGUI)
|