contentstorage/caclient/tsrc/t_caclient/src/t_caclient_getentries.cpp
changeset 117 c63ee96dbe5f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_getentries.cpp	Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,3129 @@
+/*
+* 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::TestGetEntry()
+{
+    {
+        CaEntry item;
+        item.setText("testName");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+
+        CaIconDescription iconDescription;
+        iconDescription.setFilename("iconFileName");
+        iconDescription.setSkinId("iconSkinId");
+        iconDescription.setApplicationId("268458321");
+        item.setIconDescription(iconDescription);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem = service->createEntry(item);
+
+        QVERIFY(!resultItem.isNull());
+        // entry from storage
+        QSharedPointer<CaEntry> storageItem1 = service->getEntry(resultItem->id());
+        QCOMPARE(service->lastError(), NoErrorCode);
+        QVERIFY(storageItem1);
+        QCOMPARE(storageItem1->role(), ItemEntryRole);
+        QCOMPARE(QString("testName"),storageItem1->text());
+        QCOMPARE(QString("test"),storageItem1->entryTypeName());
+        QCOMPARE(QString("attrVal1"),storageItem1->attribute("attrName1"));
+        QCOMPARE(item.flags(),storageItem1->flags());
+        QCOMPARE(iconDescription.filename(),storageItem1->iconDescription().filename());
+        QCOMPARE(iconDescription.skinId(),storageItem1->iconDescription().skinId());
+        QCOMPARE(iconDescription.applicationId(),storageItem1->iconDescription().applicationId());
+        QSharedPointer<CaEntry> storageItem2 = service->getEntry(9999);
+        QVERIFY(service->lastError() !=  NoErrorCode);
+        QVERIFY(!storageItem2);
+
+        //Cleanup
+        service->removeEntry(*resultItem);
+
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByIds()
+{
+    {
+        CaEntry item;
+        item.setText("testName1");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item);
+        item.setText("testName2");
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item);
+        item.setText("testName3");
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item);
+        QVERIFY(!resultItem1.isNull());
+        QVERIFY(!resultItem2.isNull());
+        QVERIFY(!resultItem3.isNull());
+
+        QList<int> ids;
+        ids.append(resultItem1->id());
+        ids.append(resultItem3->id());
+        ids.append(resultItem2->id());
+
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(ids) ;
+        QCOMPARE(entries.count(), 3);
+        QCOMPARE(service->lastError(), NoErrorCode);
+
+        QVERIFY(entries.at(0));
+        QCOMPARE(entries.at(0)->role(), ItemEntryRole);
+        QCOMPARE(QString("testName1"),entries.at(0)->text());
+        QCOMPARE(QString("test"),entries.at(0)->entryTypeName());
+        QCOMPARE(QString("attrVal1"),entries.at(0)->attribute("attrName1"));
+        QCOMPARE(item.flags(),entries.at(0)->flags());
+        QVERIFY(entries.at(1));
+        QCOMPARE(entries.at(1)->role(), ItemEntryRole);
+        QCOMPARE(QString("testName3"),entries.at(1)->text());
+        QCOMPARE(QString("test"),entries.at(1)->entryTypeName());
+        QCOMPARE(QString("attrVal1"),entries.at(1)->attribute("attrName1"));
+        QCOMPARE(item.flags(),entries.at(1)->flags());
+        QVERIFY(entries.at(2));
+        QCOMPARE(entries.at(2)->role(), ItemEntryRole);
+        QCOMPARE(QString("testName2"),entries.at(2)->text());
+        QCOMPARE(QString("test"),entries.at(2)->entryTypeName());
+        QCOMPARE(QString("attrVal1"),entries.at(2)->attribute("attrName1"));
+        QCOMPARE(item.flags(),entries.at(2)->flags());
+
+        QCOMPARE(entries.at(0)->id(),resultItem1->id());
+        QCOMPARE(entries.at(1)->id(),resultItem3->id());
+        QCOMPARE(entries.at(2)->id(),resultItem2->id());
+
+        QList<int> ids2;
+        ids2.append(resultItem1->id());
+        ids2.append(9999);
+
+        QList< QSharedPointer<CaEntry> > entries2 = service->getEntries(ids2) ;
+        QCOMPARE(entries2.count(), 1);
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        //Cleanup
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByRole()
+{
+    {
+        //CHECK INITIAL STATE IN DB
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query;
+        query.setEntryRoles(ItemEntryRole);
+        QList< QSharedPointer<CaEntry> > items = service->getEntries(query);
+        int itemsCountBefore = items.count();
+        query.setEntryRoles(GroupEntryRole);
+        QList<QSharedPointer<CaEntry> > groups = service->getEntries(query);
+        int groupsCountBefore = groups.count();
+        query.setEntryRoles(ItemEntryRole | GroupEntryRole);
+        QList<QSharedPointer<CaEntry> > itemsOrGroups = service->getEntries(query);
+        int itemsOrGroupsCountBefore = itemsOrGroups.count();
+
+
+        //ADD TO STORAGE
+        CaEntry item;
+        item.setText("testName_item");
+        item.setAttribute("attrName1_item", "attrVal1_item");
+        item.setEntryTypeName("test_item");
+        item.setFlags(RemovableEntryFlag);
+        CaEntry group(GroupEntryRole);
+        group.setText("testName_group");
+        group.setAttribute("attrName1_group", "attrVal1_group");
+        group.setEntryTypeName("test_group");
+        group.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(group);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+
+        //GET RESULTS AFTER ADD
+        query.setEntryRoles(ItemEntryRole);
+        items = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+
+        int itemsCountAfter = items.count();
+        query.setEntryRoles(GroupEntryRole);
+        groups = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+
+        int groupsCountAfter = groups.count();
+        query.setEntryRoles(ItemEntryRole | GroupEntryRole);
+        itemsOrGroups = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int itemsOrGroupsCountAfter = itemsOrGroups.count();
+
+        //CHECK RESULTS
+        QCOMPARE(itemsCountAfter, itemsCountBefore+1);
+        QCOMPARE(groupsCountAfter, groupsCountBefore+1);
+        QCOMPARE(itemsOrGroupsCountAfter, itemsOrGroupsCountBefore+2);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByParent()
+{
+    {
+        //ADD TEST DATA TO THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaEntry group(GroupEntryRole);
+        group.setText("testName_group");
+        group.setAttribute("attrName1_group", "attrVal1_group");
+        group.setEntryTypeName("test_group");
+        group.setFlags(RemovableEntryFlag);
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(group);
+
+        QVERIFY(!parentEntry.isNull());
+        CaEntry item;
+        item.setText("testName_item");
+        item.setAttribute("attrName1_item", "attrVal1_item");
+        item.setEntryTypeName("test_item");
+        item.setFlags(RemovableEntryFlag);
+        QSharedPointer<CaEntry> childEntry = service->createEntry(item);
+
+        QVERIFY(!childEntry.isNull());
+
+        //PREPARE QUERY
+        CaQuery query;
+        query.setParentId(parentEntry->id());
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query);
+
+        int countBefore = entries.count();
+
+        //APPEND ENTRY TO THE GROUP
+        service->appendEntryToGroup(parentEntry->id(),childEntry->id());
+        entries = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+
+        int countAfter = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(countBefore, 0);
+        QCOMPARE(countAfter, 1);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*childEntry);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByType1()
+{
+    {
+        //CHECK INITIAL STATE IN DB
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query;
+        QStringList strList;
+        strList << QString("WRONGTYPENAME");
+        query.setEntryTypeNames(strList);
+        QList< QSharedPointer<CaEntry> > entriesWrongType = service->getEntries(query);
+        int countWrongBefore = entriesWrongType.count();
+        strList.clear();
+        strList << QString("WRONGTYPENAME");
+        strList << QString("test_item1");
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        QList< QSharedPointer<CaEntry> > entriesWrong12 = service->getEntries(query);
+        int countWrong12Before = entriesWrong12.count();
+        strList.clear();
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        QList< QSharedPointer<CaEntry> > entries1 = service->getEntries(query);
+        int count1Before = entries1.count();
+        strList.clear();
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        QList< QSharedPointer<CaEntry> > entries2 = service->getEntries(query);
+        int count2Before = entries2.count();
+        strList.clear();
+        strList << QString("test_item1");
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        QList< QSharedPointer<CaEntry> > entries12 = service->getEntries(query);
+        int count12Before = entries12.count();
+
+        //ADD TEST DATA TO THE STORAGE
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        CaEntry item2;
+        item2.setText("testName_item2");
+        item2.setAttribute("attrName2_item", "attrVal2_item");
+        item2.setEntryTypeName("test_item2");
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        strList.clear();
+        strList << QString("WRONGTYPENAME");
+        query.setEntryTypeNames(strList);
+        query.setEntryTypeNames(strList);
+        entriesWrongType = service->getEntries(query);
+        int countWrongAfter = entriesWrongType.count();
+        strList.clear();
+        strList << QString("WRONGTYPENAME");
+        strList << QString("test_item1");
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        entriesWrong12 = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int countWrong12After = entriesWrong12.count();
+        strList.clear();
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        entries1 = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int count1After = entries1.count();
+        strList.clear();
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        entries2 = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int count2After = entries2.count();
+        strList.clear();
+        strList << QString("test_item1");
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        entries12 = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int count12After = entries12.count();
+
+        //CHECK RESULTS
+        QCOMPARE(countWrongBefore,countWrongAfter);
+        QCOMPARE(countWrong12Before+2,countWrong12After);
+        QCOMPARE(count1Before+1,count1After);
+        QCOMPARE(count2Before+1,count2After);
+        QCOMPARE(count12Before+2,count12After);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByType2()
+{
+    {
+        //CHECK INITIAL STATE IN DB
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query;
+        QStringList strList;
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        query.addEntryTypeName(QString("test_item2"));
+        QList< QSharedPointer<CaEntry> > entries12 = service->getEntries(query);
+        int count12Before = entries12.count();
+
+        //ADD TEST DATA TO THE STORAGE
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        CaEntry item2;
+        item2.setText("testName_item2");
+        item2.setAttribute("attrName2_item", "attrVal2_item");
+        item2.setEntryTypeName("test_item2");
+
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        strList.clear();
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        query.addEntryTypeName(QString("test_item2"));
+        entries12 = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int count12After = entries12.count();
+
+        //CHECK RESULTS
+        QCOMPARE(count12Before+2,count12After);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByFlagsOn()
+{
+    {
+        //CHECK INITIAL STATE IN DB
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setFlagsOn(UninstallEntryFlag);
+        CaQuery query2;
+        query2.setFlagsOn(RemovableEntryFlag);
+        CaQuery query3;
+        query3.setFlagsOn(UninstallEntryFlag|RemovableEntryFlag);
+        QList< QSharedPointer<CaEntry> > entriesSystem = service->getEntries(query1);
+        int systemCountBefore = entriesSystem.count();
+        QList< QSharedPointer<CaEntry> > entriesRemovable = service->getEntries(query2);
+        int removableCountBefore = entriesRemovable.count();
+        QList< QSharedPointer<CaEntry> > entriesSysRem = service->getEntries(query3);
+        int sysremoveCountBefore = entriesSysRem.count();
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        item1.setFlags(UninstallEntryFlag);
+        CaEntry item2;
+        item2.setText("testName_item2");
+        item2.setAttribute("attrName2_item", "attrVal2_item");
+        item2.setEntryTypeName("test_item2");
+        item2.setFlags(UninstallEntryFlag | RemovableEntryFlag);
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+        //CHECK STATE IN THE STORAGE AFTER ADD
+        entriesSystem = service->getEntries(query1);
+        int systemCountAfter = entriesSystem.count();
+        QCOMPARE(service->lastError(), NoErrorCode);
+        entriesRemovable = service->getEntries(query2);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int removableCountAfter = entriesRemovable.count();
+        entriesSysRem = service->getEntries(query3);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int sysremoveCountAfter = entriesSysRem.count();
+        //CHECK RESULTS
+        QCOMPARE(systemCountBefore+2,systemCountAfter);
+        QCOMPARE(removableCountBefore+1,removableCountAfter);
+        QCOMPARE(sysremoveCountBefore+1,sysremoveCountAfter);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByFlagsOff()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setFlagsOff(UninstallEntryFlag);
+        CaQuery query2;
+        query2.setFlagsOff(RemovableEntryFlag);
+        CaQuery query3;
+        query3.setFlagsOff(UninstallEntryFlag|RemovableEntryFlag);
+        QList< QSharedPointer<CaEntry> > entriesSystem = service->getEntries(query1);
+        int systemCountBefore = entriesSystem.count();
+        QList< QSharedPointer<CaEntry> > entriesRemovable = service->getEntries(query2);
+        int removableCountBefore = entriesRemovable.count();
+        QList< QSharedPointer<CaEntry> > entriesSysRem = service->getEntries(query3);
+        int sysremoveCountBefore = entriesSysRem.count();
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        item1.setFlags(UninstallEntryFlag);
+        CaEntry item2;
+        item2.setText("testName_item2");
+        item2.setAttribute("attrName2_item", "attrVal2_item");
+        item2.setEntryTypeName("test_item2");
+        item2.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entriesSystem = service->getEntries(query1);
+        int systemCountAfter = entriesSystem.count();
+        entriesRemovable = service->getEntries(query2);
+        int removableCountAfter = entriesRemovable.count();
+        entriesSysRem = service->getEntries(query3);
+        int sysremoveCountAfter = entriesSysRem.count();
+        //CHECK RESULTS
+        QCOMPARE(systemCountBefore+1,systemCountAfter);
+        QCOMPARE(removableCountBefore+1,removableCountAfter);
+        QCOMPARE(sysremoveCountBefore,sysremoveCountAfter);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByFlagsOnOff()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setFlagsOn(UninstallEntryFlag);
+        query1.setFlagsOff(RemovableEntryFlag);
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QVERIFY(!resultEntry1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB
+        CaEntry item2;
+        item2.setText("testName_item1");
+        item2.setAttribute("attrName1_item", "attrVal1_item");
+        item2.setEntryTypeName("test_item1");
+        item2.setFlags(RemovableEntryFlag);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB
+        CaEntry item3;
+        item3.setText("testName_item1");
+        item3.setAttribute("attrName1_item", "attrVal1_item");
+        item3.setEntryTypeName("test_item1");
+        item3.setFlags(UninstallEntryFlag|RemovableEntryFlag);
+        QSharedPointer<CaEntry> resultEntry3 = service->createEntry(item3);
+        QVERIFY(!resultEntry3.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3,entriesCount4);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+        service->removeEntry(*resultEntry3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByRoleParent()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT ENTRY TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setParentId(parentEntry->id());
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (item, parent2)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry2->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (group, parent2)
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        service->appendEntryToGroup(parentEntry2->id(),resultGroup1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB (item, parent1)
+        service->appendEntryToGroup(parentEntry->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB (group, parent1)
+        service->appendEntryToGroup(parentEntry->id(),resultGroup1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3+1, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByRoleType()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.addEntryTypeName(QString("TestTypeName"));
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+        //ADD TO DB (item, typeOk)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("TestTypeName"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (item, typeWrong)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("TestTypeWRONG"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB (group, typeOk)
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("TestTypeName"));
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB (group, typeWrong)
+        CaEntry group2(GroupEntryRole);
+        group2.setText(QString("text"));
+        group2.setEntryTypeName(QString("TestTypeWRONG"));
+        QSharedPointer<CaEntry> resultGroup2 = service->createEntry(group2);
+        QVERIFY(!resultGroup2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultGroup2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByRoleFlags()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+        //ADD TO DB (item, systemOn)
+        CaEntry item1;
+        item1.setFlags(UninstallEntryFlag);
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Name"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (item, systemOff)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("Name"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB(group, systemOn)
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("type"));
+        group1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB(group, systemoff)
+        CaEntry group2(GroupEntryRole);
+        group2.setText(QString("text"));
+        group2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> resultGroup2 = service->createEntry(group2);
+        QVERIFY(!resultGroup2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultGroup2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByParentType()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setParentId(parentEntry->id());
+        query1.addEntryTypeName(QString("typeOK"));
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+        //ADD TO DB (parent1, typeok)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("typeOK"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (parent1, typeWrong)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("typeWrong"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(),resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB (parent2, typeOk)
+        service->appendEntryToGroup(parentEntry2->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB (parent2,typeWrong)
+        service->appendEntryToGroup(parentEntry2->id(),resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByParentFlags()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setParentId(parentEntry->id());
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (parent1, system)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Type"));
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (parent1, not system)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(),resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB( parent2, system )
+        service->appendEntryToGroup(parentEntry2->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB (parent2, not system)
+        service->appendEntryToGroup(parentEntry2->id(),resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByTypeFlags()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.addEntryTypeName(QString("TypeOK"));
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (typeOk, system)
+        CaEntry item1;
+        item1.setFlags(UninstallEntryFlag);
+        item1.setEntryTypeName(QString("TypeOK"));
+        item1.setText(QString("Name"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB(typeOk, not system)
+        CaEntry item2;
+        item2.setEntryTypeName(QString("TypeOK"));
+        item2.setText(QString("Name"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB(typeWrong, system)
+        CaEntry item3;
+        item3.setFlags(UninstallEntryFlag);
+        item3.setText(QString("Name"));
+        item3.setEntryTypeName(QString("TypeWrong"));
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item3);
+        QVERIFY(!resultItem3.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB(typeWrong, not system)
+        CaEntry item4;
+        item4.setEntryTypeName(QString("TypeWrong"));
+        item4.setText(QString("Name"));
+
+        QSharedPointer<CaEntry> resultItem4 = service->createEntry(item4);
+        QVERIFY(!resultItem4.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+        service->removeEntry(*resultItem4);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByRoleParentType()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setParentId(parentEntry->id());
+        query1.addEntryTypeName(QString("TypeOK"));
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB ( item, parent1, typeOk)
+        CaEntry item1;
+        item1.setEntryTypeName(QString("TypeOK"));
+        item1.setText(QString("Name"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2= entries.count();
+        //ADD TO DB ( item, parent1, typeWrong)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("TypeWRONG"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB ( item, parent2, typeOk)
+        service->appendEntryToGroup(parentEntry2->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB ( group, parent1, typeOk)
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultGroup1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByRoleParentFlags()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setParentId(parentEntry->id());
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (item, parent1, system )
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Type"));
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB(item, parent1, not system )
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB(item, parent2 , system )
+        service->appendEntryToGroup(parentEntry2->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB(group, parent1, system )
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("type"));
+        group1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultGroup1->id());
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultGroup1);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByParentTypeFlags()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setParentId(parentEntry->id());
+        query1.addEntryTypeName(QString("TypeOK"));
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (parent1, typeOk, system)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("TypeOK"));
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB(parent1, typeOk, not system)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB(parent1, typeWRONG, system)
+        CaEntry item3;
+        item3.setText(QString("Name"));
+        item3.setEntryTypeName(QString("TypeWRONG"));
+        item3.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item3);
+        QVERIFY(!resultItem3.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem3->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB(parent2, typeOk, system)
+        service->appendEntryToGroup(parentEntry2->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByRoleParentTypeFlags()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setParentId(parentEntry->id());
+        query1.addEntryTypeName(QString("TypeOK"));
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB ( item, parent1, typeOK, system )
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("TypeOK"));
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB ( item, parent1, typeOK, not system )
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB( item, parent1, typeWRONG, system )
+        CaEntry item3;
+        item3.setText(QString("Name"));
+        item3.setEntryTypeName(QString("TypeWRONG"));
+        item3.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item3);
+        QVERIFY(!resultItem3.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem3->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB( item, parent2, typeOK, system )
+        service->appendEntryToGroup(parentEntry2->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount5 = entries.count();
+        //ADD TO DB( group, parent1, typeOK, system )
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("TypeOK"));
+        group1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultGroup1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntries(query1);
+        int entriesCount6 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        QCOMPARE(entriesCount5, entriesCount6);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesCount()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("CountTest"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("CountTest"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("CountTest"));
+        query1.setCount(1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("CountTest"));
+        query2.setCount(2);
+        CaQuery query3;
+        query3.addEntryTypeName(QString("CountTest"));
+        query3.setCount(3);
+        QList< QSharedPointer<CaEntry> > entries1 = service->getEntries(query1);
+        QList< QSharedPointer<CaEntry> > entries2 = service->getEntries(query2);
+        QList< QSharedPointer<CaEntry> > entries3 = service->getEntries(query3);
+
+        //CHECK RESULTS
+        QCOMPARE(entries1.count(),1);
+        QCOMPARE(entries2.count(),2);
+        QCOMPARE(entries3.count(),3);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesSortCreated()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort1Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+
+        //ADD TO DB
+        CaEntry item1;
+        item1.setEntryTypeName(QString("Sort1Test"));
+        item1.setText(QString("Name"));
+
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort1Test"));
+        query1.setSort(CreatedTimestampSortAttribute, Qt::AscendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesAsc = service->getEntries(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort1Test"));
+        query2.setSort(CreatedTimestampSortAttribute, Qt::DescendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesDesc = service->getEntries(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0)->id(),resultItem1->id());
+        QCOMPARE(entriesAsc.at(1)->id(),resultItem2->id());
+        QCOMPARE(entriesAsc.at(2)->id(),resultItem3->id());
+        QCOMPARE(entriesDesc.at(0)->id(),resultItem3->id());
+        QCOMPARE(entriesDesc.at(1)->id(),resultItem2->id());
+        QCOMPARE(entriesDesc.at(2)->id(),resultItem1->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesSortDefault()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort0Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+
+        //ADD TO DB
+        CaEntry item1;
+        item1.setEntryTypeName(QString("Sort0Test"));
+        item1.setText(QString("Name"));
+
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort0Test"));
+        query1.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesAsc = service->getEntries(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort0Test"));
+        query2.setSort(DefaultSortAttribute, Qt::DescendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesDesc = service->getEntries(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0)->id(),resultItem1->id());
+        QCOMPARE(entriesAsc.at(1)->id(),resultItem2->id());
+        QCOMPARE(entriesAsc.at(2)->id(),resultItem3->id());
+        QCOMPARE(entriesDesc.at(0)->id(),resultItem3->id());
+        QCOMPARE(entriesDesc.at(1)->id(),resultItem2->id());
+        QCOMPARE(entriesDesc.at(2)->id(),resultItem1->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesSortName()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort2Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText(QString("nameB"));
+        item1.setEntryTypeName(QString("Sort2Test"));
+        CaEntry item2;
+        item2.setText(QString("NameA"));
+        item2.setEntryTypeName(QString("Sort2Test"));
+        CaEntry item3;
+        item3.setText(QString("NameC"));
+        item3.setEntryTypeName(QString("Sort2Test"));
+
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item3);
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort2Test"));
+        query1.setSort(NameSortAttribute, Qt::AscendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesAsc = service->getEntries(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort2Test"));
+        query2.setSort(NameSortAttribute, Qt::DescendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesDesc = service->getEntries(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0)->id(),resultItem2->id());
+        QCOMPARE(entriesAsc.at(1)->id(),resultItem1->id());
+        QCOMPARE(entriesAsc.at(2)->id(),resultItem3->id());
+        QCOMPARE(entriesDesc.at(0)->id(),resultItem3->id());
+        QCOMPARE(entriesDesc.at(1)->id(),resultItem1->id());
+        QCOMPARE(entriesDesc.at(2)->id(),resultItem2->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesSortLast()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort3Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+        //ADD TO DB
+        CaEntry item1;
+        item1.setEntryTypeName(QString("Sort3Test"));
+        item1.setText(QString("Name"));
+
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+
+        service->touch(*resultItem2);
+        service->touch(*resultItem1);
+        service->touch(*resultItem3);
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort3Test"));
+        query1.setSort(LastUsedSortAttribute, Qt::AscendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesAsc = service->getEntries(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort3Test"));
+        query2.setSort(LastUsedSortAttribute, Qt::DescendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesDesc = service->getEntries(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0)->id(),resultItem2->id());
+        QCOMPARE(entriesAsc.at(1)->id(),resultItem1->id());
+        QCOMPARE(entriesAsc.at(2)->id(),resultItem3->id());
+        QCOMPARE(entriesDesc.at(0)->id(),resultItem3->id());
+        QCOMPARE(entriesDesc.at(1)->id(),resultItem1->id());
+        QCOMPARE(entriesDesc.at(2)->id(),resultItem2->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesSortMost()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort4Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Sort4Test"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+
+        service->touch(*resultItem2);
+        service->touch(*resultItem2);
+        service->touch(*resultItem2);
+        service->touch(*resultItem1);
+        service->touch(*resultItem1);
+        service->touch(*resultItem3);
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort4Test"));
+        query1.setSort(MostUsedSortAttribute, Qt::AscendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesAsc = service->getEntries(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort4Test"));
+        query2.setSort(MostUsedSortAttribute, Qt::DescendingOrder);
+        QList< QSharedPointer<CaEntry> > entriesDesc = service->getEntries(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0)->id(),resultItem3->id());
+        QCOMPARE(entriesAsc.at(1)->id(),resultItem1->id());
+        QCOMPARE(entriesAsc.at(2)->id(),resultItem2->id());
+        QCOMPARE(entriesDesc.at(0)->id(),resultItem2->id());
+        QCOMPARE(entriesDesc.at(1)->id(),resultItem1->id());
+        QCOMPARE(entriesDesc.at(2)->id(),resultItem3->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByRole()
+{
+    {
+        //CHECK INITIAL STATE IN DB
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query;
+        query.setEntryRoles(ItemEntryRole);
+        QList<int> items = service->getEntryIds(query);
+        int itemsCountBefore = items.count();
+        query.setEntryRoles(GroupEntryRole);
+        QList<int> groups = service->getEntryIds(query);
+        int groupsCountBefore = groups.count();
+        query.setEntryRoles(ItemEntryRole | GroupEntryRole);
+        QList<int> itemsOrGroups = service->getEntryIds(query);
+        int itemsOrGroupsCountBefore = itemsOrGroups.count();
+
+
+        //ADD TO STORAGE
+        CaEntry item;
+        item.setText("testName_item");
+        item.setAttribute("attrName1_item", "attrVal1_item");
+        item.setEntryTypeName("test_item");
+        item.setFlags(RemovableEntryFlag);
+        CaEntry group(GroupEntryRole);
+        group.setText("testName_group");
+        group.setAttribute("attrName1_group", "attrVal1_group");
+        group.setEntryTypeName("test_group");
+        group.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(group);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+
+        //GET RESULTS AFTER ADD
+        query.setEntryRoles(ItemEntryRole);
+        items = service->getEntryIds(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int itemsCountAfter = items.count();
+        query.setEntryRoles(GroupEntryRole);
+        groups = service->getEntryIds(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int groupsCountAfter = groups.count();
+        query.setEntryRoles(ItemEntryRole | GroupEntryRole);
+        itemsOrGroups = service->getEntryIds(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int itemsOrGroupsCountAfter = itemsOrGroups.count();
+
+        //CHECK RESULTS
+        QCOMPARE(itemsCountAfter, itemsCountBefore+1);
+        QCOMPARE(groupsCountAfter, groupsCountBefore+1);
+        QCOMPARE(itemsOrGroupsCountAfter, itemsOrGroupsCountBefore+2);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByParent()
+{
+    {
+        //ADD TEST DATA TO THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaEntry group(GroupEntryRole);
+        group.setText("testName_group");
+        group.setAttribute("attrName1_group", "attrVal1_group");
+        group.setEntryTypeName("test_group");
+        group.setFlags(RemovableEntryFlag);
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(group);
+        QVERIFY(!parentEntry.isNull());
+        CaEntry item;
+        item.setText("testName_item");
+        item.setAttribute("attrName1_item", "attrVal1_item");
+        item.setEntryTypeName("test_item");
+        item.setFlags(RemovableEntryFlag);
+        QSharedPointer<CaEntry> childEntry = service->createEntry(item);
+        QVERIFY(!childEntry.isNull());
+
+        //PREPARE QUERY
+        CaQuery query;
+        query.setParentId(parentEntry->id());
+        QList<int> entries = service->getEntryIds(query);
+        int countBefore = entries.count();
+
+        //APPEND ENTRY TO THE GROUP
+        service->appendEntryToGroup(parentEntry->id(),childEntry->id());
+        entries = service->getEntryIds(query);
+        int countAfter = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(countBefore, 0);
+        QCOMPARE(countAfter, 1);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*childEntry);
+        service->removeEntry(*parentEntry);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByType1()
+{
+    {
+        //CHECK INITIAL STATE IN DB
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query;
+        QStringList strList;
+        strList << QString("WRONGTYPENAME");
+        query.setEntryTypeNames(strList);
+        QList<int> entriesWrongType = service->getEntryIds(query);
+        int countWrongBefore = entriesWrongType.count();
+        strList.clear();
+        strList << QString("WRONGTYPENAME");
+        strList << QString("test_item1");
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        QList<int> entriesWrong12 = service->getEntryIds(query);
+        int countWrong12Before = entriesWrong12.count();
+        strList.clear();
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        QList<int> entries1 = service->getEntryIds(query);
+        int count1Before = entries1.count();
+        strList.clear();
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        QList<int> entries2 = service->getEntryIds(query);
+        int count2Before = entries2.count();
+        strList.clear();
+        strList << QString("test_item1");
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        QList<int> entries12 = service->getEntryIds(query);
+        int count12Before = entries12.count();
+
+        //ADD TEST DATA TO THE STORAGE
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        CaEntry item2;
+        item2.setText("testName_item2");
+        item2.setAttribute("attrName2_item", "attrVal2_item");
+        item2.setEntryTypeName("test_item2");
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        strList.clear();
+        strList << QString("WRONGTYPENAME");
+        query.setEntryTypeNames(strList);
+        query.setEntryTypeNames(strList);
+        entriesWrongType = service->getEntryIds(query);
+        int countWrongAfter = entriesWrongType.count();
+        strList.clear();
+        strList << QString("WRONGTYPENAME");
+        strList << QString("test_item1");
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        entriesWrong12 = service->getEntryIds(query);
+        int countWrong12After = entriesWrong12.count();
+        strList.clear();
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        entries1 = service->getEntryIds(query);
+        int count1After = entries1.count();
+        strList.clear();
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        entries2 = service->getEntryIds(query);
+        int count2After = entries2.count();
+        strList.clear();
+        strList << QString("test_item1");
+        strList << QString("test_item2");
+        query.setEntryTypeNames(strList);
+        entries12 = service->getEntryIds(query);
+        int count12After = entries12.count();
+
+        //CHECK RESULTS
+        QCOMPARE(countWrongBefore,countWrongAfter);
+        QCOMPARE(countWrong12Before+2,countWrong12After);
+        QCOMPARE(count1Before+1,count1After);
+        QCOMPARE(count2Before+1,count2After);
+        QCOMPARE(count12Before+2,count12After);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByType2()
+{
+    {
+        //CHECK INITIAL STATE IN DB
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query;
+        QStringList strList;
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        query.addEntryTypeName(QString("test_item2"));
+        QList<int> entries12 = service->getEntryIds(query);
+        int count12Before = entries12.count();
+
+        //ADD TEST DATA TO THE STORAGE
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        CaEntry item2;
+        item2.setText("testName_item2");
+        item2.setAttribute("attrName2_item", "attrVal2_item");
+        item2.setEntryTypeName("test_item2");
+
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        strList.clear();
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        query.addEntryTypeName(QString("test_item2"));
+        entries12 = service->getEntryIds(query);
+        int count12After = entries12.count();
+
+        //CHECK RESULTS
+        QCOMPARE(count12Before+2,count12After);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByFlagsOn()
+{
+    {
+        //CHECK INITIAL STATE IN DB
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setFlagsOn(UninstallEntryFlag);
+        CaQuery query2;
+        query2.setFlagsOn(RemovableEntryFlag);
+        CaQuery query3;
+        query3.setFlagsOn(UninstallEntryFlag|RemovableEntryFlag);
+        QList<int> entriesSystem = service->getEntryIds(query1);
+        int systemCountBefore = entriesSystem.count();
+        QList<int> entriesRemovable = service->getEntryIds(query2);
+        int removableCountBefore = entriesRemovable.count();
+        QList<int> entriesSysRem = service->getEntryIds(query3);
+        int sysremoveCountBefore = entriesSysRem.count();
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        item1.setFlags(UninstallEntryFlag);
+        CaEntry item2;
+        item2.setText("testName_item2");
+        item2.setAttribute("attrName2_item", "attrVal2_item");
+        item2.setEntryTypeName("test_item2");
+        item2.setFlags(UninstallEntryFlag | RemovableEntryFlag);
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+        //CHECK STATE IN THE STORAGE AFTER ADD
+        entriesSystem = service->getEntryIds(query1);
+        int systemCountAfter = entriesSystem.count();
+        entriesRemovable = service->getEntryIds(query2);
+        int removableCountAfter = entriesRemovable.count();
+        entriesSysRem = service->getEntryIds(query3);
+        int sysremoveCountAfter = entriesSysRem.count();
+        //CHECK RESULTS
+        QCOMPARE(systemCountBefore+2,systemCountAfter);
+        QCOMPARE(removableCountBefore+1,removableCountAfter);
+        QCOMPARE(sysremoveCountBefore+1,sysremoveCountAfter);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByFlagsOff()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setFlagsOff(UninstallEntryFlag);
+        CaQuery query2;
+        query2.setFlagsOff(RemovableEntryFlag);
+        CaQuery query3;
+        query3.setFlagsOff(UninstallEntryFlag|RemovableEntryFlag);
+        QList<int> entriesSystem = service->getEntryIds(query1);
+        int systemCountBefore = entriesSystem.count();
+        QList<int> entriesRemovable = service->getEntryIds(query2);
+        int removableCountBefore = entriesRemovable.count();
+        QList<int> entriesSysRem = service->getEntryIds(query3);
+        int sysremoveCountBefore = entriesSysRem.count();
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        item1.setFlags(UninstallEntryFlag);
+        CaEntry item2;
+        item2.setText("testName_item2");
+        item2.setAttribute("attrName2_item", "attrVal2_item");
+        item2.setEntryTypeName("test_item2");
+        item2.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entriesSystem = service->getEntryIds(query1);
+        int systemCountAfter = entriesSystem.count();
+        entriesRemovable = service->getEntryIds(query2);
+        int removableCountAfter = entriesRemovable.count();
+        entriesSysRem = service->getEntryIds(query3);
+        int sysremoveCountAfter = entriesSysRem.count();
+        //CHECK RESULTS
+        QCOMPARE(systemCountBefore+1,systemCountAfter);
+        QCOMPARE(removableCountBefore+1,removableCountAfter);
+        QCOMPARE(sysremoveCountBefore,sysremoveCountAfter);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByFlagsOnOff()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setFlagsOn(UninstallEntryFlag);
+        query1.setFlagsOff(RemovableEntryFlag);
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QVERIFY(!resultEntry1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB
+        CaEntry item2;
+        item2.setText("testName_item1");
+        item2.setAttribute("attrName1_item", "attrVal1_item");
+        item2.setEntryTypeName("test_item1");
+        item2.setFlags(RemovableEntryFlag);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB
+        CaEntry item3;
+        item3.setText("testName_item1");
+        item3.setAttribute("attrName1_item", "attrVal1_item");
+        item3.setEntryTypeName("test_item1");
+        item3.setFlags(UninstallEntryFlag|RemovableEntryFlag);
+        QSharedPointer<CaEntry> resultEntry3 = service->createEntry(item3);
+        QVERIFY(!resultEntry3.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3,entriesCount4);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+        service->removeEntry(*resultEntry3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByRoleParent()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT ENTRY TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("TypeOK"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("TypeOK"));
+
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setParentId(parentEntry->id());
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (item, parent2)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry2->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (group, parent2)
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        service->appendEntryToGroup(parentEntry2->id(),resultGroup1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB (item, parent1)
+        service->appendEntryToGroup(parentEntry->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB (group, parent1)
+        service->appendEntryToGroup(parentEntry->id(),resultGroup1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3+1, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByRoleType()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.addEntryTypeName(QString("TestTypeName"));
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+        //ADD TO DB (item, typeOk)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("TestTypeName"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (item, typeWrong)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("TestTypeWRONG"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB (group, typeOk)
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("TestTypeName"));
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB (group, typeWrong)
+        CaEntry group2(GroupEntryRole);
+        group2.setText(QString("text"));
+        group2.setEntryTypeName(QString("TestTypeWRONG"));
+        QSharedPointer<CaEntry> resultGroup2 = service->createEntry(group2);
+        QVERIFY(!resultGroup2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultGroup2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByRoleFlags()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+        //ADD TO DB (item, systemOn)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Type"));
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (item, systemOff)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB(group, systemOn)
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("type"));
+        group1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB(group, systemoff)
+        CaEntry group2(GroupEntryRole);
+        group2.setText(QString("text"));
+        group2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> resultGroup2 = service->createEntry(group2);
+        QVERIFY(!resultGroup2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultGroup2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByParentType()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setParentId(parentEntry->id());
+        query1.addEntryTypeName(QString("typeOK"));
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+        //ADD TO DB (parent1, typeok)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("typeOK"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (parent1, typeWrong)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("typeWrong"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(),resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB (parent2, typeOk)
+        service->appendEntryToGroup(parentEntry2->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB (parent2,typeWrong)
+        service->appendEntryToGroup(parentEntry2->id(),resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByParentFlags()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setParentId(parentEntry->id());
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (parent1, system)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Type"));
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB (parent1, not system)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(),resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB( parent2, system )
+        service->appendEntryToGroup(parentEntry2->id(),resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB (parent2, not system)
+        service->appendEntryToGroup(parentEntry2->id(),resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByTypeFlags()
+{
+    {
+        //GET INITIAL STATE FROM THE STORAGE
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query1;
+        query1.addEntryTypeName(QString("TypeOK"));
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (typeOk, system)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setFlags(UninstallEntryFlag);
+        item1.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB(typeOk, not system)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB(typeWrong, system)
+        CaEntry item3;
+        item3.setText(QString("Name"));
+        item3.setFlags(UninstallEntryFlag);
+        item3.setEntryTypeName(QString("TypeWrong"));
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item3);
+        QVERIFY(!resultItem3.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB(typeWrong, not system)
+        CaEntry item4;
+        item4.setText(QString("Name"));
+        item4.setEntryTypeName(QString("TypeWrong"));
+        QSharedPointer<CaEntry> resultItem4 = service->createEntry(item4);
+        QVERIFY(!resultItem4.isNull());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+        service->removeEntry(*resultItem4);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByRoleParentType()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setParentId(parentEntry->id());
+        query1.addEntryTypeName(QString("TypeOK"));
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB ( item, parent1, typeOk)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2= entries.count();
+        //ADD TO DB ( item, parent1, typeWrong)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("TypeWRONG"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB ( item, parent2, typeOk)
+        service->appendEntryToGroup(parentEntry2->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB ( group, parent1, typeOk)
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultGroup1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByRoleParentFlags()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("Type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setParentId(parentEntry->id());
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (item, parent1, system )
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Type"));
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB(item, parent1, not system )
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB(item, parent2 , system )
+        service->appendEntryToGroup(parentEntry2->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB(group, parent1, system )
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("Type"));
+        group1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultGroup1->id());
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByParentTypeFlags()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("Type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setParentId(parentEntry->id());
+        query1.addEntryTypeName(QString("TypeOK"));
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB (parent1, typeOk, system)
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("TypeOK"));
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB(parent1, typeOk, not system)
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB(parent1, typeWRONG, system)
+        CaEntry item3;
+        item3.setText(QString("Name"));
+        item3.setEntryTypeName(QString("TypeWRONG"));
+        item3.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item3);
+        QVERIFY(!resultItem3.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem3->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB(parent2, typeOk, system)
+        service->appendEntryToGroup(parentEntry2->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsByRoleParentTypeFlags()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //ADD PARENT TO THE STORAGE
+        CaEntry parent(GroupEntryRole);
+        CaEntry parent2(GroupEntryRole);
+        parent.setText(QString("text"));
+        parent.setEntryTypeName(QString("Type"));
+        parent2.setText(QString("text"));
+        parent2.setEntryTypeName(QString("Type"));
+        QSharedPointer<CaEntry> parentEntry = service->createEntry(parent);
+        QVERIFY(!parentEntry.isNull());
+        QSharedPointer<CaEntry> parentEntry2 = service->createEntry(parent2);
+        QVERIFY(!parentEntry2.isNull());
+
+        //GET INITIAL STATE FROM THE STORAGE
+        CaQuery query1;
+        query1.setEntryRoles(ItemEntryRole);
+        query1.setParentId(parentEntry->id());
+        query1.addEntryTypeName(QString("TypeOK"));
+        query1.setFlagsOn(UninstallEntryFlag);
+        QList<int> entries = service->getEntryIds(query1);
+        int entriesCount1 = entries.count();
+
+        //ADD TO DB ( item, parent1, typeOK, system )
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("TypeOK"));
+        item1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QVERIFY(!resultItem1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount2 = entries.count();
+        //ADD TO DB ( item, parent1, typeOK, not system )
+        CaEntry item2;
+        item2.setText(QString("Name"));
+        item2.setEntryTypeName(QString("TypeOK"));
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QVERIFY(!resultItem2.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem2->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount3 = entries.count();
+        //ADD TO DB( item, parent1, typeWRONG, system )
+        CaEntry item3;
+        item3.setText(QString("Name"));
+        item3.setEntryTypeName(QString("TypeWRONG"));
+        item3.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item3);
+        QVERIFY(!resultItem3.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultItem3->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount4 = entries.count();
+        //ADD TO DB( item, parent2, typeOK, system )
+        service->appendEntryToGroup(parentEntry2->id(), resultItem1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount5 = entries.count();
+        //ADD TO DB( group, parent1, typeOK, system )
+        CaEntry group1(GroupEntryRole);
+        group1.setText(QString("text"));
+        group1.setEntryTypeName(QString("TypeOK"));
+        group1.setFlags(UninstallEntryFlag);
+        QSharedPointer<CaEntry> resultGroup1 = service->createEntry(group1);
+        QVERIFY(!resultGroup1.isNull());
+        service->appendEntryToGroup(parentEntry->id(), resultGroup1->id());
+        //GET STATE FROM THE STORAGE AFTER ADD
+        entries = service->getEntryIds(query1);
+        int entriesCount6 = entries.count();
+
+        //CHECK RESULTS
+        QCOMPARE(entriesCount1+1,entriesCount2);
+        QCOMPARE(entriesCount2,entriesCount3);
+        QCOMPARE(entriesCount3, entriesCount4);
+        QCOMPARE(entriesCount4, entriesCount5);
+        QCOMPARE(entriesCount5, entriesCount6);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+        service->removeEntry(*resultGroup1);
+        service->removeEntry(*parentEntry);
+        service->removeEntry(*parentEntry2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsCount()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("CountTest2"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("CountTest2"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("CountTest2"));
+        query1.setCount(1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("CountTest2"));
+        query2.setCount(2);
+        CaQuery query3;
+        query3.addEntryTypeName(QString("CountTest2"));
+        query3.setCount(3);
+        QList<int> entries1 = service->getEntryIds(query1);
+        QList<int> entries2 = service->getEntryIds(query2);
+        QList<int> entries3 = service->getEntryIds(query3);
+
+        //CHECK RESULTS
+        QCOMPARE(entries1.count(),1);
+        QCOMPARE(entries2.count(),2);
+        QCOMPARE(entries3.count(),3);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsSortDefault()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort9Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+
+        //ADD TO DB
+        CaEntry item1;
+        item1.setEntryTypeName(QString("Sort9Test"));
+        item1.setText(QString("Name"));
+
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort9Test"));
+        query1.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+        QList<int> entriesAsc = service->getEntryIds(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort9Test"));
+        query2.setSort(DefaultSortAttribute, Qt::DescendingOrder);
+        QList<int> entriesDesc = service->getEntryIds(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0),resultItem1->id());
+        QCOMPARE(entriesAsc.at(1),resultItem2->id());
+        QCOMPARE(entriesAsc.at(2),resultItem3->id());
+        QCOMPARE(entriesDesc.at(0),resultItem3->id());
+        QCOMPARE(entriesDesc.at(1),resultItem2->id());
+        QCOMPARE(entriesDesc.at(2),resultItem1->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsSortCreated()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort5Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Sort5Test"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort5Test"));
+        query1.setSort(CreatedTimestampSortAttribute, Qt::AscendingOrder);
+        QList<int> entriesAsc = service->getEntryIds(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort5Test"));
+        query2.setSort(CreatedTimestampSortAttribute, Qt::DescendingOrder);
+        QList<int> entriesDesc = service->getEntryIds(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0),resultItem1->id());
+        QCOMPARE(entriesAsc.at(1),resultItem2->id());
+        QCOMPARE(entriesAsc.at(2),resultItem3->id());
+        QCOMPARE(entriesDesc.at(0),resultItem3->id());
+        QCOMPARE(entriesDesc.at(1),resultItem2->id());
+        QCOMPARE(entriesDesc.at(2),resultItem1->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsSortName()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort6Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText(QString("NameB"));
+        item1.setEntryTypeName(QString("Sort6Test"));
+        CaEntry item2;
+        item2.setText(QString("NameA"));
+        item2.setEntryTypeName(QString("Sort6Test"));
+        CaEntry item3;
+        item3.setText(QString("NameC"));
+        item3.setEntryTypeName(QString("Sort6Test"));
+
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item2);
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item3);
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort6Test"));
+        query1.setSort(NameSortAttribute, Qt::AscendingOrder);
+        QList<int> entriesAsc = service->getEntryIds(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort6Test"));
+        query2.setSort(NameSortAttribute, Qt::DescendingOrder);
+        QList<int> entriesDesc = service->getEntryIds(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0),resultItem2->id());
+        QCOMPARE(entriesAsc.at(1),resultItem1->id());
+        QCOMPARE(entriesAsc.at(2),resultItem3->id());
+        QCOMPARE(entriesDesc.at(0),resultItem3->id());
+        QCOMPARE(entriesDesc.at(1),resultItem1->id());
+        QCOMPARE(entriesDesc.at(2),resultItem2->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsSortLast()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort7Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Sort7Test"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+
+        service->touch(*resultItem2);
+        service->touch(*resultItem1);
+        service->touch(*resultItem3);
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort7Test"));
+        query1.setSort(LastUsedSortAttribute, Qt::AscendingOrder);
+        QList<int> entriesAsc = service->getEntryIds(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort7Test"));
+        query2.setSort(LastUsedSortAttribute, Qt::DescendingOrder);
+        QList<int> entriesDesc = service->getEntryIds(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0),resultItem2->id());
+        QCOMPARE(entriesAsc.at(1),resultItem1->id());
+        QCOMPARE(entriesAsc.at(2),resultItem3->id());
+        QCOMPARE(entriesDesc.at(0),resultItem3->id());
+        QCOMPARE(entriesDesc.at(1),resultItem1->id());
+        QCOMPARE(entriesDesc.at(2),resultItem2->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesIdsSortMost()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        //REMOVE "OLD" ENTRIES FROM STORAGE
+        CaQuery query;
+        query.addEntryTypeName(QString("Sort8Test"));
+        QList<int> oldIds = service->getEntryIds(query);
+        if (oldIds.count()) {
+            service->removeEntries(oldIds);
+        }
+        //ADD TO DB
+        CaEntry item1;
+        item1.setText(QString("Name"));
+        item1.setEntryTypeName(QString("Sort8Test"));
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item1);  //item clone
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item1);  //item clone
+
+        service->touch(*resultItem2);
+        service->touch(*resultItem2);
+        service->touch(*resultItem2);
+        service->touch(*resultItem1);
+        service->touch(*resultItem1);
+        service->touch(*resultItem3);
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        CaQuery query1;
+        query1.addEntryTypeName(QString("Sort8Test"));
+        query1.setSort(MostUsedSortAttribute, Qt::AscendingOrder);
+        QList<int> entriesAsc = service->getEntryIds(query1);
+        CaQuery query2;
+        query2.addEntryTypeName(QString("Sort8Test"));
+        query2.setSort(MostUsedSortAttribute, Qt::DescendingOrder);
+        QList<int> entriesDesc = service->getEntryIds(query2);
+
+        //CHECK RESULTS
+        QCOMPARE(entriesAsc.count(),3);
+        QCOMPARE(entriesDesc.count(),3);
+        QCOMPARE(entriesAsc.at(0),resultItem3->id());
+        QCOMPARE(entriesAsc.at(1),resultItem1->id());
+        QCOMPARE(entriesAsc.at(2),resultItem2->id());
+        QCOMPARE(entriesDesc.at(0),resultItem2->id());
+        QCOMPARE(entriesDesc.at(1),resultItem1->id());
+        QCOMPARE(entriesDesc.at(2),resultItem3->id());
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestGetEntriesByAttributes()
+{
+    {
+        CaEntry item;
+        item.setText("testName");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+        
+        CaIconDescription iconDescription;
+        iconDescription.setFilename("iconFileName");
+        iconDescription.setSkinId("iconSkinId");
+        iconDescription.setApplicationId("268458321");
+        item.setIconDescription(iconDescription);
+    
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem = service->createEntry(item);
+    
+        QVERIFY(!resultItem.isNull());
+        // entry from storage
+        QSharedPointer<CaEntry> storageItem1 = service->getEntry(resultItem->id());
+        QCOMPARE(service->lastError(), NoErrorCode);
+        QVERIFY(storageItem1);
+        QCOMPARE(storageItem1->role(), ItemEntryRole);
+        QCOMPARE(QString("testName"),storageItem1->text());
+        QCOMPARE(QString("test"),storageItem1->entryTypeName());
+        QCOMPARE(QString("attrVal1"),storageItem1->attribute("attrName1"));
+        QCOMPARE(item.flags(),storageItem1->flags());
+        QCOMPARE(iconDescription.filename(),storageItem1->iconDescription().filename());
+        QCOMPARE(iconDescription.skinId(),storageItem1->iconDescription().skinId());
+        QCOMPARE(iconDescription.applicationId(),storageItem1->iconDescription().applicationId());
+
+        CaQuery query;
+        query.setEntryRoles(ItemEntryRole);
+        query.setAttribute(QString("attrName1"),QString("attrVal1"));
+        QVERIFY(query.attributes().contains(QString("attrName1")));
+        QCOMPARE(query.attribute(QString("attrName1")),QString("attrVal1"));
+        QList<int> entries = service->getEntryIds(query);
+        int entriesCount1 = entries.count();
+        QSharedPointer<CaEntry> afterGetItem = service->getEntry(entries.first());
+        
+        QCOMPARE(afterGetItem->id(),storageItem1->id());
+        //Cleanup
+        service->removeEntry(*resultItem);
+    }
+}