qtmobility/plugins/contacts/symbian/tsrc/ut_symbian/ut_cntrelationship.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 8 71781823f776
--- a/qtmobility/plugins/contacts/symbian/tsrc/ut_symbian/ut_cntrelationship.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/plugins/contacts/symbian/tsrc/ut_symbian/ut_cntrelationship.cpp	Mon May 03 13:18:40 2010 +0300
@@ -73,14 +73,15 @@
     qRegisterMetaType<QList<QContactLocalId> >("QList<QContactLocalId>");
 
     //create manager
-    m_manager = new QContactManager("symbian");
+    QContactManager::Error err;
+    m_manager = new CntSymbianEngine(QMap<QString, QString>(), &err);
 
     //open symbian database
     TRAPD(error, m_database = CContactDatabase::OpenL());
     QVERIFY(error == KErrNone);
 
     // create relationship
-    m_relationship = new CntRelationship(m_database, m_manager->managerUri());
+    m_relationship = new CntRelationship(m_database, m_manager->m_managerUri);
 }
 
 
@@ -100,8 +101,11 @@
 void TestCntRelationship::init()
 {
     //delete all contacts from the database
-    QList<QContactLocalId> contacts = m_manager->contactIds();
-    m_manager->removeContacts(&contacts);
+    QContactManager::Error err;
+    QList<QContactLocalId> contacts = m_manager->contactIds(QContactFilter(), QList<QContactSortOrder>(), &err);
+    
+    QMap<int, QContactManager::Error> errorMap;
+    m_manager->removeContacts(contacts, &errorMap, &err);
 }
 
 void TestCntRelationship::cleanup()
@@ -123,39 +127,39 @@
     //save & remove relationships
     QList<QContactRelationship> relationships;
     relationships.append(relationship);
-    QList <QContactManager::Error> errors;
 
     //save relationship
-    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, error);
+    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, &error);
     QVERIFY(returnValue == false);
     QVERIFY(affectedContactIds.count() == 0);
     QVERIFY(error == QContactManager::NotSupportedError);
 
     //remove relationship
-    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, error);
+    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, &error);
     QVERIFY(returnValue == false);
     QVERIFY(affectedContactIds.count() == 0);
     QVERIFY(error == QContactManager::NotSupportedError);
 
     //save relationships
-    errors = m_relationship->saveRelationships(&affectedContactIds, &relationships, error);
+    QMap<int, QContactManager::Error> errorMap;
+    QVERIFY(!m_relationship->saveRelationships(&affectedContactIds, &relationships, &errorMap, &error));
     QVERIFY(affectedContactIds.count() == 0);
-    for(int i = 0; i < errors.count(); i++){
-        QVERIFY(errors.at(i) == QContactManager::NotSupportedError);
+    foreach (QContactManager::Error err, errorMap) {
+        QVERIFY(err == QContactManager::NotSupportedError);
     }
 
     //remove relationships
-    errors = m_relationship->removeRelationships(&affectedContactIds, relationships, error);
+    QVERIFY(m_relationship->removeRelationships(&affectedContactIds, relationships, &errorMap, &error));
     QVERIFY(affectedContactIds.count() == 0);
-    for(int i = 0; i < errors.count(); i++){
-        QVERIFY(errors.at(i) == QContactManager::NotSupportedError);
+    foreach (QContactManager::Error err, errorMap) {
+        QVERIFY(err == QContactManager::NotSupportedError);
     }
 
     //relationships
     QList<QContactRelationship> relationshipList;
     QContactId id;
 
-    relationshipList = m_relationship->relationships(QLatin1String("invalid relationship"), id, QContactRelationshipFilter::Either, error);
+    relationshipList = m_relationship->relationships(QLatin1String("invalid relationship"), id, QContactRelationship::Either, &error);
     QVERIFY(relationshipList.count() == 0);
     QVERIFY(error == QContactManager::NotSupportedError);
 }
@@ -168,12 +172,13 @@
     //create a group
     QContact groupContact;
     groupContact.setType(QContactType::TypeGroup);
-    m_manager->saveContact(&groupContact);
+    QContactManager::Error err;
+    m_manager->saveContact(&groupContact, &err);
 
     //create a contact
     QContact contact;
     contact.setType(QContactType::TypeContact);
-    m_manager->saveContact(&contact);
+    m_manager->saveContact(&contact, &err);
 
     //create relationship
     QContactRelationship relationship;
@@ -185,7 +190,7 @@
     bool returnValue(false);
     QContactManager::Error error;
     QSet<QContactLocalId> affectedContactIds;
-    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, error);
+    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, &error);
     QVERIFY2(returnValue == true, "save");
     QVERIFY2(affectedContactIds.count() == 2, "save");
     QVERIFY2(affectedContactIds.toList().contains(groupContact.localId()), "save");
@@ -196,39 +201,58 @@
     QList<QContactRelationship> relationshipList;
 
     //Retrive group
-    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), groupContact.id(), QContactRelationshipFilter::First, error);
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), groupContact.id(), QContactRelationship::First, &error);
+
     QVERIFY2(relationshipList.count() == 1, "group - First");
     QVERIFY2(error == QContactManager::NoError, "group - First");
 
-    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), groupContact.id(), QContactRelationshipFilter::Second, error);
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), groupContact.id(), QContactRelationship::Second, &error);
     QVERIFY2(relationshipList.count() == 0, "group - Second");
-    QVERIFY2(error == QContactManager::NoError, "group - Second");
+    QVERIFY2(error == QContactManager::DoesNotExistError, "group - Second");
 
-    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), groupContact.id(), QContactRelationshipFilter::Either, error);
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), groupContact.id(), QContactRelationship::Either, &error);
     QVERIFY2(relationshipList.count() == 1, "group - Either");
     QVERIFY2(error == QContactManager::NoError, "group - Either");
 
     //Retrive contact
-    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), contact.id(), QContactRelationshipFilter::First, error);
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), contact.id(), QContactRelationship::First, &error);
     QVERIFY2(relationshipList.count() == 0, "contact - First");
-    QVERIFY2(error == QContactManager::NoError, "contact - First");
+    QVERIFY2(error == QContactManager::DoesNotExistError, "contact - First");
 
-    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), contact.id(), QContactRelationshipFilter::Second, error);
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), contact.id(), QContactRelationship::Second, &error);
     QVERIFY2(relationshipList.count() == 1, "contact - Second");
     QVERIFY2(error == QContactManager::NoError, "contact - Second");
 
-    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), contact.id(), QContactRelationshipFilter::Either, error);
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), contact.id(), QContactRelationship::Either, &error);
     QVERIFY2(relationshipList.count() == 1, "contact - Either");
     QVERIFY2(error == QContactManager::NoError, "contact - Either");   
     
+    //Relationship for empty contact -> all relationships are returned 
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), QContactId(),
+                QContactRelationship::First, &error);
+    QVERIFY2(relationshipList.count() == 1, "All relationships");
+    QVERIFY2(error == QContactManager::NoError, "All relatiosnships");
     
     //Validate Filter
     QList<QContactLocalId> expectedContacts;
     expectedContacts += contact.localId();
-    QVERIFY(true == validateRelationshipFilter(QContactRelationshipFilter::First, groupContact.id(), expectedContacts));
+    QVERIFY(true == validateRelationshipFilter(QContactRelationship::First, groupContact.id(), expectedContacts));
+    
+    QList<QContactLocalId> expectedContacts1;
+    expectedContacts1 += groupContact.localId();
+    expectedContacts1 += contact.localId();
+    QList<QContactLocalId> expectedContacts2;
+    expectedContacts2 += contact.localId();
+    expectedContacts2 += groupContact.localId(); 
+    QVERIFY(true == (validateRelationshipFilter(QContactRelationship::Either, groupContact.id(), expectedContacts1) ||
+                     validateRelationshipFilter(QContactRelationship::Either, groupContact.id(), expectedContacts2)));
+
+    expectedContacts.clear();
+    expectedContacts += groupContact.localId();
+    QVERIFY(true == validateRelationshipFilter(QContactRelationship::Second, contact.id(), expectedContacts));
     
     //remove relationship
-    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, error);
+    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, &error);
     QVERIFY2(returnValue == true, "remove");
     QVERIFY2(affectedContactIds.count() == 2, "remove");
     QVERIFY2(affectedContactIds.toList().contains(groupContact.localId()), "remove");
@@ -258,7 +282,8 @@
     //create a contact
     QContact contact;
     contact.setType(QContactType::TypeContact);
-    m_manager->saveContact(&contact);
+    QContactManager::Error err;
+    m_manager->saveContact(&contact, &err);
 
     //create relationship
     QContactId invalidId;
@@ -271,13 +296,13 @@
     bool returnValue(false);
     QContactManager::Error error;
     QSet<QContactLocalId> affectedContactIds;
-    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, error);
+    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, &error);
     QVERIFY(returnValue == false);
     QVERIFY(affectedContactIds.count() == 0);
     QVERIFY(error != QContactManager::NoError);
 
     //remove relationship
-    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, error);
+    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, &error);
     QVERIFY(returnValue == false);
     QVERIFY(affectedContactIds.count() == 0);
     QVERIFY(error != QContactManager::NoError);
@@ -291,7 +316,8 @@
     //create a group
     QContact groupContact;
     groupContact.setType(QContactType::TypeGroup);
-    m_manager->saveContact(&groupContact);
+    QContactManager::Error err;
+    m_manager->saveContact(&groupContact, &err);
 
     //create relationship
     QContactId invalidId;
@@ -304,13 +330,22 @@
     bool returnValue(false);
     QContactManager::Error error;
     QSet<QContactLocalId> affectedContactIds;
-    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, error);
+    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, &error);
     QVERIFY2(returnValue == false, "save");
     QVERIFY2(affectedContactIds.count() == 0, "save");
     QVERIFY2(error != QContactManager::NoError, "save");
 
     //remove relationship
-    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, error);
+    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, &error);
+    QVERIFY2(returnValue == false, "remove");
+    QVERIFY2(affectedContactIds.count() == 0, "remove");
+    QVERIFY2(error != QContactManager::NoError, "remove");
+    
+    //remove relationship: cyclic relantionship
+    relationship.setRelationshipType(QContactRelationship::HasMember);
+    relationship.setFirst(groupContact.id());
+    relationship.setSecond(groupContact.id());
+    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, &error);
     QVERIFY2(returnValue == false, "remove");
     QVERIFY2(affectedContactIds.count() == 0, "remove");
     QVERIFY2(error != QContactManager::NoError, "remove");
@@ -332,32 +367,65 @@
     bool returnValue(false);
     QContactManager::Error error;
     QSet<QContactLocalId> affectedContactIds;
-    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, error);
+    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, &error);
     QVERIFY(returnValue == false);
     QVERIFY(affectedContactIds.count() == 0);
     QVERIFY(error != QContactManager::NoError);
 
     //remove relationship
-    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, error);
+    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, &error);
+    QVERIFY(returnValue == false);
+    QVERIFY(affectedContactIds.count() == 0);
+    QVERIFY(error != QContactManager::NoError);
+    
+    //remove relationship: first contact's manager is not the same as cntrelationship's 
+    QContactRelationship relationshipDifManagers;
+    QContactId id1;
+    id1.setLocalId(10);
+    id1.setManagerUri("manager1");
+    QContactId id2;
+    id2.setLocalId(15);
+    id2.setManagerUri("manager2");
+    relationshipDifManagers.setRelationshipType(QContactRelationship::HasMember);
+    relationshipDifManagers.setFirst(id1);
+    relationshipDifManagers.setSecond(id2);
+    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationshipDifManagers, &error);
+    QVERIFY(returnValue == false);
+    QVERIFY(affectedContactIds.count() == 0);
+    QVERIFY(error != QContactManager::NoError);
+    
+    //remove relationship: second contact's manager is not the same as cntrelationship's
+    QContact contact;
+    contact.setType(QContactType::TypeContact);
+    QContactManager::Error err;
+    m_manager->saveContact(&contact, &err);
+    QContactRelationship relationshipDifManagers2;
+    id2.setLocalId(15);
+    id2.setManagerUri("manager2");
+    relationshipDifManagers2.setRelationshipType(QContactRelationship::HasMember);
+    relationshipDifManagers2.setFirst(contact.id());
+    relationshipDifManagers2.setSecond(id2);
+    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationshipDifManagers2, &error);
     QVERIFY(returnValue == false);
     QVERIFY(affectedContactIds.count() == 0);
     QVERIFY(error != QContactManager::NoError);
 }
 
-bool TestCntRelationship::validateRelationshipFilter(const QContactRelationshipFilter::Role role, const QContactId contactId, const QList<QContactLocalId> expectedContacts)
+bool TestCntRelationship::validateRelationshipFilter(const QContactRelationship::Role role, const QContactId contactId, const QList<QContactLocalId> expectedContacts)
     {
     QContactRelationshipFilter filter;
     filter.setRelationshipType(QContactRelationship::HasMember);
     filter.setRelatedContactRole(role);
     filter.setRelatedContactId(contactId);
     
-    QList<QContactLocalId> result = m_manager->contactIds(filter);
+    QContactManager::Error err;
+    QList<QContactLocalId> result = m_manager->contactIds(filter, QList<QContactSortOrder>(), &err);
     
     for(int i = 0; i < result.count(); i++)
         qDebug() << "result: " << result.at(i);
     
-    for(int i = 0; i < expectedContacts.count(); i++)
-            qDebug() << "expectedContacts: " << expectedContacts.at(i);
+    for(int j = 0; j < expectedContacts.count(); j++)
+            qDebug() << "expectedContacts: " << expectedContacts.at(j);
     
     return (result == expectedContacts);
     }