contentstorage/caclient/tsrc/t_caclient/src/t_caclient_getentries.cpp
author Jaakko Haukipuro (Nokia-MS/Oulu) <Jaakko.Haukipuro@nokia.com>
Thu, 16 Sep 2010 12:11:40 +0100
changeset 117 c63ee96dbe5f
permissions -rw-r--r--
Missing activityfw and taskswitcher components - fix for Bug 3670

/*
* 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);
    }
}