logsui/logsengine/tsrc/ut_logsengine/src/ut_logscontact.cpp
changeset 0 4a5361db8937
child 9 68f3171a5819
equal deleted inserted replaced
-1:000000000000 0:4a5361db8937
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 #include "ut_logscontact.h"
       
    18 #include "logscontact.h"
       
    19 #include "logsevent.h"
       
    20 #include "logseventdata.h"
       
    21 #include "logsdbconnector.h"
       
    22 #include "logsdbconnector_stub_helper.h"
       
    23 #include "qtcontacts_stubs_helper.h"
       
    24 
       
    25 #include <xqservicerequest.h>
       
    26 #include <QtTest/QtTest>
       
    27 
       
    28 const int logsContactsLocalIdTest1 = 1;
       
    29 const QString logsFetchService = "com.nokia.services.phonebookservices.Fetch";
       
    30 
       
    31 void UT_LogsContact::initTestCase()
       
    32 {
       
    33     mDbConnector = new LogsDbConnector(mEvents);
       
    34     mLogsContact = 0;
       
    35 }
       
    36 
       
    37 void UT_LogsContact::cleanupTestCase()
       
    38 {
       
    39     delete mDbConnector;
       
    40 }
       
    41 
       
    42 void UT_LogsContact::init()
       
    43 {
       
    44     QtContactsStubsHelper::reset();
       
    45     mLogsEvent = new LogsEvent();
       
    46     LogsEventData* eventData = new LogsEventData;
       
    47     mLogsEvent->setLogsEventData(eventData);
       
    48     mLogsEvent->logsEventData()->setContactLocalId(logsContactsLocalIdTest1);
       
    49     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
    50 }
       
    51 
       
    52 void UT_LogsContact::cleanup()
       
    53 {
       
    54     delete mLogsContact;
       
    55     mLogsContact = 0;
       
    56     delete mLogsEvent;
       
    57     mLogsEvent = 0;
       
    58 }
       
    59 
       
    60 void UT_LogsContact::testConstructor()
       
    61 {
       
    62     QVERIFY( mLogsContact );
       
    63     QVERIFY( !mLogsContact->mService );
       
    64     QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
       
    65     
       
    66     LogsContact contactWithoutEvent("2345", *mDbConnector, 2);
       
    67     QVERIFY( contactWithoutEvent.mContactId == 2 );
       
    68     QVERIFY( contactWithoutEvent.mNumber == "2345" );
       
    69 }
       
    70 
       
    71 void UT_LogsContact::testAllowedRequestType()
       
    72 {
       
    73     //Empty event with no matching contact
       
    74     QVERIFY( mLogsContact );
       
    75     QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactSave );
       
    76     
       
    77     //contact is in phonebook, but matching of contact is done only during
       
    78     //construction of mLogsContact, later changes not reflected
       
    79     mLogsEvent->logsEventData()->setContactLocalId(1);
       
    80     QtContactsStubsHelper::setContactId(1);
       
    81     QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactSave );
       
    82     
       
    83     //contact is in phonebook => open is allowed
       
    84     delete mLogsContact;
       
    85     mLogsContact = 0;
       
    86     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
    87     QVERIFY( mLogsEvent->logsEventData()->contactLocalId() );
       
    88     QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactOpen );
       
    89     
       
    90     //contact not in phonebook, but caller ID present => save allowed
       
    91     QtContactsStubsHelper::reset();
       
    92     delete mLogsContact;
       
    93     mLogsContact = 0;
       
    94     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
    95     QVERIFY( mLogsEvent->logsEventData()->contactLocalId() );
       
    96     mLogsEvent->setNumber( "123" );
       
    97     QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactSave );
       
    98 }
       
    99 
       
   100 void UT_LogsContact::testOpen()
       
   101 {
       
   102     //contact not in phonebook, can't open
       
   103     QVERIFY( !mLogsContact->mService );
       
   104     QVERIFY( !mLogsContact->open() );
       
   105     QVERIFY( !mLogsContact->mService );
       
   106     QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
       
   107 
       
   108     //contact is in phonebook, open is ok
       
   109     mLogsEvent->logsEventData()->setContactLocalId(2);
       
   110     QtContactsStubsHelper::setContactId(2);
       
   111     delete mLogsContact;
       
   112     mLogsContact = 0;
       
   113     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
   114     QVERIFY( mLogsContact->open() );
       
   115     QVERIFY( mLogsContact->mService );
       
   116     QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactOpen );
       
   117     QVERIFY( mLogsContact->mService->service() == logsFetchService );
       
   118     QVERIFY( mLogsContact->mService->message() == "open(int)" );
       
   119     
       
   120     // Same but without using logsevent at construction
       
   121     LogsContact contactWithoutEvent("2345", *mDbConnector, 2);
       
   122     QVERIFY( contactWithoutEvent.open() );
       
   123     QVERIFY( contactWithoutEvent.mService );
       
   124     QVERIFY( contactWithoutEvent.mCurrentRequest == LogsContact::TypeLogsContactOpen );
       
   125     QVERIFY( contactWithoutEvent.mService->service() == logsFetchService );
       
   126     QVERIFY( contactWithoutEvent.mService->message() == "open(int)" );
       
   127     
       
   128 }
       
   129 
       
   130 void UT_LogsContact::testAddNew()
       
   131 {
       
   132     //no caller ID, contact won't be saved
       
   133     mLogsEvent->setEventType(LogsEvent::TypeVoiceCall);
       
   134     QVERIFY( mLogsEvent->getNumberForCalling().isEmpty() );
       
   135     QVERIFY( !mLogsContact->addNew() );
       
   136     QVERIFY( !mLogsContact->mService );
       
   137     QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
       
   138 
       
   139     //called ID present, contact not in phonebook => save is ok
       
   140     mLogsEvent->setNumber(QString::number(12345));
       
   141     mLogsEvent->setEventType(LogsEvent::TypeVoiceCall);
       
   142     delete mLogsContact;
       
   143     mLogsContact = 0;
       
   144     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
   145     QVERIFY( !mLogsEvent->getNumberForCalling().isEmpty() );
       
   146     QVERIFY( !mLogsContact->isContactInPhonebook() );
       
   147     QVERIFY( mLogsContact->addNew() );
       
   148     QVERIFY( mLogsContact->mService );
       
   149     QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
       
   150     QVERIFY( mLogsContact->mService->service() == logsFetchService );
       
   151     QVERIFY( mLogsContact->mService->message() == "editCreateNew(QString,QString)" );
       
   152         
       
   153     //caller ID present, contact is in phonebook => save is ok
       
   154     mLogsEvent->setEventType(LogsEvent::TypeVoIPCall);
       
   155     mLogsEvent->setNumber("");
       
   156     mLogsEvent->logsEventData()->mRemoteUrl = "someurl@blah";
       
   157     mLogsEvent->logsEventData()->setContactLocalId(2);
       
   158     QtContactsStubsHelper::setContactId(2);
       
   159     delete mLogsContact;
       
   160     mLogsContact = 0;
       
   161     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
   162     QVERIFY( mLogsContact->isContactInPhonebook() );
       
   163     QVERIFY( mLogsContact->addNew() );
       
   164     QVERIFY( mLogsContact->mService );
       
   165     QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
       
   166     QVERIFY( mLogsContact->mService->service() == logsFetchService );
       
   167     QVERIFY( mLogsContact->mService->message() == "editCreateNew(QString,QString)" );
       
   168 }
       
   169 
       
   170 void UT_LogsContact::testUpdateExisting()
       
   171 {
       
   172     //caller ID present, contact is in phonebook => update is ok
       
   173     mLogsEvent->setNumber(QString::number(12345));
       
   174     mLogsEvent->setEventType(LogsEvent::TypeVoiceCall);
       
   175     mLogsEvent->logsEventData()->setContactLocalId(2);
       
   176     QtContactsStubsHelper::setContactId(2);
       
   177     delete mLogsContact;
       
   178     mLogsContact = 0;
       
   179     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
   180     QVERIFY( mLogsContact->isContactInPhonebook() );
       
   181     QVERIFY( mLogsContact->updateExisting() );
       
   182     QVERIFY( mLogsContact->mService );
       
   183     QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave );
       
   184     QVERIFY( mLogsContact->mService->service() == logsFetchService );
       
   185     QVERIFY( mLogsContact->mService->message() == "editUpdateExisting(QString,QString)" );
       
   186 }
       
   187 
       
   188 void UT_LogsContact::testIsContactInPhonebook()
       
   189 {
       
   190     QVERIFY( !mLogsContact->isContactInPhonebook() );
       
   191     
       
   192     //any changes in phonebook after mLogsContact creation are not reflected
       
   193     mLogsEvent->logsEventData()->setContactLocalId(2);
       
   194     QtContactsStubsHelper::setContactId(2);
       
   195     QVERIFY( !mLogsContact->isContactInPhonebook() );
       
   196     
       
   197     delete mLogsContact;
       
   198     mLogsContact = 0;
       
   199     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
   200     QVERIFY( mLogsContact->isContactInPhonebook() );
       
   201     
       
   202     // 0 is not valid contact ID
       
   203     mLogsEvent->logsEventData()->setContactLocalId(0);
       
   204     QtContactsStubsHelper::setContactId(0);
       
   205     delete mLogsContact;
       
   206     mLogsContact = 0;
       
   207     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
   208     QVERIFY( !mLogsContact->isContactInPhonebook() );
       
   209 }
       
   210 
       
   211 void UT_LogsContact::testIsContactRequestAllowed()
       
   212 {
       
   213     // contact not in phonebook, caller ID not defined
       
   214     QVERIFY( !mLogsContact->isContactInPhonebook() );
       
   215     QVERIFY( mLogsEvent->number().isEmpty() );
       
   216     QVERIFY( mLogsEvent->logsEventData()->remoteUrl().isEmpty() );
       
   217     QVERIFY( !mLogsContact->isContactRequestAllowed() );
       
   218     
       
   219     // caller ID is defined, number
       
   220     mLogsEvent->setNumber( "1234" );
       
   221     delete mLogsContact;
       
   222     mLogsContact = 0;
       
   223     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
   224     QVERIFY( mLogsContact->isContactRequestAllowed() );
       
   225     
       
   226     // caller ID is defined, voip url
       
   227     mLogsEvent->setNumber( "" );
       
   228     mLogsEvent->logsEventData()->mRemoteUrl = "blah";
       
   229     mLogsEvent->setEventType( LogsEvent::TypeVoIPCall );
       
   230     delete mLogsContact;
       
   231     mLogsContact = 0;
       
   232     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
   233     QVERIFY( mLogsContact->isContactRequestAllowed() );
       
   234 
       
   235     // No caller ID, but contact is in phonebook
       
   236     mLogsEvent->logsEventData()->mRemoteUrl = "";
       
   237     mLogsEvent->logsEventData()->setContactLocalId(1);
       
   238     QtContactsStubsHelper::setContactId(1);
       
   239     delete mLogsContact;
       
   240     mLogsContact = 0;
       
   241     mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector);
       
   242     QVERIFY( mLogsContact->isContactRequestAllowed() );
       
   243 }
       
   244 
       
   245 void UT_LogsContact::testHandleRequestCompeted()
       
   246 {
       
   247     QSignalSpy spyOpened( mLogsContact, SIGNAL(openCompleted(bool)) );
       
   248     QSignalSpy spySaved( mLogsContact, SIGNAL(saveCompleted(bool)) );
       
   249 
       
   250     //open operation finished
       
   251     LogsDbConnectorStubHelper::reset();
       
   252     mLogsContact->mCurrentRequest = LogsContact::TypeLogsContactOpen;
       
   253     mLogsContact->handleRequestCompleted( QVariant(1) );
       
   254     QVERIFY( spyOpened.count() == 1 );
       
   255     QVERIFY( spySaved.count() == 0 );
       
   256     QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction() == "updateDetails" );
       
   257         
       
   258     //save operation finished successfully
       
   259     LogsDbConnectorStubHelper::reset();
       
   260     spyOpened.clear();
       
   261     spySaved.clear();
       
   262     mLogsContact->mCurrentRequest = LogsContact::TypeLogsContactSave;
       
   263     mLogsContact->handleRequestCompleted( QVariant(1) );
       
   264     QVERIFY( spyOpened.count() == 0 );
       
   265     QVERIFY( spySaved.count() == 1 );
       
   266     QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction() == "updateDetails" );
       
   267     
       
   268     //save operation finished unsuccessfully
       
   269     LogsDbConnectorStubHelper::reset();
       
   270     spyOpened.clear();
       
   271     spySaved.clear();
       
   272     mLogsContact->mCurrentRequest = LogsContact::TypeLogsContactSave;
       
   273     mLogsContact->handleRequestCompleted( QVariant(0) );
       
   274     QVERIFY( spyOpened.count() == 0 );
       
   275     QVERIFY( spySaved.count() == 1 );
       
   276     QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction().isEmpty() );    
       
   277 }