qtmobility/plugins/contacts/symbian/tsrc/ut_symbian/ut_cntrelationship.cpp
changeset 1 2b40d63a9c3d
child 4 90517678cc4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtmobility/plugins/contacts/symbian/tsrc/ut_symbian/ut_cntrelationship.cpp	Fri Apr 16 15:51:22 2010 +0300
@@ -0,0 +1,364 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "ut_cntrelationship.h"
+#include "cntrelationship.h"
+
+
+
+//Symbian database
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntdb.h>
+#include <cntdef.h>
+
+#include <QtTest/QtTest>
+
+#define QTRY_COMPARE(__expr, __expected) \
+    do { \
+        const int __step = 50; \
+        const int __timeout = 1000; \
+        QTest::qWait(10); \
+        for (int __i = 0; __i < __timeout && ((__expr) != (__expected)); __i+=__step) { \
+            QTest::qWait(__step); \
+        } \
+        QCOMPARE(__expr, __expected); \
+    } while(0)
+
+
+/*
+ * Done once before all tests
+ */
+void TestCntRelationship::initTestCase()
+{
+    qRegisterMetaType<QContactLocalId>("QContactLocalId");
+    qRegisterMetaType<QList<QContactLocalId> >("QList<QContactLocalId>");
+
+    //create manager
+    m_manager = new QContactManager("symbian");
+
+    //open symbian database
+    TRAPD(error, m_database = CContactDatabase::OpenL());
+    QVERIFY(error == KErrNone);
+
+    // create relationship
+    m_relationship = new CntRelationship(m_database, m_manager->managerUri());
+}
+
+
+/*
+ * Cleanup after all test
+ */
+void TestCntRelationship::cleanupTestCase()
+{
+    delete m_manager;
+    delete m_database;
+    delete m_relationship;
+}
+
+/*
+ * Initialization done before each test
+ */
+void TestCntRelationship::init()
+{
+    //delete all contacts from the database
+    QList<QContactLocalId> contacts = m_manager->contactIds();
+    m_manager->removeContacts(&contacts);
+}
+
+void TestCntRelationship::cleanup()
+{}
+
+/*
+ * Test relatioship that doesn't exist
+ */
+void TestCntRelationship::invalidRelationship()
+{
+    QContactRelationship relationship;
+    relationship.setRelationshipType(QLatin1String("invalid relationship") );
+
+    //save & remove relationship
+    QContactManager::Error error;
+    QSet<QContactLocalId> affectedContactIds;
+    bool returnValue(false);
+
+    //save & remove relationships
+    QList<QContactRelationship> relationships;
+    relationships.append(relationship);
+    QList <QContactManager::Error> errors;
+
+    //save relationship
+    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);
+    QVERIFY(returnValue == false);
+    QVERIFY(affectedContactIds.count() == 0);
+    QVERIFY(error == QContactManager::NotSupportedError);
+
+    //save relationships
+    errors = m_relationship->saveRelationships(&affectedContactIds, &relationships, error);
+    QVERIFY(affectedContactIds.count() == 0);
+    for(int i = 0; i < errors.count(); i++){
+        QVERIFY(errors.at(i) == QContactManager::NotSupportedError);
+    }
+
+    //remove relationships
+    errors = m_relationship->removeRelationships(&affectedContactIds, relationships, error);
+    QVERIFY(affectedContactIds.count() == 0);
+    for(int i = 0; i < errors.count(); i++){
+        QVERIFY(errors.at(i) == QContactManager::NotSupportedError);
+    }
+
+    //relationships
+    QList<QContactRelationship> relationshipList;
+    QContactId id;
+
+    relationshipList = m_relationship->relationships(QLatin1String("invalid relationship"), id, QContactRelationshipFilter::Either, error);
+    QVERIFY(relationshipList.count() == 0);
+    QVERIFY(error == QContactManager::NotSupportedError);
+}
+
+/*
+ * Test valid group relationship functionality
+ */
+void TestCntRelationship::validGroupRelationship()
+{
+    //create a group
+    QContact groupContact;
+    groupContact.setType(QContactType::TypeGroup);
+    m_manager->saveContact(&groupContact);
+
+    //create a contact
+    QContact contact;
+    contact.setType(QContactType::TypeContact);
+    m_manager->saveContact(&contact);
+
+    //create relationship
+    QContactRelationship relationship;
+    relationship.setRelationshipType(QContactRelationship::HasMember);
+    relationship.setFirst(groupContact.id());
+    relationship.setSecond(contact.id());
+
+    //save relationship
+    bool returnValue(false);
+    QContactManager::Error error;
+    QSet<QContactLocalId> affectedContactIds;
+    returnValue = m_relationship->saveRelationship(&affectedContactIds, &relationship, error);
+    QVERIFY2(returnValue == true, "save");
+    QVERIFY2(affectedContactIds.count() == 2, "save");
+    QVERIFY2(affectedContactIds.toList().contains(groupContact.localId()), "save");
+    QVERIFY2(affectedContactIds.toList().contains(contact.localId()), "save");
+    QVERIFY2(error == QContactManager::NoError, "save");
+
+    //retrieve the relationships
+    QList<QContactRelationship> relationshipList;
+
+    //Retrive group
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), groupContact.id(), QContactRelationshipFilter::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);
+    QVERIFY2(relationshipList.count() == 0, "group - Second");
+    QVERIFY2(error == QContactManager::NoError, "group - Second");
+
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), groupContact.id(), QContactRelationshipFilter::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);
+    QVERIFY2(relationshipList.count() == 0, "contact - First");
+    QVERIFY2(error == QContactManager::NoError, "contact - First");
+
+    relationshipList = m_relationship->relationships(QLatin1String(QContactRelationship::HasMember), contact.id(), QContactRelationshipFilter::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);
+    QVERIFY2(relationshipList.count() == 1, "contact - Either");
+    QVERIFY2(error == QContactManager::NoError, "contact - Either");   
+    
+    
+    //Validate Filter
+    QList<QContactLocalId> expectedContacts;
+    expectedContacts += contact.localId();
+    QVERIFY(true == validateRelationshipFilter(QContactRelationshipFilter::First, groupContact.id(), expectedContacts));
+    
+    //remove relationship
+    returnValue = m_relationship->removeRelationship(&affectedContactIds, relationship, error);
+    QVERIFY2(returnValue == true, "remove");
+    QVERIFY2(affectedContactIds.count() == 2, "remove");
+    QVERIFY2(affectedContactIds.toList().contains(groupContact.localId()), "remove");
+    QVERIFY2(affectedContactIds.toList().contains(contact.localId()), "remove");
+    QVERIFY2(error == QContactManager::NoError, "remove");
+}
+
+/*
+ * Test valid group relationships
+ */
+void TestCntRelationship::validGroupRelationships()
+{
+}
+
+/*
+ * Test invalid group relationships
+ */
+void TestCntRelationship::invalidGroupRelationship()
+{
+}
+
+/*
+ * Test invalid group passed to grouprelationship functions
+ */
+void TestCntRelationship::invalidFirstContactGroupRelationship()
+{
+    //create a contact
+    QContact contact;
+    contact.setType(QContactType::TypeContact);
+    m_manager->saveContact(&contact);
+
+    //create relationship
+    QContactId invalidId;
+    QContactRelationship relationship;
+    relationship.setRelationshipType(QContactRelationship::HasMember);
+    relationship.setFirst(invalidId);
+    relationship.setSecond(contact.id());
+
+    //save relationship
+    bool returnValue(false);
+    QContactManager::Error error;
+    QSet<QContactLocalId> affectedContactIds;
+    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);
+    QVERIFY(returnValue == false);
+    QVERIFY(affectedContactIds.count() == 0);
+    QVERIFY(error != QContactManager::NoError);
+}
+
+/*
+ * Test invalid group memeber, passed to group relationship functions
+ */
+void TestCntRelationship::invalidSecondContactGroupRelationship()
+{
+    //create a group
+    QContact groupContact;
+    groupContact.setType(QContactType::TypeGroup);
+    m_manager->saveContact(&groupContact);
+
+    //create relationship
+    QContactId invalidId;
+    QContactRelationship relationship;
+    relationship.setRelationshipType(QContactRelationship::HasMember);
+    relationship.setFirst(groupContact.id());
+    relationship.setSecond(invalidId);
+
+    //save relationship
+    bool returnValue(false);
+    QContactManager::Error error;
+    QSet<QContactLocalId> affectedContactIds;
+    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);
+    QVERIFY2(returnValue == false, "remove");
+    QVERIFY2(affectedContactIds.count() == 0, "remove");
+    QVERIFY2(error != QContactManager::NoError, "remove");
+}
+
+/*
+ * Test invalid group and group member, passed to group relationship functions
+ */
+void TestCntRelationship::invalidFirstAndSecondContactGroupRelationship()
+{
+    //create relationship
+    QContactId invalidId;
+    QContactRelationship relationship;
+    relationship.setRelationshipType(QContactRelationship::HasMember);
+    relationship.setFirst(invalidId);
+    relationship.setSecond(invalidId);
+
+    //save relationship
+    bool returnValue(false);
+    QContactManager::Error error;
+    QSet<QContactLocalId> affectedContactIds;
+    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);
+    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)
+    {
+    QContactRelationshipFilter filter;
+    filter.setRelationshipType(QContactRelationship::HasMember);
+    filter.setRelatedContactRole(role);
+    filter.setRelatedContactId(contactId);
+    
+    QList<QContactLocalId> result = m_manager->contactIds(filter);
+    
+    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);
+    
+    return (result == expectedContacts);
+    }
+