contentstorage/caclient/tsrc/t_caclient/src/t_caclient_organize.cpp
changeset 117 c63ee96dbe5f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_organize.cpp	Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,1028 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Main test class for hspluginmodel library.
+*
+*/
+
+
+#include "t_caclient.h"
+#include "caservice.h"
+#include "caquery.h"
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAppendEntryIntoGroup1()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->appendEntryToGroup(9999, entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(!service->appendEntryToGroup(group->id(), 9999));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(service->appendEntryToGroup(group->id(), entry1->id()));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->appendEntryToGroup(group->id(), entry2->id()));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry1->id());
+        QCOMPARE(entries.at(1),entry2->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAppendEntryIntoGroup2()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->appendEntryToGroup(groupEntry, *entry1));
+        QVERIFY(!service->appendEntryToGroup(*group , itemEntry));
+        QVERIFY(service->appendEntryToGroup(*group , *entry1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->appendEntryToGroup(*group, *entry2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry1->id());
+        QCOMPARE(entries.at(1),entry2->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAppendEntriesIntoGroup1()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<int> entries1;
+        entries1.append(entry1->id());
+        entries1.append(entry2->id());
+        QList<int> entries2;
+        entries2.append(entry3->id());
+        entries2.append(entry4->id());
+        QList<int> wrongEntries1;
+        wrongEntries1.append(entry1->id());
+        wrongEntries1.append(9999);
+
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->appendEntriesToGroup(9999, entries1));
+        QVERIFY(!service->appendEntriesToGroup(group->id(), wrongEntries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        QVERIFY(service->appendEntriesToGroup(group->id(), entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(service->appendEntriesToGroup(group->id(), entries2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),4);
+
+        QCOMPARE(entries.at(0),entry1->id());
+        QCOMPARE(entries.at(1),entry2->id());
+        QCOMPARE(entries.at(2),entry3->id());
+        QCOMPARE(entries.at(3),entry4->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAppendEntriesIntoGroup2()
+{
+    {
+        QSharedPointer<CaEntry> itemEntry (new CaEntry());
+        itemEntry->setText("item");
+        itemEntry->setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList< QSharedPointer<CaEntry> > entries1;
+        entries1.append(entry1);
+        entries1.append(entry2);
+        QList< QSharedPointer<CaEntry> > entries2;
+        entries2.append(entry3);
+        entries2.append(entry4);
+        QList<QSharedPointer<CaEntry> > wrongEntries1;
+        wrongEntries1.append(entry1);
+        wrongEntries1.append(itemEntry);  //this item has unspecified id
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->appendEntriesToGroup(groupEntry, entries1));
+        QVERIFY(!service->appendEntriesToGroup(*group, wrongEntries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+        QVERIFY(service->appendEntriesToGroup(*group, entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(service->appendEntriesToGroup(*group, entries2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),4);
+
+        QCOMPARE(entries.at(0),entry1->id());
+        QCOMPARE(entries.at(1),entry2->id());
+        QCOMPARE(entries.at(2),entry3->id());
+        QCOMPARE(entries.at(3),entry4->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestPrependEntryIntoGroup1()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->prependEntryToGroup(9999, entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+        QVERIFY(!service->prependEntryToGroup(group->id(), 9999));
+        QVERIFY(service->lastError() != NoErrorCode);
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->prependEntryToGroup(group->id(), entry2->id()));
+        entries = service->getEntryIds(query);
+
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry2->id());
+        QCOMPARE(entries.at(1),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestPrependEntryIntoGroup2()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->prependEntryToGroup(groupEntry, *entry1));
+        QVERIFY(!service->prependEntryToGroup(*group , itemEntry));
+        QVERIFY(service->prependEntryToGroup(*group , *entry1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->prependEntryToGroup(*group, *entry2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry2->id());
+        QCOMPARE(entries.at(1),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestPrependEntriesIntoGroup1()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<int> entries1;
+        entries1.append(entry1->id());
+        entries1.append(entry2->id());
+        QList<int> entries2;
+        entries2.append(entry3->id());
+        entries2.append(entry4->id());
+        QList<int> wrongEntries1;
+        wrongEntries1.append(entry1->id());
+        wrongEntries1.append(9999);
+
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->prependEntriesToGroup(9999, entries1));
+        QVERIFY(!service->prependEntriesToGroup(group->id(), wrongEntries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        QVERIFY(service->prependEntriesToGroup(group->id(), entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(service->prependEntriesToGroup(group->id(), entries2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),4);
+
+        QCOMPARE(entries.at(0),entry3->id());
+        QCOMPARE(entries.at(1),entry4->id());
+        QCOMPARE(entries.at(2),entry1->id());
+        QCOMPARE(entries.at(3),entry2->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestPrependEntriesIntoGroup2()
+{
+    {
+        QSharedPointer<CaEntry> itemEntry (new CaEntry());
+        itemEntry->setText("item");
+        itemEntry->setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList< QSharedPointer<CaEntry> > entries1;
+        entries1.append(entry1);
+        entries1.append(entry2);
+        QList< QSharedPointer<CaEntry> > entries2;
+        entries2.append(entry3);
+        entries2.append(entry4);
+        QList< QSharedPointer<CaEntry> > wrongEntries1;
+        wrongEntries1.append(entry1);
+        wrongEntries1.append(itemEntry);  //this item has unspecified id
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->prependEntriesToGroup(groupEntry, entries1));
+        QVERIFY(!service->prependEntriesToGroup(*group, wrongEntries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+        QVERIFY(service->prependEntriesToGroup(*group, entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(service->prependEntriesToGroup(*group, entries2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),4);
+
+        QCOMPARE(entries.at(0),entry3->id());
+        QCOMPARE(entries.at(1),entry4->id());
+        QCOMPARE(entries.at(2),entry1->id());
+        QCOMPARE(entries.at(3),entry2->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestInsertEntryIntoGroup1()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+
+        QVERIFY(!service->insertEntryIntoGroup(9999, entry2->id(), entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(!service->insertEntryIntoGroup(group->id(), 9999, entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(!service->insertEntryIntoGroup(group->id(), entry2->id(), 9999));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(service->insertEntryIntoGroup(group->id(), entry2->id(), entry1->id()));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry2->id());
+        QCOMPARE(entries.at(1),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestInsertEntryIntoGroup2()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntryToGroup(*group, *entry1));
+
+        QVERIFY(!service->insertEntryIntoGroup(groupEntry, *entry2, entry1->id()));
+        QVERIFY(!service->insertEntryIntoGroup(*group, itemEntry, entry1->id()));
+        QVERIFY(!service->insertEntryIntoGroup(*group, *entry2, 9999));
+
+        QVERIFY(service->insertEntryIntoGroup(*group, *entry2, entry1->id()));
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry2->id());
+        QCOMPARE(entries.at(1),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestInsertEntriesIntoGroup1()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<int> entries2;
+        entries2.append(entry3->id());
+        entries2.append(entry4->id());
+        QList<int> wrongEntries1;
+        wrongEntries1.append(entry1->id());
+        wrongEntries1.append(9999);
+
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+
+        QVERIFY(!service->insertEntriesIntoGroup(9999, entries2, entry1->id()));
+        QVERIFY(!service->insertEntriesIntoGroup(group->id(), wrongEntries1, entry1->id()));
+        QVERIFY(!service->insertEntriesIntoGroup(group->id(), entries2, 9999));
+
+        QVERIFY(service->insertEntriesIntoGroup(group->id(), entries2, entry1->id()));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),3);
+
+        QCOMPARE(entries.at(0),entry3->id());
+        QCOMPARE(entries.at(1),entry4->id());
+        QCOMPARE(entries.at(2),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestInsertEntriesIntoGroup2()
+{
+    {
+        QSharedPointer<CaEntry> itemEntry (new CaEntry());
+        itemEntry->setText("item");
+        itemEntry->setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList< QSharedPointer<CaEntry> > entries2;
+        entries2.append(entry3);
+        entries2.append(entry4);
+        QList< QSharedPointer<CaEntry> > wrongEntries1;
+        wrongEntries1.append(entry1);
+        wrongEntries1.append(itemEntry);  //this item has unspecified id
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+
+        QVERIFY(!service->insertEntriesIntoGroup(groupEntry, entries2, entry1->id()));
+        QVERIFY(!service->insertEntriesIntoGroup(*group, wrongEntries1, entry1->id()));
+        QVERIFY(!service->insertEntriesIntoGroup(*group, entries2, 9999));
+
+        QVERIFY(service->insertEntriesIntoGroup(*group, entries2, entry1->id()));
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),3);
+
+        QCOMPARE(entries.at(0),entry3->id());
+        QCOMPARE(entries.at(1),entry4->id());
+        QCOMPARE(entries.at(2),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntryFromGroup1()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->removeEntryFromGroup(9999, entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(!service->removeEntryFromGroup(group->id(), 9999));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->removeEntryFromGroup(group->id(), entry1->id()));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntryFromGroup2()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->removeEntryFromGroup(groupEntry, *entry1));
+        QVERIFY(!service->removeEntryFromGroup(*group, itemEntry));
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->removeEntryFromGroup(*group, *entry1));
+
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntriesFromGroup1()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<int> entries1;
+        entries1.append(entry1->id());
+        entries1.append(entry2->id());
+        QList<int> wrongEntries1;
+        wrongEntries1.append(entry1->id());
+        wrongEntries1.append(9999);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntriesToGroup(group->id(), entries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(!service->removeEntriesFromGroup(9999, entries1));
+        QVERIFY(!service->removeEntriesFromGroup(group->id(), wrongEntries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+
+        QVERIFY(service->removeEntriesFromGroup(group->id(), entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntriesFromGroup2()
+{
+    {
+        QSharedPointer<CaEntry> itemEntry (new CaEntry);
+        itemEntry->setText("item");
+        itemEntry->setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<QSharedPointer<CaEntry> > entries1;
+        entries1.append(entry1);
+        entries1.append(entry2);
+        QList<QSharedPointer<CaEntry> > wrongEntries1;
+        wrongEntries1.append(entry1);
+        wrongEntries1.append(itemEntry);  //this item has unspecified id
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntriesToGroup(*group, entries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+
+        QVERIFY(!service->removeEntriesFromGroup(groupEntry, entries1));
+        QVERIFY(!service->removeEntriesFromGroup(*group, wrongEntries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+
+        QVERIFY(service->removeEntriesFromGroup(*group, entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestCustomSortArrange()
+{
+    QSharedPointer<CaService> service = CaService::instance();
+    CaEntry itemEntry_1;
+    itemEntry_1.setText("item_1");
+    itemEntry_1.setEntryTypeName("collection");
+    CaEntry groupEntry_1(GroupEntryRole);
+    groupEntry_1.setText("group_1");
+    groupEntry_1.setEntryTypeName("collection");
+
+    QSharedPointer<CaEntry> entry_1 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> entry_2 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> entry_3 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> entry_4 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> group_1 = service->createEntry(groupEntry_1);
+
+    QList<int> entriesIds;
+    entriesIds << entry_1->id() << entry_2->id()
+               << entry_3->id() << entry_4->id();
+    service->appendEntriesToGroup(group_1->id(), entriesIds);
+
+    CaQuery query;
+    query.setParentId(group_1->id());
+    query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+    QList<int> entriesIdsBefore = service->getEntryIds(query);
+    QVERIFY(entriesIds == entriesIdsBefore);
+
+    entriesIds.clear();
+    for (int i(entriesIdsBefore.count()-1); i >= 0; i--) {
+        entriesIds.append(entriesIdsBefore.at(i));
+    }
+
+    QVERIFY(service->customSort(group_1->id(), entriesIds));
+    QTest::qWait(500);
+    QList<int> entriesIdsAfter = service->getEntryIds(query);
+
+    QVERIFY(entriesIds != entriesIdsBefore);
+    QVERIFY(entriesIds == entriesIdsAfter);
+    
+    // cleanup
+    service->removeEntries(entriesIdsAfter << group_1->id());
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestCustomSortGroups()
+{
+    QSharedPointer<CaService> service = CaService::instance();
+    CaEntry itemEntry_1;
+    itemEntry_1.setText("item_1");
+    itemEntry_1.setEntryTypeName("collection");
+    CaEntry groupEntry_1(GroupEntryRole);
+    groupEntry_1.setText("group_1");
+    groupEntry_1.setEntryTypeName("collection");
+
+    QSharedPointer<CaEntry> entry_1 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> entry_2 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> entry_3 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> entry_4 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> group_1 = service->createEntry(groupEntry_1);
+
+    CaEntry itemEntry_2;
+    itemEntry_2.setText("item_2");
+    itemEntry_2.setEntryTypeName("collection");
+    CaEntry groupEntry_2(GroupEntryRole);
+    groupEntry_2.setText("group_2");
+    groupEntry_2.setEntryTypeName("collection");
+
+    QSharedPointer<CaEntry> entry_5 = service->createEntry(itemEntry_2);
+    QSharedPointer<CaEntry> entry_6 = service->createEntry(itemEntry_2);
+    QSharedPointer<CaEntry> entry_7 = service->createEntry(itemEntry_2);
+    QSharedPointer<CaEntry> entry_8 = service->createEntry(itemEntry_2);
+    QSharedPointer<CaEntry> group_2 = service->createEntry(groupEntry_2);
+
+    QList<int> entriesIds;
+    entriesIds << entry_1->id() << entry_2->id()
+               << entry_3->id() << entry_4->id();
+    service->appendEntriesToGroup(group_1->id(), entriesIds);
+
+    entriesIds.clear();
+    entriesIds << entry_5->id() << entry_6->id()
+               << entry_7->id() << entry_8->id();
+    service->appendEntriesToGroup(group_2->id(), entriesIds);
+
+    CaQuery query;
+    query.setParentId(group_1->id());
+    query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+    QList<int> entriesIdsBefore_1 = service->getEntryIds(query);
+
+    query.setParentId(group_2->id());
+    QList<int> entriesIdsBefore_2 = service->getEntryIds(query);
+    QVERIFY(entriesIdsBefore_1 != entriesIdsBefore_2);
+
+    entriesIds.clear();
+    for (int i(entriesIdsBefore_1.count()-1); i >= 0; i--) {
+        entriesIds.append(entriesIdsBefore_1.at(i));
+    }
+
+    QVERIFY(service->customSort(group_1->id(), entriesIds));
+    QTest::qWait(500);
+    query.setParentId(group_1->id());
+    QList<int> entriesIdsAfter_1 = service->getEntryIds(query);
+    query.setParentId(group_2->id());
+    QList<int> entriesIdsAfter_2 = service->getEntryIds(query);
+
+    QVERIFY(entriesIds != entriesIdsBefore_1);
+    QVERIFY(entriesIds == entriesIdsAfter_1);
+    QVERIFY(entriesIds != entriesIdsBefore_2);
+    QVERIFY(entriesIdsBefore_2 == entriesIdsAfter_2);
+
+    entriesIds.clear();
+    for (int i(entriesIdsBefore_2.count()-1); i >= 0; i--) {
+        entriesIds.append(entriesIdsBefore_2.at(i));
+    }
+
+    QVERIFY(service->customSort(group_2->id(), entriesIds));
+    QTest::qWait(500);
+    query.setParentId(group_1->id());
+    entriesIdsBefore_1 = service->getEntryIds(query);
+    query.setParentId(group_2->id());
+    entriesIdsAfter_2 = service->getEntryIds(query);
+
+    QVERIFY(entriesIds != entriesIdsBefore_2);
+    QVERIFY(entriesIds == entriesIdsAfter_2);
+    QVERIFY(entriesIds != entriesIdsBefore_1);
+    QVERIFY(entriesIdsBefore_1 == entriesIdsAfter_1);
+    QVERIFY(entriesIdsBefore_2 != entriesIdsAfter_2);
+    
+    // cleanup
+    service->removeEntries(entriesIdsAfter_1 << group_1->id());
+    service->removeEntries(entriesIdsAfter_2 << group_2->id());
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestCustomSortFake()
+{
+    QSharedPointer<CaService> service = CaService::instance();
+    CaEntry itemEntry_1;
+    itemEntry_1.setText("item_1");
+    itemEntry_1.setEntryTypeName("collection");
+    CaEntry groupEntry_1(GroupEntryRole);
+    groupEntry_1.setText("group_1");
+    groupEntry_1.setEntryTypeName("collection");
+
+    QSharedPointer<CaEntry> entry_1 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> entry_2 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> entry_3 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> entry_4 = service->createEntry(itemEntry_1);
+    QSharedPointer<CaEntry> group_1 = service->createEntry(groupEntry_1);
+
+    QList<int> entriesIds;
+    entriesIds << entry_1->id() << entry_2->id()
+               << entry_3->id() << entry_4->id();
+    service->appendEntriesToGroup(group_1->id(), entriesIds);
+
+    CaQuery query;
+    query.setParentId(group_1->id());
+    query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+    QList<int> entriesIdsBefore = service->getEntryIds(query);
+    QVERIFY(entriesIds == entriesIdsBefore);
+
+    entriesIds.clear();
+    // fake list, not fulfilled correctly
+    for (int i(entriesIdsBefore.count()-1); i >= 0; i--) {
+        if (i%2) {
+            entriesIds.append(entriesIdsBefore.at(i));
+        }
+    }
+
+    QVERIFY(service->customSort(group_1->id(), entriesIds));
+    QTest::qWait(500);
+    QList<int> entriesIdsAfter = service->getEntryIds(query);
+
+    QVERIFY(entriesIdsBefore != entriesIdsAfter);
+    QVERIFY(entriesIds != entriesIdsAfter);
+
+    // cleanup
+    service->removeEntries(entriesIdsAfter << group_1->id());
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestCustomSort()
+{
+    CaQuery collectionQuery;
+    collectionQuery.addEntryTypeName("collection");
+    QSharedPointer<CaService> service = CaService::instance();
+    QList<int> collectionIds = service->getEntryIds(collectionQuery);
+    QVERIFY(collectionIds.count());
+    
+    const int groupId = collectionIds.at(0);
+
+    CaQuery query;
+    query.setParentId(groupId);
+    query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+    QList<int> idsBefore = service->getEntryIds(query);
+    QVERIFY(idsBefore.count());
+
+    int first = idsBefore.takeFirst();
+    idsBefore.append(first);
+
+    // sort entries is group in custom order
+    QVERIFY(service->customSort(groupId, idsBefore));
+
+    // check results
+    QList<int> idsAfter = service->getEntryIds(query);
+    QVERIFY(idsAfter.count());
+
+    QCOMPARE(idsAfter.count(),idsBefore.count());
+    QCOMPARE(idsAfter, idsBefore);
+}