logsui/logsengine/tsrc/ut_logsengine/src/ut_logscontact.cpp
changeset 0 4a5361db8937
child 9 68f3171a5819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logscontact.cpp	Tue May 04 12:39:37 2010 +0300
@@ -0,0 +1,277 @@
+/*
+* 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 "ut_logscontact.h"
+#include "logscontact.h"
+#include "logsevent.h"
+#include "logseventdata.h"
+#include "logsdbconnector.h"
+#include "logsdbconnector_stub_helper.h"
+#include "qtcontacts_stubs_helper.h"
+
+#include <xqservicerequest.h>
+#include <QtTest/QtTest>
+
+const int logsContactsLocalIdTest1 = 1;
+const QString logsFetchService = "com.nokia.services.phonebookservices.Fetch";
+
+void UT_LogsContact::initTestCase()
+{
+    mDbConnector = new LogsDbConnector(mEvents);
+    mLogsContact = 0;
+}
+
+void UT_LogsContact::cleanupTestCase()
+{
+    delete mDbConnector;
+}
+
+void UT_LogsContact::init()
+{
+    QtContactsStubsHelper::reset();
+    mLogsEvent = new LogsEvent();
+    LogsEventData* eventData = new LogsEventData;
+    mLogsEvent->setLogsEventData(eventData);
+    mLogsEvent->logsEventData()->setContactLocalId(logsContactsLocalIdTest1);
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+}
+
+void UT_LogsContact::cleanup()
+{
+    delete mLogsContact;
+    mLogsContact = 0;
+    delete mLogsEvent;
+    mLogsEvent = 0;
+}
+
+void UT_LogsContact::testConstructor()
+{
+    QVERIFY( mLogsContact );
+    QVERIFY( !mLogsContact->mService );
+    QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
+    
+    LogsContact contactWithoutEvent("2345", *mDbConnector, 2);
+    QVERIFY( contactWithoutEvent.mContactId == 2 );
+    QVERIFY( contactWithoutEvent.mNumber == "2345" );
+}
+
+void UT_LogsContact::testAllowedRequestType()
+{
+    //Empty event with no matching contact
+    QVERIFY( mLogsContact );
+    QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactSave );
+    
+    //contact is in phonebook, but matching of contact is done only during
+    //construction of mLogsContact, later changes not reflected
+    mLogsEvent->logsEventData()->setContactLocalId(1);
+    QtContactsStubsHelper::setContactId(1);
+    QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactSave );
+    
+    //contact is in phonebook => open is allowed
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( mLogsEvent->logsEventData()->contactLocalId() );
+    QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactOpen );
+    
+    //contact not in phonebook, but caller ID present => save allowed
+    QtContactsStubsHelper::reset();
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( mLogsEvent->logsEventData()->contactLocalId() );
+    mLogsEvent->setNumber( "123" );
+    QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactSave );
+}
+
+void UT_LogsContact::testOpen()
+{
+    //contact not in phonebook, can't open
+    QVERIFY( !mLogsContact->mService );
+    QVERIFY( !mLogsContact->open() );
+    QVERIFY( !mLogsContact->mService );
+    QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
+
+    //contact is in phonebook, open is ok
+    mLogsEvent->logsEventData()->setContactLocalId(2);
+    QtContactsStubsHelper::setContactId(2);
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( mLogsContact->open() );
+    QVERIFY( mLogsContact->mService );
+    QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactOpen );
+    QVERIFY( mLogsContact->mService->service() == logsFetchService );
+    QVERIFY( mLogsContact->mService->message() == "open(int)" );
+    
+    // Same but without using logsevent at construction
+    LogsContact contactWithoutEvent("2345", *mDbConnector, 2);
+    QVERIFY( contactWithoutEvent.open() );
+    QVERIFY( contactWithoutEvent.mService );
+    QVERIFY( contactWithoutEvent.mCurrentRequest == LogsContact::TypeLogsContactOpen );
+    QVERIFY( contactWithoutEvent.mService->service() == logsFetchService );
+    QVERIFY( contactWithoutEvent.mService->message() == "open(int)" );
+    
+}
+
+void UT_LogsContact::testAddNew()
+{
+    //no caller ID, contact won't be saved
+    mLogsEvent->setEventType(LogsEvent::TypeVoiceCall);
+    QVERIFY( mLogsEvent->getNumberForCalling().isEmpty() );
+    QVERIFY( !mLogsContact->addNew() );
+    QVERIFY( !mLogsContact->mService );
+    QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
+
+    //called ID present, contact not in phonebook => save is ok
+    mLogsEvent->setNumber(QString::number(12345));
+    mLogsEvent->setEventType(LogsEvent::TypeVoiceCall);
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( !mLogsEvent->getNumberForCalling().isEmpty() );
+    QVERIFY( !mLogsContact->isContactInPhonebook() );
+    QVERIFY( mLogsContact->addNew() );
+    QVERIFY( mLogsContact->mService );
+    QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
+    QVERIFY( mLogsContact->mService->service() == logsFetchService );
+    QVERIFY( mLogsContact->mService->message() == "editCreateNew(QString,QString)" );
+        
+    //caller ID present, contact is in phonebook => save is ok
+    mLogsEvent->setEventType(LogsEvent::TypeVoIPCall);
+    mLogsEvent->setNumber("");
+    mLogsEvent->logsEventData()->mRemoteUrl = "someurl@blah";
+    mLogsEvent->logsEventData()->setContactLocalId(2);
+    QtContactsStubsHelper::setContactId(2);
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( mLogsContact->isContactInPhonebook() );
+    QVERIFY( mLogsContact->addNew() );
+    QVERIFY( mLogsContact->mService );
+    QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
+    QVERIFY( mLogsContact->mService->service() == logsFetchService );
+    QVERIFY( mLogsContact->mService->message() == "editCreateNew(QString,QString)" );
+}
+
+void UT_LogsContact::testUpdateExisting()
+{
+    //caller ID present, contact is in phonebook => update is ok
+    mLogsEvent->setNumber(QString::number(12345));
+    mLogsEvent->setEventType(LogsEvent::TypeVoiceCall);
+    mLogsEvent->logsEventData()->setContactLocalId(2);
+    QtContactsStubsHelper::setContactId(2);
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( mLogsContact->isContactInPhonebook() );
+    QVERIFY( mLogsContact->updateExisting() );
+    QVERIFY( mLogsContact->mService );
+    QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
+    QVERIFY( mLogsContact->mService->service() == logsFetchService );
+    QVERIFY( mLogsContact->mService->message() == "editUpdateExisting(QString,QString)" );
+}
+
+void UT_LogsContact::testIsContactInPhonebook()
+{
+    QVERIFY( !mLogsContact->isContactInPhonebook() );
+    
+    //any changes in phonebook after mLogsContact creation are not reflected
+    mLogsEvent->logsEventData()->setContactLocalId(2);
+    QtContactsStubsHelper::setContactId(2);
+    QVERIFY( !mLogsContact->isContactInPhonebook() );
+    
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( mLogsContact->isContactInPhonebook() );
+    
+    // 0 is not valid contact ID
+    mLogsEvent->logsEventData()->setContactLocalId(0);
+    QtContactsStubsHelper::setContactId(0);
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( !mLogsContact->isContactInPhonebook() );
+}
+
+void UT_LogsContact::testIsContactRequestAllowed()
+{
+    // contact not in phonebook, caller ID not defined
+    QVERIFY( !mLogsContact->isContactInPhonebook() );
+    QVERIFY( mLogsEvent->number().isEmpty() );
+    QVERIFY( mLogsEvent->logsEventData()->remoteUrl().isEmpty() );
+    QVERIFY( !mLogsContact->isContactRequestAllowed() );
+    
+    // caller ID is defined, number
+    mLogsEvent->setNumber( "1234" );
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( mLogsContact->isContactRequestAllowed() );
+    
+    // caller ID is defined, voip url
+    mLogsEvent->setNumber( "" );
+    mLogsEvent->logsEventData()->mRemoteUrl = "blah";
+    mLogsEvent->setEventType( LogsEvent::TypeVoIPCall );
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( mLogsContact->isContactRequestAllowed() );
+
+    // No caller ID, but contact is in phonebook
+    mLogsEvent->logsEventData()->mRemoteUrl = "";
+    mLogsEvent->logsEventData()->setContactLocalId(1);
+    QtContactsStubsHelper::setContactId(1);
+    delete mLogsContact;
+    mLogsContact = 0;
+    mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
+    QVERIFY( mLogsContact->isContactRequestAllowed() );
+}
+
+void UT_LogsContact::testHandleRequestCompeted()
+{
+    QSignalSpy spyOpened( mLogsContact, SIGNAL(openCompleted(bool)) );
+    QSignalSpy spySaved( mLogsContact, SIGNAL(saveCompleted(bool)) );
+
+    //open operation finished
+    LogsDbConnectorStubHelper::reset();
+    mLogsContact->mCurrentRequest = LogsContact::TypeLogsContactOpen;
+    mLogsContact->handleRequestCompleted( QVariant(1) );
+    QVERIFY( spyOpened.count() == 1 );
+    QVERIFY( spySaved.count() == 0 );
+    QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction() == "updateDetails" );
+        
+    //save operation finished successfully
+    LogsDbConnectorStubHelper::reset();
+    spyOpened.clear();
+    spySaved.clear();
+    mLogsContact->mCurrentRequest = LogsContact::TypeLogsContactSave;
+    mLogsContact->handleRequestCompleted( QVariant(1) );
+    QVERIFY( spyOpened.count() == 0 );
+    QVERIFY( spySaved.count() == 1 );
+    QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction() == "updateDetails" );
+    
+    //save operation finished unsuccessfully
+    LogsDbConnectorStubHelper::reset();
+    spyOpened.clear();
+    spySaved.clear();
+    mLogsContact->mCurrentRequest = LogsContact::TypeLogsContactSave;
+    mLogsContact->handleRequestCompleted( QVariant(0) );
+    QVERIFY( spyOpened.count() == 0 );
+    QVERIFY( spySaved.count() == 1 );
+    QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction().isEmpty() );    
+}