emailservices/nmutilities/tsrc/unittests/unittest_nmcontacthistorymodel_p/unittest_nmcontacthistorymodel_p.cpp
changeset 68 83cc6bae1de8
child 74 6c59112cfd31
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmutilities/tsrc/unittests/unittest_nmcontacthistorymodel_p/unittest_nmcontacthistorymodel_p.cpp	Wed Sep 15 12:09:55 2010 +0300
@@ -0,0 +1,476 @@
+/*
+* 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:
+*
+*/
+
+#include "qtcontacts.h"
+#include "nmcontacthistorymodel.h"
+
+#include "nmcontacthistorymodel_p.h"
+#include "unittest_nmcontacthistorymodel_p.h"
+
+Q_DEFINE_LATIN1_CONSTANT(QContactEmailAddress::FieldEmailAddress, "EmailAddress");
+Q_DEFINE_LATIN1_CONSTANT(QContactName::DefinitionName, "Name");
+Q_DEFINE_LATIN1_CONSTANT(QContactEmailAddress::DefinitionName, "EmailAddress");
+Q_DEFINE_LATIN1_CONSTANT(QContactName::FieldFirstName, "FirstName");
+Q_DEFINE_LATIN1_CONSTANT(QContactName::FieldLastName, "LastName");
+
+bool constructorCalled;
+bool destructorCalled;
+bool entryCountCalled;
+bool getEntryCalled;
+bool nameOrderCalled;
+
+bool setDetailDefinitionNameCalled;
+bool setMatchFlagsCalled;
+bool setValueCalled;
+bool ContactIdsCalled;
+
+bool fillMruWithFalseValues;
+bool returnZeroEmails;
+
+// -----------------------------------------------------------------------------
+// initTestCase
+// -----------------------------------------------------------------------------
+//
+void TestNmContactHistoryModelPrivate::initTestCase()
+{
+    // Put some allied forces operation names in to array for testing.
+    mTestNames << "Oatmeal" << "Olive" << "Olympic" << "Open Door" << "Opium" <<
+    "Orange" << "Oration" << "Outflank" << "Overlord" << "Overthrow";
+}
+
+// -----------------------------------------------------------------------------
+// init
+// -----------------------------------------------------------------------------
+//
+void TestNmContactHistoryModelPrivate::init()
+{
+    constructorCalled = false;
+    destructorCalled = false;
+    entryCountCalled = false;
+    getEntryCalled = false;
+    nameOrderCalled = false;
+
+    setDetailDefinitionNameCalled = false;
+    setMatchFlagsCalled = false;
+    setValueCalled = false;
+    ContactIdsCalled = false;
+
+    fillMruWithFalseValues = false;
+    returnZeroEmails = false;
+
+    mTestObject = 0;
+    mSignalEmitted = false;
+    mTestObject = new NmContactHistoryModelPrivate(EmailAddressModel);
+
+    QVERIFY(mTestObject);
+
+    mTestObject->mModelReady = false;
+}
+
+// -----------------------------------------------------------------------------
+// cleanup
+// -----------------------------------------------------------------------------
+//
+void TestNmContactHistoryModelPrivate::cleanup()
+{
+    if(mTestObject)
+    {
+        delete mTestObject;
+        mTestObject = 0;
+    }
+}
+
+// -----------------------------------------------------------------------------
+// cleanupTestCase
+// -----------------------------------------------------------------------------
+//
+
+void TestNmContactHistoryModelPrivate::cleanupTestCase()
+{
+    mTestNames.clear();
+}
+
+void TestNmContactHistoryModelPrivate::test_queryMruDatabase() // Ready
+{
+    /* Email MRU Stub will always return following values:
+       (if fillMruWithFalseValue == true)
+
+    displayName = ""; [0]
+    address = "camel.case@plusplus.com";
+
+    displayName = "Agent Plus"; [1]
+    address = "plus@plusplus.com";
+
+    displayName = "Agent Smith"; [2]
+    address = "noreply@mib.com"; */
+
+    mTestObject->mMruMatches.clear();
+    mTestObject->mMruList.clear();
+
+    QVERIFY(mTestObject->mMruMatches.count() == 0);
+
+    // Test query with empty string
+    fillMruWithFalseValues = true;
+
+    bool rValue = mTestObject->queryMruDatabase(QString());
+
+    QVERIFY( entryCountCalled );
+    QVERIFY( getEntryCalled );
+    QVERIFY( rValue );
+
+    //TODO: Fix the "bug"
+    //QVERIFY(mTestObject->mMruMatches.count() == 0);
+
+    // Test query with no display name
+    // and using the start of the email as display name
+    mTestObject->mMruMatches.clear();
+    mTestObject->mMruList.clear();
+
+    rValue = mTestObject->queryMruDatabase("Camel");
+    QVERIFY( rValue );
+
+    rValue = mTestObject->mMruMatches.contains("camel.case");
+    QVERIFY( rValue );
+
+    QVERIFY(mTestObject->mMruMatches.count() == 1);
+
+    // Test query with match in email
+
+    mTestObject->mMruMatches.clear();
+    mTestObject->mMruList.clear();
+
+    rValue = mTestObject->queryMruDatabase("noReply");
+
+    QVERIFY( rValue );
+    rValue = mTestObject->mMruMatches.contains("camel.case");
+    QVERIFY(mTestObject->mMruMatches.count() == 1);
+}
+
+void TestNmContactHistoryModelPrivate::test_queryContactDatabase() // Ready.
+{
+    QVERIFY(mTestObject->mModelItemList.count() == 0);
+    QVERIFY(mTestObject->mPrivateItemList.count() == 0);
+
+    QList<QContactLocalId> rValues;
+
+    rValues = mTestObject->queryContactDatabase("MATRIX");
+
+    QVERIFY( setDetailDefinitionNameCalled );
+    QVERIFY( setMatchFlagsCalled );
+    QVERIFY( setValueCalled );
+    QVERIFY( ContactIdsCalled );
+
+    QVERIFY( rValues.contains(12) );
+    QVERIFY( rValues.contains(24) );
+    QVERIFY( rValues.contains(48) );
+
+}
+
+void TestNmContactHistoryModelPrivate::test_populateListWithMruItems() // Ready
+{
+    QVERIFY(mTestObject->mModelItemList.count() == 0);
+    QVERIFY(mTestObject->mPrivateItemList.count() == 0);
+
+    mTestObject->mMruMatches.clear();
+
+    //MRU (key = name, value = address);
+    mTestObject->mMruMatches.insert("Test Name","name@test.com");
+    mTestObject->mMruMatches.insert("Tset Eman","eman@tset.com");
+    mTestObject->mMruMatches.insert("Tset, Tset","test@name.com");
+
+    mTestObject->populateListWithMruItems("Name");
+
+    QVERIFY( mTestObject->mPrivateItemList.count() == 1 );
+
+    QSharedPointer<NmContactHistoryModelItemData> itemData = mTestObject->mPrivateItemList[0];
+    QVERIFY( itemData->mItems[0].mMatchingRanges.count() == 2 );
+    QVERIFY( itemData->mItems[1].mMatchingRanges.count() == 2 );
+
+    QString dbgString = itemData->mItems[0].mItemText;
+
+    int markup1Start = itemData->mItems[0].mMatchingRanges[0];
+    int markup1Stop = itemData->mItems[0].mMatchingRanges[1];
+
+    int markup2Start = itemData->mItems[1].mMatchingRanges[0];
+    int markup2Stop = itemData->mItems[1].mMatchingRanges[1];
+
+    QVERIFY( markup1Start == 5 );
+    QVERIFY( markup1Stop == 8 );
+
+    QVERIFY( markup2Start == 0 );
+    QVERIFY( markup2Stop == 3 );
+
+    // Second Test (Double markup in the name + no email match)
+    mTestObject->mPrivateItemList.clear();
+    mTestObject->populateListWithMruItems("Tset");
+
+    QVERIFY( mTestObject->mPrivateItemList.count() == 2 );
+
+    itemData = mTestObject->mPrivateItemList[1];
+    QVERIFY( itemData->mItems[0].mMatchingRanges.count() == 4 );
+    QVERIFY( itemData->mItems[1].mMatchingRanges.count() == 0 );
+
+    dbgString = itemData->mItems[0].mItemText;
+
+    markup1Start = itemData->mItems[0].mMatchingRanges[0];
+    markup1Stop = itemData->mItems[0].mMatchingRanges[1];
+
+    markup2Start = itemData->mItems[0].mMatchingRanges[2];
+    markup2Stop = itemData->mItems[0].mMatchingRanges[3];
+
+    QVERIFY( markup1Start == 0 );
+    QVERIFY( markup1Stop == 3 );
+
+    QVERIFY( markup2Start == 6 );
+    QVERIFY( markup2Stop == 9 );
+}
+
+void TestNmContactHistoryModelPrivate::test_populateListWithContactItems() // Ready
+{
+    QVERIFY(mTestObject->mModelItemList.count() == 0);
+    QVERIFY(mTestObject->mPrivateItemList.count() == 0);
+
+    QList<QContactLocalId> cnt_ids;
+    cnt_ids.append(12);
+
+    // Match in first name.
+    mTestObject->populateListWithContactItems(cnt_ids, "First");
+    QVERIFY( mTestObject->mPrivateItemList.count() == 1 );
+    QSharedPointer<NmContactHistoryModelItemData> itemData = mTestObject->mPrivateItemList[0];
+    QVERIFY( itemData->mItems[0].mMatchingRanges.count() == 2 );
+    QString dbgString = itemData->mItems[0].mItemText;
+
+    int markup1Start = itemData->mItems[0].mMatchingRanges[0];
+    int markup1Stop = itemData->mItems[0].mMatchingRanges[1];
+
+    QVERIFY( markup1Start == 0 );
+    QVERIFY( markup1Stop == 4 );
+
+    mTestObject->mPrivateItemList.clear();
+
+    // Match in last name.
+    mTestObject->populateListWithContactItems(cnt_ids, "Last");
+
+    QVERIFY( mTestObject->mPrivateItemList.count() == 1 );
+    itemData = mTestObject->mPrivateItemList[0];
+    QVERIFY( itemData->mItems[0].mMatchingRanges.count() == 2 );
+    dbgString = itemData->mItems[0].mItemText;
+
+    markup1Start = itemData->mItems[0].mMatchingRanges[0];
+    markup1Stop = itemData->mItems[0].mMatchingRanges[1];
+
+    QVERIFY( markup1Start == 10 );
+    QVERIFY( markup1Stop == 13 );
+
+    mTestObject->mPrivateItemList.clear();
+
+    // Match in email.
+    mTestObject->populateListWithContactItems(cnt_ids, "Email");
+    QVERIFY( mTestObject->mPrivateItemList.count() == 1 );
+    itemData = mTestObject->mPrivateItemList[0];
+    QVERIFY( itemData->mItems[1].mMatchingRanges.count() == 2 );
+    dbgString = itemData->mItems[1].mItemText;
+
+    markup1Start = itemData->mItems[1].mMatchingRanges[0];
+    markup1Stop = itemData->mItems[1].mMatchingRanges[1];
+
+    QVERIFY( markup1Start == 0 );
+    QVERIFY( markup1Stop == 4 );
+
+    mTestObject->mPrivateItemList.clear();
+
+    // No emails.
+    returnZeroEmails = true;
+    mTestObject->populateListWithContactItems(cnt_ids, "First");
+    QVERIFY( mTestObject->mPrivateItemList.count() == 0 );
+}
+
+void TestNmContactHistoryModelPrivate::test_queryDatabases() // Ready
+{
+    mSignalEmitted = false;
+    QObject::connect(mTestObject, SIGNAL(queryCompleted(int)), this, SLOT(handleQueryCompleted(int)));
+
+    mTestObject->queryDatabases("Agent");
+
+    QVERIFY( mSignalEmitted );
+
+    QVERIFY( mTestObject->mMruMatches.count() == 1 );
+    QVERIFY( mTestObject->mPrivateItemList.count() == 1 );
+
+    QVERIFY( constructorCalled );
+    QVERIFY( destructorCalled );
+    QVERIFY( entryCountCalled );
+    QVERIFY( getEntryCalled );
+    QVERIFY( nameOrderCalled );
+
+    QVERIFY( setDetailDefinitionNameCalled );
+    QVERIFY( setMatchFlagsCalled );
+    QVERIFY( setValueCalled );
+    QVERIFY( ContactIdsCalled );
+}
+
+void TestNmContactHistoryModelPrivate::refreshDataModel() // Ready
+{
+    mTestObject->mPrivateItemList.clear();
+
+    QVERIFY(mTestObject->mModelItemList.count() == 0);
+    QVERIFY(mTestObject->mPrivateItemList.count() == 0);
+
+    QSharedPointer<NmContactHistoryModelItemData> itemData (new NmContactHistoryModelItemData);
+
+    // For Display name (ex. John Doe)
+    NmContactHistoryModelSubItem itemSubItem1;
+    // For Email address (ex. john.doe@company.com)
+    NmContactHistoryModelSubItem itemSubItem2;
+
+    itemSubItem1.mItemText = "Test Name";
+    itemSubItem2.mItemText = "test@name.com";
+
+    itemSubItem1.mMatchingRanges.append(0);
+    itemSubItem1.mMatchingRanges.append(itemSubItem1.mItemText.length()-1);
+
+    itemSubItem2.mMatchingRanges.append(0);
+    itemSubItem2.mMatchingRanges.append(itemSubItem2.mItemText.length()-1);
+
+    itemData->mContactId = 12;
+    itemData->mItems.append(itemSubItem1);
+    itemData->mItems.append(itemSubItem2);
+
+    mTestObject->mPrivateItemList.append(itemData);
+
+    mTestObject->refreshDataModel();
+
+    QVERIFY( mTestObject->mModelReady );
+
+    QVERIFY(mTestObject->mPrivateItemList.count() == 1);
+    QVERIFY(mTestObject->mModelItemList.count() == 1);
+
+    QSharedPointer<NmContactHistoryModelItemData> testData1
+    (mTestObject->mPrivateItemList[0]);
+
+//    NmContactHistoryModelItem testData1 = mTestObject->mPrivateItemList[0];
+    NmContactHistoryModelItem testData2 = mTestObject->mModelItemList[0];
+
+    QVERIFY(testData1->mContactId == testData2.contactId());
+    QVERIFY(testData2.subItemCount() == 2);
+
+    NmContactHistoryModelSubItem testItem1 = testData2.subItemAt(0);
+    NmContactHistoryModelSubItem testItem2 = testData2.subItemAt(1);
+
+    QVERIFY( testItem1.mItemText == itemSubItem1.mItemText );
+    QVERIFY( testItem2.mItemText == itemSubItem2.mItemText );
+
+    QVERIFY( testItem1.mMatchingRanges.count() == 2 );
+}
+
+void TestNmContactHistoryModelPrivate::test_rowCount() // Ready
+{
+    QVERIFY(mTestObject->mModelItemList.count() == 0);
+
+    NmContactHistoryModelItem item;
+    item.setContactId(0);
+    mTestObject->mModelItemList.append(item);
+
+    QVERIFY(mTestObject->mModelItemList.count() == 1);
+
+    mTestObject->mModelItemList.clear();
+    QVERIFY(mTestObject->mModelItemList.count() == 0);
+
+}
+
+void TestNmContactHistoryModelPrivate::test_data() // Ready
+{
+    QModelIndex testIndex = QModelIndex();
+    QVariant testVariant = mTestObject->data(testIndex, Qt::DisplayRole);
+    QCOMPARE(testVariant, QVariant());
+
+    for (int i = 0; i < 10; i++)
+    {
+        NmContactHistoryModelItem item;
+        item.setContactId(i);
+        mTestObject->mModelItemList.append(item);
+    }
+
+    mTestObject->mModelItemList.clear();
+}
+
+void TestNmContactHistoryModelPrivate::fillMruMatchList() // Ready
+{
+    mTestObject->mMruList.clear();
+    bool success = mTestObject->fillMruMatchList();
+
+    QVERIFY( constructorCalled );
+    QVERIFY( destructorCalled );
+    QVERIFY( entryCountCalled );
+    QVERIFY( getEntryCalled );
+    QVERIFY( nameOrderCalled );
+
+    QVERIFY( success );
+
+    QVERIFY(mTestObject->mMruList.count() == 2);
+
+    bool containsValue = mTestObject->mMruList.contains("camel.case@plusplus.com");
+    QVERIFY(containsValue);
+
+    containsValue = mTestObject->mMruList.contains("byvalue@plusplus.com");
+    QVERIFY( containsValue );
+}
+
+void TestNmContactHistoryModelPrivate::obeyContactOrder() // Ready
+{
+    QString first = "Test";
+    QString last = "Name";
+
+    // LastNameFirstName
+    mTestObject->mNameOrder = 0;
+    QString resultString = mTestObject->obeyContactOrder(first, last);
+    QVERIFY(resultString == "Name Test");
+
+    // LastNameCommaFirstName
+    mTestObject->mNameOrder = 1;
+    resultString = mTestObject->obeyContactOrder(first, last);
+    QVERIFY(resultString == "Name, Test");
+
+    // FirstNameLastName
+    mTestObject->mNameOrder = 2;
+    resultString = mTestObject->obeyContactOrder(first, last);
+    QVERIFY(resultString == "Test Name");
+
+    // Invalid / Default
+    mTestObject->mNameOrder = 0xDEAD;
+    resultString = mTestObject->obeyContactOrder(first, last);
+    QVERIFY(resultString == "Test Name");
+}
+
+// Signals
+
+void TestNmContactHistoryModelPrivate::test_queryCompleted() // Ready
+{
+    mSignalEmitted = false;
+    QObject::connect(mTestObject, SIGNAL(queryCompleted(int)), this, SLOT(handleQueryCompleted(int)));
+    mTestObject->queryDatabases(QString());
+    QVERIFY( mSignalEmitted );
+}
+
+void TestNmContactHistoryModelPrivate::handleQueryCompleted(int err) // Internal
+{
+   Q_UNUSED(err);
+   mSignalEmitted = true;
+}
+
+QTEST_MAIN(TestNmContactHistoryModelPrivate)
+