diff --git a/akonadi/tests/collectioncopytest.cpp b/akonadi/tests/collectioncopytest.cpp index 495eec685..51607ca3b 100644 --- a/akonadi/tests/collectioncopytest.cpp +++ b/akonadi/tests/collectioncopytest.cpp @@ -1,81 +1,131 @@ /* Copyright (c) 2008 Volker Krause 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 +#include #include #include #include +#include +#include +#include #include #include "test_utils.h" using namespace Akonadi; class CollectionCopyTest : public QObject { Q_OBJECT private slots: void initTestCase() { Control::start(); + // switch target resources offline to reduce interference from them + foreach ( Akonadi::AgentInstance agent, Akonadi::AgentManager::self()->instances() ) { + if ( agent.identifier() == "akonadi_knut_resource_2" ) + agent.setIsOnline( false ); + } } void testCopy() { const Collection target( collectionIdFromPath( "res3" ) ); - const Collection source( collectionIdFromPath( "res1/foo" ) ); + Collection source( collectionIdFromPath( "res1/foo" ) ); QVERIFY( target.isValid() ); QVERIFY( source.isValid() ); + // obtain reference listing + CollectionFetchJob *fetch = new CollectionFetchJob( source, CollectionFetchJob::Base ); + QVERIFY( fetch->exec() ); + QCOMPARE( fetch->collections().count(), 1 ); + source = fetch->collections().first(); + QVERIFY( source.isValid() ); + + fetch = new CollectionFetchJob( source, CollectionFetchJob::Recursive ); + QVERIFY( fetch->exec() ); + QHash referenceData; + Collection::List cols = fetch->collections(); + cols << source; + foreach ( const Collection c, cols ) { + ItemFetchJob *job = new ItemFetchJob( c, this ); + QVERIFY( job->exec() ); + referenceData.insert( c, job->items() ); + } + + // actually copy the collection CollectionCopyJob *copy = new CollectionCopyJob( source, target ); QVERIFY( copy->exec() ); + // list destination and check if everything has arrived CollectionFetchJob *list = new CollectionFetchJob( target, CollectionFetchJob::Recursive ); QVERIFY( list->exec() ); - QCOMPARE( list->collections().count(), 4 ); - - Collection copied = list->collections().first(); - QVERIFY( copied.remoteId().isEmpty() ); - QCOMPARE( copied.resource(), QString("akonadi_knut_resource_2") ); + cols = list->collections(); + QCOMPARE( cols.count(), referenceData.count() ); + for ( QHash::ConstIterator it = referenceData.constBegin(); it != referenceData.constEnd(); ++it ) { + QVERIFY( !cols.contains( it.key() ) ); + Collection col; + foreach ( const Collection &c, cols ) { + if ( it.key().name() == c.name() ) + col = c; + } + + QVERIFY( col.isValid() ); + QCOMPARE( col.resource(), QLatin1String("akonadi_knut_resource_2") ); + QVERIFY( col.remoteId().isEmpty() ); + ItemFetchJob *job = new ItemFetchJob( col, this ); + job->fetchScope().fetchFullPayload(); + job->fetchScope().setCacheOnly( true ); + QVERIFY( job->exec() ); + QCOMPARE( job->items().count(), it.value().count() ); + foreach ( const Item &item, job->items() ) { + QVERIFY( !it.value().contains( item ) ); + QVERIFY( item.remoteId().isEmpty() ); + QEXPECT_FAIL( "", "server bug", Continue ); + QVERIFY( item.hasPayload() ); + } + } } void testIlleagalCopy() { // invalid source CollectionCopyJob* copy = new CollectionCopyJob( Collection(), Collection( 1 ) ); QVERIFY( !copy->exec() ); // non-existing source copy = new CollectionCopyJob( Collection( INT_MAX ), Collection( 1 ) ); QVERIFY( !copy->exec() ); // invalid target copy = new CollectionCopyJob( Collection( 1 ), Collection() ); QVERIFY( !copy->exec() ); // non-existing target copy = new CollectionCopyJob( Collection( 1 ), Collection( INT_MAX ) ); QVERIFY( !copy->exec() ); } }; QTEST_AKONADIMAIN( CollectionCopyTest, NoGUI ) #include "collectioncopytest.moc"