logsui/logsengine/tsrc/ut_logsengine/src/ut_logsdetailsmodel.cpp
changeset 0 4a5361db8937
child 13 52d644758b05
child 16 c5af8598d22c
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_logsdetailsmodel.h"
       
    18 #include "logsdetailsmodel.h"
       
    19 #include "logsevent.h"
       
    20 #include "logsdbconnector.h"
       
    21 #include "logscall.h"
       
    22 #include "logscontact.h"
       
    23 #include "logsmessage.h"
       
    24 #include "logseventdata.h"
       
    25 #include "qtcontacts_stubs_helper.h"
       
    26 #include "logsdbconnector_stub_helper.h"
       
    27 #include <hblineedit.h>
       
    28 #include <hbglobal.h>
       
    29 #include <QtTest/QtTest>
       
    30 
       
    31 Q_DECLARE_METATYPE(LogsCall *)
       
    32 Q_DECLARE_METATYPE(LogsMessage *)
       
    33 Q_DECLARE_METATYPE(LogsContact *)
       
    34 
       
    35 const QString testEmpty = "";
       
    36 const QString testDetailsRemoteParty = "Remoteman";
       
    37 const QString testDetailsRemoteNum = "12345566";
       
    38 const QString testDetailsRemoteInfo = "Remoteman";
       
    39 QDateTime testDetailsDateAndTime;
       
    40 const LogsEvent::LogsDirection testDetailsDirection = LogsEvent::DirIn;
       
    41 const LogsEvent::LogsEventType testDetailsEventType = LogsEvent::TypeVoiceCall;
       
    42 const int testDetailsDuration = 2000;
       
    43 const QString testDetailsNumber = "+4152800";
       
    44 
       
    45 void UT_LogsDetailsModel::initTestCase()
       
    46 {
       
    47     
       
    48     mDbConnector = new LogsDbConnector(mEvents);
       
    49 }
       
    50 
       
    51 void UT_LogsDetailsModel::cleanupTestCase()
       
    52 {
       
    53     delete mDbConnector;
       
    54 }
       
    55 
       
    56 
       
    57 void UT_LogsDetailsModel::init()
       
    58 {
       
    59     testDetailsDateAndTime.setTime_t( 3000 );
       
    60     
       
    61     LogsEvent event;
       
    62     event.setRemoteParty( testDetailsRemoteParty );
       
    63     event.setNumber( testDetailsRemoteNum );
       
    64     event.setTime( testDetailsDateAndTime );
       
    65     event.setDirection( testDetailsDirection );
       
    66     event.setEventType( testDetailsEventType );
       
    67     event.setDuration( testDetailsDuration );
       
    68     mModel = new LogsDetailsModel(*mDbConnector, event);
       
    69 }
       
    70 
       
    71 void UT_LogsDetailsModel::cleanup()
       
    72 {
       
    73     delete mModel;
       
    74     mModel = 0;
       
    75 }
       
    76 
       
    77 void UT_LogsDetailsModel::testConstructor()
       
    78 {
       
    79     QVERIFY( mModel );
       
    80 }
       
    81 
       
    82 void UT_LogsDetailsModel::testRowCount()
       
    83 {
       
    84     QVERIFY( mModel->rowCount(QModelIndex()) == 5 );
       
    85 }
       
    86 
       
    87 void UT_LogsDetailsModel::testgetNumberToClipboard()
       
    88 {
       
    89     HbLineEdit *cliptmp2 = new HbLineEdit(" ");
       
    90     
       
    91     cliptmp2->setText(" ");
       
    92     cliptmp2->selectAll();
       
    93     cliptmp2->copy();
       
    94      
       
    95     mModel->getNumberToClipboard();
       
    96     
       
    97     cliptmp2->setText(" ");
       
    98     cliptmp2->paste();
       
    99     
       
   100     QVERIFY( cliptmp2->text() == testDetailsRemoteNum  );
       
   101     delete cliptmp2;
       
   102 }
       
   103 
       
   104 void UT_LogsDetailsModel::testData()
       
   105 {
       
   106     QVERIFY( mModel->data(QModelIndex(), Qt::DisplayRole).isNull() );
       
   107     
       
   108     // Test remote party info
       
   109     QStringList display = mModel->data(mModel->index(0), Qt::DisplayRole).toStringList();
       
   110     QVERIFY( display.count() == 2 );
       
   111     QVERIFY( display.at(1) == testDetailsRemoteNum );  
       
   112     QList<QVariant> decoration = mModel->data(mModel->index(0), Qt::DecorationRole).toList();
       
   113     QVERIFY( decoration.count() == 1 );
       
   114     
       
   115     // Test date and time
       
   116     display = mModel->data(mModel->index(1), Qt::DisplayRole).toStringList();
       
   117     QVERIFY( display.count() == 2 );
       
   118     QVERIFY( display.at(1) == testDetailsDateAndTime.toTimeSpec(Qt::LocalTime).toString() ); 
       
   119     decoration = mModel->data(mModel->index(1), Qt::DecorationRole).toList();
       
   120     QVERIFY( decoration.count() == 1 );
       
   121     
       
   122     // Test call direction
       
   123     display = mModel->data(mModel->index(2), Qt::DisplayRole).toStringList();
       
   124     QVERIFY( display.count() == 2 );
       
   125     QVERIFY( display.at(1) == mModel->mEvent->directionAsString() );
       
   126     decoration = mModel->data(mModel->index(2), Qt::DecorationRole).toList();
       
   127     QVERIFY( decoration.count() == 1 );
       
   128     
       
   129     // Test call type
       
   130     display = mModel->data(mModel->index(3), Qt::DisplayRole).toStringList();
       
   131     QVERIFY( display.count() == 2 );
       
   132     QVERIFY( display.at(1) == mModel->mEvent->typeAsString() );
       
   133     decoration = mModel->data(mModel->index(3), Qt::DecorationRole).toList();
       
   134     QVERIFY( decoration.count() == 1 );
       
   135     
       
   136     // Test call duration
       
   137     display = mModel->data(mModel->index(4), Qt::DisplayRole).toStringList();
       
   138     QVERIFY( display.count() == 2 );
       
   139     QTime n(0,0,0);
       
   140     QTime t = n.addSecs(testDetailsDuration);
       
   141     QVERIFY( display.at(1) == t.toString("hh:mm:ss") );
       
   142     decoration = mModel->data(mModel->index(4), Qt::DecorationRole).toList();
       
   143     QVERIFY( decoration.count() == 1 );
       
   144     
       
   145     // Test call, event type supports call
       
   146     QVariant callData = mModel->data(mModel->index(0), LogsDetailsModel::RoleCall);
       
   147     LogsCall *call = qVariantValue<LogsCall *>( callData );
       
   148     QVERIFY( call );
       
   149     delete call;
       
   150     
       
   151     // Test call, event type does not support call
       
   152     mModel->mEvent->setEventType(LogsEvent::TypeUndefined);
       
   153     QVariant callData2 = mModel->data(mModel->index(0), LogsDetailsModel::RoleCall);
       
   154     LogsCall *call2 = qVariantValue<LogsCall *>( callData2 );
       
   155     QVERIFY( !call2 );
       
   156     
       
   157     // Test message
       
   158     QVariant messageData = mModel->data(mModel->index(0), LogsDetailsModel::RoleMessage);
       
   159     LogsMessage* message = qVariantValue<LogsMessage *>( messageData );
       
   160     QVERIFY( message != 0 );
       
   161     delete message;
       
   162     LogsEventData* eventData = new LogsEventData;
       
   163     eventData->mRemoteUrl = "test@1.2.3.4";
       
   164     mModel->mEvent->setLogsEventData( eventData );
       
   165     QVariant messageData2 = mModel->data(mModel->index(0), LogsDetailsModel::RoleMessage);
       
   166     LogsMessage* message2 = qVariantValue<LogsMessage *>( messageData2 );
       
   167     QVERIFY( message2 == 0 );
       
   168     
       
   169     // Contact supported
       
   170     QVERIFY( mModel->mEvent->getNumberForCalling().length() > 0 );
       
   171     QVariant contactData = mModel->data(mModel->index(0), LogsDetailsModel::RoleContact);
       
   172     LogsContact *contact = qVariantValue<LogsContact *>( contactData );
       
   173     QVERIFY( contact );
       
   174     delete contact;
       
   175     
       
   176     // Contact not supported
       
   177     mModel->mEvent->setNumber("");
       
   178     mModel->mEvent->setLogsEventData( 0 );
       
   179     contactData = mModel->data(mModel->index(0), LogsModel::RoleContact);
       
   180     contact = qVariantValue<LogsContact *>( contactData );
       
   181     QVERIFY( !contact );
       
   182 }
       
   183 
       
   184 void UT_LogsDetailsModel::testHeaderData()
       
   185 {
       
   186     QCOMPARE(mModel->headerData(0, Qt::Vertical).toString(),
       
   187              testDetailsRemoteInfo);
       
   188     QVERIFY(mModel->headerData(0, Qt::Vertical, Qt::DecorationRole).isNull());
       
   189 }
       
   190 
       
   191 void UT_LogsDetailsModel::testgetRemoteUri()
       
   192 {
       
   193     LogsEvent event;
       
   194     QVERIFY( mModel->getRemoteUri(event) == QString("") );
       
   195     LogsEventData* eventData = new LogsEventData;
       
   196     eventData->mRemoteUrl = "test@1.2.3.4";
       
   197     mModel->mEvent->setLogsEventData( eventData );
       
   198     QVERIFY( mModel->getRemoteUri(*mModel->mEvent) == QString("test@1.2.3.4") );
       
   199 }
       
   200 
       
   201 void UT_LogsDetailsModel::testInitTextsAndIcons()
       
   202 {
       
   203     //No VoIP call,no remote url or local url and contactname
       
   204     testDetailsDateAndTime.setTime_t( 3000 );
       
   205     LogsEvent event;
       
   206     event.setRemoteParty( testDetailsRemoteParty );
       
   207     event.setNumber( testDetailsRemoteNum );
       
   208     event.setTime( testDetailsDateAndTime );
       
   209     event.setDirection( testDetailsDirection );
       
   210     event.setEventType( testDetailsEventType );
       
   211     event.setDuration( testDetailsDuration );
       
   212     LogsDetailsModel* model = new LogsDetailsModel(*mDbConnector, event);
       
   213     QVERIFY(model->mDetailIcons.count() == 5);
       
   214     QVERIFY(model->mDetailTexts.count() == 5);
       
   215     delete model;
       
   216     model = 0;
       
   217     
       
   218     //No VoIP call,no remote url or local url and no contactname
       
   219     testDetailsDateAndTime.setTime_t( 3000 );
       
   220     event.setRemoteParty( testEmpty );
       
   221     event.setNumber( testDetailsRemoteNum );
       
   222     event.setTime( testDetailsDateAndTime );
       
   223     event.setDirection( testDetailsDirection );
       
   224     event.setEventType( testDetailsEventType );
       
   225     event.setDuration( testDetailsDuration );
       
   226     model = new LogsDetailsModel(*mDbConnector, event);
       
   227     QVERIFY(model->mDetailIcons.count() == 4);
       
   228     QVERIFY(model->mDetailTexts.count() == 4);
       
   229     delete model;
       
   230     model = 0;
       
   231     
       
   232     //VoIP call,only remote url,no contact name
       
   233     testDetailsDateAndTime.setTime_t( 3000 );
       
   234     event.setRemoteParty( testEmpty );
       
   235     event.setNumber( testEmpty );
       
   236     event.setTime( testDetailsDateAndTime );
       
   237     event.setDirection( testDetailsDirection );
       
   238     event.setEventType( testDetailsEventType );
       
   239     event.setDuration( testDetailsDuration );
       
   240     LogsEventData* eventData = new LogsEventData;
       
   241     eventData->mRemoteUrl = "tester@100.200.300.400";
       
   242     event.setLogsEventData( eventData );
       
   243     model = new LogsDetailsModel(*mDbConnector, event);
       
   244     QVERIFY(model->mDetailIcons.count() == 4);
       
   245     QVERIFY(model->mDetailTexts.count() == 4);
       
   246     delete model;
       
   247     model = 0;
       
   248     
       
   249     //VoIP call,only remote url, contact name
       
   250     testDetailsDateAndTime.setTime_t( 3000 );
       
   251     event.setRemoteParty( testDetailsRemoteParty );
       
   252     event.setNumber( testEmpty );
       
   253     event.setTime( testDetailsDateAndTime );
       
   254     event.setDirection( testDetailsDirection );
       
   255     event.setEventType( testDetailsEventType );
       
   256     event.setDuration( testDetailsDuration );
       
   257     eventData = new LogsEventData;
       
   258     eventData->mRemoteUrl = "tester@100.200.300.400";
       
   259     event.setLogsEventData( eventData );
       
   260     model = new LogsDetailsModel(*mDbConnector, event);
       
   261     QVERIFY(model->mDetailIcons.count() == 5);
       
   262     QVERIFY(model->mDetailTexts.count() == 5);
       
   263     delete model;
       
   264     model = 0;
       
   265 
       
   266     //VoIP call,remote uri and local uri, contact name
       
   267     testDetailsDateAndTime.setTime_t( 3000 );
       
   268     event.setRemoteParty( testDetailsRemoteParty );
       
   269     event.setNumber( testEmpty );
       
   270     event.setTime( testDetailsDateAndTime );
       
   271     event.setDirection( testDetailsDirection );
       
   272     event.setEventType( testDetailsEventType );
       
   273     event.setDuration( testDetailsDuration );
       
   274     eventData = new LogsEventData;
       
   275     eventData->mRemoteUrl = "tester@100.200.300.400";
       
   276     eventData->mLocalUrl = "caller@100.200.300.400";
       
   277     event.setLogsEventData( eventData );
       
   278     model = new LogsDetailsModel(*mDbConnector, event);
       
   279     QVERIFY(model->mDetailIcons.count() == 5);
       
   280     QVERIFY(model->mDetailTexts.count() == 5);
       
   281     delete model;
       
   282     model = 0;
       
   283     
       
   284     // Missed call, duration is not shown
       
   285     // No VoIP call,no remote url or local url and contactname
       
   286     event.setRemoteParty( testDetailsRemoteParty );
       
   287     event.setNumber( testDetailsRemoteNum );
       
   288     event.setTime( testDetailsDateAndTime );
       
   289     event.setEventType( testDetailsEventType );
       
   290     event.setDirection( LogsEvent::DirMissed );
       
   291     model = new LogsDetailsModel(*mDbConnector, event);
       
   292     QVERIFY(model->mDetailIcons.count() == 4);
       
   293     QVERIFY(model->mDetailTexts.count() == 4);
       
   294     delete model;
       
   295     model = 0;
       
   296 }
       
   297 
       
   298 void UT_LogsDetailsModel::testInitUnseenMissed()
       
   299 {
       
   300     LogsDbConnectorStubHelper::reset();
       
   301     testDetailsDateAndTime.setTime_t( 3000 );
       
   302     QString dateAndTimeRowHeading;
       
   303     
       
   304     // No duplicates
       
   305     LogsEvent event;
       
   306     event.setRemoteParty( testDetailsRemoteParty );
       
   307     event.setNumber( testDetailsRemoteNum );
       
   308     event.setTime( testDetailsDateAndTime );
       
   309     event.setDirection( LogsEvent::DirMissed );
       
   310     event.setEventType( testDetailsEventType );
       
   311     event.setDuration( testDetailsDuration );
       
   312     LogsDetailsModel* model = new LogsDetailsModel(*mDbConnector, event);
       
   313     QVERIFY(model->mDetailIcons.count() == 4);
       
   314     QVERIFY(model->mDetailTexts.count() == 4);
       
   315     QVERIFY(LogsDbConnectorStubHelper::lastCalledFunction().isEmpty());
       
   316     dateAndTimeRowHeading = model->mDetailTexts.at(1).at(0);
       
   317     delete model;
       
   318     model = 0;
       
   319     
       
   320     // Already read
       
   321     event.setIsRead(true);
       
   322     model = new LogsDetailsModel(*mDbConnector, event);
       
   323     QVERIFY(model->mDetailIcons.count() == 4);
       
   324     QVERIFY(model->mDetailTexts.count() == 4);
       
   325     QVERIFY(LogsDbConnectorStubHelper::lastCalledFunction().isEmpty());
       
   326     delete model;
       
   327     model = 0;
       
   328     
       
   329     // Not read and duplicates exist
       
   330     event.setIsRead(false);
       
   331     event.setDuplicates(3);
       
   332     model = new LogsDetailsModel(*mDbConnector, event);
       
   333     QVERIFY(model->mDetailIcons.count() == 4);
       
   334     QVERIFY(model->mDetailTexts.count() == 4);
       
   335     QVERIFY(LogsDbConnectorStubHelper::lastCalledFunction() == "readDuplicates" );
       
   336     
       
   337     // Reading duplicates completes
       
   338     QSignalSpy spy( model, SIGNAL(modelReset()) );
       
   339     LogsEvent* dup1 = new LogsEvent;
       
   340     model->mDbConnector->mDuplicatedEvents.append(dup1);
       
   341     LogsEvent* dup2 = new LogsEvent;
       
   342     model->mDbConnector->mDuplicatedEvents.append(dup2);
       
   343     model->duplicatesRead();
       
   344     QVERIFY(model->mDetailIcons.count() == 6);
       
   345     QVERIFY(model->mDetailTexts.count() == 6);
       
   346     // When having multiple date and time items, first item has different heading than others
       
   347     QVERIFY( model->mDetailTexts.at(1).at(0) != dateAndTimeRowHeading );
       
   348     QVERIFY( model->mDetailTexts.at(5).at(0) == dateAndTimeRowHeading );
       
   349     delete model;
       
   350     model = 0;
       
   351     
       
   352 }
       
   353 
       
   354 void UT_LogsDetailsModel::testGetHeaderData()
       
   355 {
       
   356     // No name or number
       
   357     LogsEvent event;
       
   358     QVERIFY( mModel->getHeaderData(event) == hbTrId("txt_dial_dblist_call_id_val_unknown_number") );
       
   359 
       
   360     // No name
       
   361     QString num("+12345555");
       
   362     event.setNumber(num);
       
   363     QVERIFY( mModel->getHeaderData(event) == num );
       
   364     
       
   365     // No number
       
   366     QString remote("Souuu");
       
   367     event.setRemoteParty(remote);
       
   368     event.setNumber("");
       
   369     QVERIFY( mModel->getHeaderData(event) == remote );
       
   370     
       
   371     // Both
       
   372     event.setNumber(num);
       
   373     QVERIFY( mModel->getHeaderData(event) == remote );
       
   374     
       
   375     // Only remote url
       
   376     event.setNumber("");
       
   377     event.setRemoteParty("");
       
   378     LogsEventData* eventData = new LogsEventData;
       
   379     eventData->mRemoteUrl = "test@1.2.3.4";
       
   380     event.setLogsEventData( eventData );
       
   381     QVERIFY( mModel->getHeaderData(event) == eventData->mRemoteUrl );
       
   382 }
       
   383 
       
   384 
       
   385 void UT_LogsDetailsModel::testGetCallerId()
       
   386 {
       
   387     // No name or number
       
   388     LogsEvent event;
       
   389     QVERIFY( mModel->getCallerId(event) == QString("") );
       
   390 
       
   391     // No name
       
   392     QString num("+12345555");
       
   393     event.setNumber(num);
       
   394     QVERIFY( mModel->getCallerId(event) == QString("") );
       
   395     
       
   396     // No number
       
   397     QString remote("Souuu");
       
   398     event.setRemoteParty(remote);
       
   399     event.setNumber("");
       
   400     QVERIFY( mModel->getCallerId(event) == QString("") );
       
   401     
       
   402     // Both
       
   403     event.setNumber(num);
       
   404     QVERIFY( mModel->getCallerId(event) == num );
       
   405     
       
   406     //Only number
       
   407     event.setRemoteParty("");
       
   408     QVERIFY( mModel->getCallerId(event) == QString("") );
       
   409     
       
   410     // Only remote url
       
   411     event.setNumber("");
       
   412     event.setRemoteParty("contactname");
       
   413     LogsEventData* eventData = new LogsEventData;
       
   414     eventData->mRemoteUrl = "test@1.2.3.4";
       
   415     event.setLogsEventData( eventData );
       
   416     QVERIFY( mModel->getCallerId(event) == eventData->mRemoteUrl );
       
   417 }
       
   418 
       
   419 void UT_LogsDetailsModel::testCreateContact()
       
   420 {
       
   421     LogsEvent event;
       
   422     LogsModelItemContainer item(&event);
       
   423     LogsContact* contact = qVariantValue<LogsContact*>(mModel->createContact(item));
       
   424     QVERIFY( !contact );
       
   425     
       
   426     LogsEvent event2;
       
   427     event2.setNumber("2145");
       
   428     LogsModelItemContainer item2(&event2);
       
   429     contact = qVariantValue<LogsContact*>(mModel->createContact(item2));
       
   430     QVERIFY( contact );
       
   431     delete contact;
       
   432 }
       
   433 
       
   434 void UT_LogsDetailsModel::testContactActionCompleted()
       
   435 {
       
   436     mModel->mDetailTexts.clear();
       
   437     mModel->contactActionCompleted(false);
       
   438     QVERIFY( mModel->mDetailTexts.count() == 0 );
       
   439     
       
   440     // No match
       
   441     mModel->mEvent->setRemoteParty( "" );
       
   442     mModel->mEvent->setNumber( "123445" );
       
   443     mModel->contactActionCompleted(true);
       
   444     QVERIFY( mModel->mDetailTexts.count() == 0 );
       
   445     QVERIFY( mModel->mEvent->remoteParty().length() == 0 );
       
   446     
       
   447     // Match
       
   448     QtContactsStubsHelper::setContactNames("first", "last");
       
   449     mModel->mEvent->setRemoteParty( "" );
       
   450     mModel->mEvent->setNumber( "11112222" );
       
   451     mModel->contactActionCompleted(true);
       
   452     QVERIFY( mModel->mDetailTexts.count() > 0 );
       
   453     QVERIFY( mModel->mEvent->remoteParty().length() > 0 );
       
   454 }