logsui/logsengine/tsrc/ut_logsengine/src/ut_logsdetailsmodel.cpp
changeset 0 4a5361db8937
child 13 52d644758b05
child 16 c5af8598d22c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsdetailsmodel.cpp	Tue May 04 12:39:37 2010 +0300
@@ -0,0 +1,454 @@
+/*
+* 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_logsdetailsmodel.h"
+#include "logsdetailsmodel.h"
+#include "logsevent.h"
+#include "logsdbconnector.h"
+#include "logscall.h"
+#include "logscontact.h"
+#include "logsmessage.h"
+#include "logseventdata.h"
+#include "qtcontacts_stubs_helper.h"
+#include "logsdbconnector_stub_helper.h"
+#include <hblineedit.h>
+#include <hbglobal.h>
+#include <QtTest/QtTest>
+
+Q_DECLARE_METATYPE(LogsCall *)
+Q_DECLARE_METATYPE(LogsMessage *)
+Q_DECLARE_METATYPE(LogsContact *)
+
+const QString testEmpty = "";
+const QString testDetailsRemoteParty = "Remoteman";
+const QString testDetailsRemoteNum = "12345566";
+const QString testDetailsRemoteInfo = "Remoteman";
+QDateTime testDetailsDateAndTime;
+const LogsEvent::LogsDirection testDetailsDirection = LogsEvent::DirIn;
+const LogsEvent::LogsEventType testDetailsEventType = LogsEvent::TypeVoiceCall;
+const int testDetailsDuration = 2000;
+const QString testDetailsNumber = "+4152800";
+
+void UT_LogsDetailsModel::initTestCase()
+{
+    
+    mDbConnector = new LogsDbConnector(mEvents);
+}
+
+void UT_LogsDetailsModel::cleanupTestCase()
+{
+    delete mDbConnector;
+}
+
+
+void UT_LogsDetailsModel::init()
+{
+    testDetailsDateAndTime.setTime_t( 3000 );
+    
+    LogsEvent event;
+    event.setRemoteParty( testDetailsRemoteParty );
+    event.setNumber( testDetailsRemoteNum );
+    event.setTime( testDetailsDateAndTime );
+    event.setDirection( testDetailsDirection );
+    event.setEventType( testDetailsEventType );
+    event.setDuration( testDetailsDuration );
+    mModel = new LogsDetailsModel(*mDbConnector, event);
+}
+
+void UT_LogsDetailsModel::cleanup()
+{
+    delete mModel;
+    mModel = 0;
+}
+
+void UT_LogsDetailsModel::testConstructor()
+{
+    QVERIFY( mModel );
+}
+
+void UT_LogsDetailsModel::testRowCount()
+{
+    QVERIFY( mModel->rowCount(QModelIndex()) == 5 );
+}
+
+void UT_LogsDetailsModel::testgetNumberToClipboard()
+{
+    HbLineEdit *cliptmp2 = new HbLineEdit(" ");
+    
+    cliptmp2->setText(" ");
+    cliptmp2->selectAll();
+    cliptmp2->copy();
+     
+    mModel->getNumberToClipboard();
+    
+    cliptmp2->setText(" ");
+    cliptmp2->paste();
+    
+    QVERIFY( cliptmp2->text() == testDetailsRemoteNum  );
+    delete cliptmp2;
+}
+
+void UT_LogsDetailsModel::testData()
+{
+    QVERIFY( mModel->data(QModelIndex(), Qt::DisplayRole).isNull() );
+    
+    // Test remote party info
+    QStringList display = mModel->data(mModel->index(0), Qt::DisplayRole).toStringList();
+    QVERIFY( display.count() == 2 );
+    QVERIFY( display.at(1) == testDetailsRemoteNum );  
+    QList<QVariant> decoration = mModel->data(mModel->index(0), Qt::DecorationRole).toList();
+    QVERIFY( decoration.count() == 1 );
+    
+    // Test date and time
+    display = mModel->data(mModel->index(1), Qt::DisplayRole).toStringList();
+    QVERIFY( display.count() == 2 );
+    QVERIFY( display.at(1) == testDetailsDateAndTime.toTimeSpec(Qt::LocalTime).toString() ); 
+    decoration = mModel->data(mModel->index(1), Qt::DecorationRole).toList();
+    QVERIFY( decoration.count() == 1 );
+    
+    // Test call direction
+    display = mModel->data(mModel->index(2), Qt::DisplayRole).toStringList();
+    QVERIFY( display.count() == 2 );
+    QVERIFY( display.at(1) == mModel->mEvent->directionAsString() );
+    decoration = mModel->data(mModel->index(2), Qt::DecorationRole).toList();
+    QVERIFY( decoration.count() == 1 );
+    
+    // Test call type
+    display = mModel->data(mModel->index(3), Qt::DisplayRole).toStringList();
+    QVERIFY( display.count() == 2 );
+    QVERIFY( display.at(1) == mModel->mEvent->typeAsString() );
+    decoration = mModel->data(mModel->index(3), Qt::DecorationRole).toList();
+    QVERIFY( decoration.count() == 1 );
+    
+    // Test call duration
+    display = mModel->data(mModel->index(4), Qt::DisplayRole).toStringList();
+    QVERIFY( display.count() == 2 );
+    QTime n(0,0,0);
+    QTime t = n.addSecs(testDetailsDuration);
+    QVERIFY( display.at(1) == t.toString("hh:mm:ss") );
+    decoration = mModel->data(mModel->index(4), Qt::DecorationRole).toList();
+    QVERIFY( decoration.count() == 1 );
+    
+    // Test call, event type supports call
+    QVariant callData = mModel->data(mModel->index(0), LogsDetailsModel::RoleCall);
+    LogsCall *call = qVariantValue<LogsCall *>( callData );
+    QVERIFY( call );
+    delete call;
+    
+    // Test call, event type does not support call
+    mModel->mEvent->setEventType(LogsEvent::TypeUndefined);
+    QVariant callData2 = mModel->data(mModel->index(0), LogsDetailsModel::RoleCall);
+    LogsCall *call2 = qVariantValue<LogsCall *>( callData2 );
+    QVERIFY( !call2 );
+    
+    // Test message
+    QVariant messageData = mModel->data(mModel->index(0), LogsDetailsModel::RoleMessage);
+    LogsMessage* message = qVariantValue<LogsMessage *>( messageData );
+    QVERIFY( message != 0 );
+    delete message;
+    LogsEventData* eventData = new LogsEventData;
+    eventData->mRemoteUrl = "test@1.2.3.4";
+    mModel->mEvent->setLogsEventData( eventData );
+    QVariant messageData2 = mModel->data(mModel->index(0), LogsDetailsModel::RoleMessage);
+    LogsMessage* message2 = qVariantValue<LogsMessage *>( messageData2 );
+    QVERIFY( message2 == 0 );
+    
+    // Contact supported
+    QVERIFY( mModel->mEvent->getNumberForCalling().length() > 0 );
+    QVariant contactData = mModel->data(mModel->index(0), LogsDetailsModel::RoleContact);
+    LogsContact *contact = qVariantValue<LogsContact *>( contactData );
+    QVERIFY( contact );
+    delete contact;
+    
+    // Contact not supported
+    mModel->mEvent->setNumber("");
+    mModel->mEvent->setLogsEventData( 0 );
+    contactData = mModel->data(mModel->index(0), LogsModel::RoleContact);
+    contact = qVariantValue<LogsContact *>( contactData );
+    QVERIFY( !contact );
+}
+
+void UT_LogsDetailsModel::testHeaderData()
+{
+    QCOMPARE(mModel->headerData(0, Qt::Vertical).toString(),
+             testDetailsRemoteInfo);
+    QVERIFY(mModel->headerData(0, Qt::Vertical, Qt::DecorationRole).isNull());
+}
+
+void UT_LogsDetailsModel::testgetRemoteUri()
+{
+    LogsEvent event;
+    QVERIFY( mModel->getRemoteUri(event) == QString("") );
+    LogsEventData* eventData = new LogsEventData;
+    eventData->mRemoteUrl = "test@1.2.3.4";
+    mModel->mEvent->setLogsEventData( eventData );
+    QVERIFY( mModel->getRemoteUri(*mModel->mEvent) == QString("test@1.2.3.4") );
+}
+
+void UT_LogsDetailsModel::testInitTextsAndIcons()
+{
+    //No VoIP call,no remote url or local url and contactname
+    testDetailsDateAndTime.setTime_t( 3000 );
+    LogsEvent event;
+    event.setRemoteParty( testDetailsRemoteParty );
+    event.setNumber( testDetailsRemoteNum );
+    event.setTime( testDetailsDateAndTime );
+    event.setDirection( testDetailsDirection );
+    event.setEventType( testDetailsEventType );
+    event.setDuration( testDetailsDuration );
+    LogsDetailsModel* model = new LogsDetailsModel(*mDbConnector, event);
+    QVERIFY(model->mDetailIcons.count() == 5);
+    QVERIFY(model->mDetailTexts.count() == 5);
+    delete model;
+    model = 0;
+    
+    //No VoIP call,no remote url or local url and no contactname
+    testDetailsDateAndTime.setTime_t( 3000 );
+    event.setRemoteParty( testEmpty );
+    event.setNumber( testDetailsRemoteNum );
+    event.setTime( testDetailsDateAndTime );
+    event.setDirection( testDetailsDirection );
+    event.setEventType( testDetailsEventType );
+    event.setDuration( testDetailsDuration );
+    model = new LogsDetailsModel(*mDbConnector, event);
+    QVERIFY(model->mDetailIcons.count() == 4);
+    QVERIFY(model->mDetailTexts.count() == 4);
+    delete model;
+    model = 0;
+    
+    //VoIP call,only remote url,no contact name
+    testDetailsDateAndTime.setTime_t( 3000 );
+    event.setRemoteParty( testEmpty );
+    event.setNumber( testEmpty );
+    event.setTime( testDetailsDateAndTime );
+    event.setDirection( testDetailsDirection );
+    event.setEventType( testDetailsEventType );
+    event.setDuration( testDetailsDuration );
+    LogsEventData* eventData = new LogsEventData;
+    eventData->mRemoteUrl = "tester@100.200.300.400";
+    event.setLogsEventData( eventData );
+    model = new LogsDetailsModel(*mDbConnector, event);
+    QVERIFY(model->mDetailIcons.count() == 4);
+    QVERIFY(model->mDetailTexts.count() == 4);
+    delete model;
+    model = 0;
+    
+    //VoIP call,only remote url, contact name
+    testDetailsDateAndTime.setTime_t( 3000 );
+    event.setRemoteParty( testDetailsRemoteParty );
+    event.setNumber( testEmpty );
+    event.setTime( testDetailsDateAndTime );
+    event.setDirection( testDetailsDirection );
+    event.setEventType( testDetailsEventType );
+    event.setDuration( testDetailsDuration );
+    eventData = new LogsEventData;
+    eventData->mRemoteUrl = "tester@100.200.300.400";
+    event.setLogsEventData( eventData );
+    model = new LogsDetailsModel(*mDbConnector, event);
+    QVERIFY(model->mDetailIcons.count() == 5);
+    QVERIFY(model->mDetailTexts.count() == 5);
+    delete model;
+    model = 0;
+
+    //VoIP call,remote uri and local uri, contact name
+    testDetailsDateAndTime.setTime_t( 3000 );
+    event.setRemoteParty( testDetailsRemoteParty );
+    event.setNumber( testEmpty );
+    event.setTime( testDetailsDateAndTime );
+    event.setDirection( testDetailsDirection );
+    event.setEventType( testDetailsEventType );
+    event.setDuration( testDetailsDuration );
+    eventData = new LogsEventData;
+    eventData->mRemoteUrl = "tester@100.200.300.400";
+    eventData->mLocalUrl = "caller@100.200.300.400";
+    event.setLogsEventData( eventData );
+    model = new LogsDetailsModel(*mDbConnector, event);
+    QVERIFY(model->mDetailIcons.count() == 5);
+    QVERIFY(model->mDetailTexts.count() == 5);
+    delete model;
+    model = 0;
+    
+    // Missed call, duration is not shown
+    // No VoIP call,no remote url or local url and contactname
+    event.setRemoteParty( testDetailsRemoteParty );
+    event.setNumber( testDetailsRemoteNum );
+    event.setTime( testDetailsDateAndTime );
+    event.setEventType( testDetailsEventType );
+    event.setDirection( LogsEvent::DirMissed );
+    model = new LogsDetailsModel(*mDbConnector, event);
+    QVERIFY(model->mDetailIcons.count() == 4);
+    QVERIFY(model->mDetailTexts.count() == 4);
+    delete model;
+    model = 0;
+}
+
+void UT_LogsDetailsModel::testInitUnseenMissed()
+{
+    LogsDbConnectorStubHelper::reset();
+    testDetailsDateAndTime.setTime_t( 3000 );
+    QString dateAndTimeRowHeading;
+    
+    // No duplicates
+    LogsEvent event;
+    event.setRemoteParty( testDetailsRemoteParty );
+    event.setNumber( testDetailsRemoteNum );
+    event.setTime( testDetailsDateAndTime );
+    event.setDirection( LogsEvent::DirMissed );
+    event.setEventType( testDetailsEventType );
+    event.setDuration( testDetailsDuration );
+    LogsDetailsModel* model = new LogsDetailsModel(*mDbConnector, event);
+    QVERIFY(model->mDetailIcons.count() == 4);
+    QVERIFY(model->mDetailTexts.count() == 4);
+    QVERIFY(LogsDbConnectorStubHelper::lastCalledFunction().isEmpty());
+    dateAndTimeRowHeading = model->mDetailTexts.at(1).at(0);
+    delete model;
+    model = 0;
+    
+    // Already read
+    event.setIsRead(true);
+    model = new LogsDetailsModel(*mDbConnector, event);
+    QVERIFY(model->mDetailIcons.count() == 4);
+    QVERIFY(model->mDetailTexts.count() == 4);
+    QVERIFY(LogsDbConnectorStubHelper::lastCalledFunction().isEmpty());
+    delete model;
+    model = 0;
+    
+    // Not read and duplicates exist
+    event.setIsRead(false);
+    event.setDuplicates(3);
+    model = new LogsDetailsModel(*mDbConnector, event);
+    QVERIFY(model->mDetailIcons.count() == 4);
+    QVERIFY(model->mDetailTexts.count() == 4);
+    QVERIFY(LogsDbConnectorStubHelper::lastCalledFunction() == "readDuplicates" );
+    
+    // Reading duplicates completes
+    QSignalSpy spy( model, SIGNAL(modelReset()) );
+    LogsEvent* dup1 = new LogsEvent;
+    model->mDbConnector->mDuplicatedEvents.append(dup1);
+    LogsEvent* dup2 = new LogsEvent;
+    model->mDbConnector->mDuplicatedEvents.append(dup2);
+    model->duplicatesRead();
+    QVERIFY(model->mDetailIcons.count() == 6);
+    QVERIFY(model->mDetailTexts.count() == 6);
+    // When having multiple date and time items, first item has different heading than others
+    QVERIFY( model->mDetailTexts.at(1).at(0) != dateAndTimeRowHeading );
+    QVERIFY( model->mDetailTexts.at(5).at(0) == dateAndTimeRowHeading );
+    delete model;
+    model = 0;
+    
+}
+
+void UT_LogsDetailsModel::testGetHeaderData()
+{
+    // No name or number
+    LogsEvent event;
+    QVERIFY( mModel->getHeaderData(event) == hbTrId("txt_dial_dblist_call_id_val_unknown_number") );
+
+    // No name
+    QString num("+12345555");
+    event.setNumber(num);
+    QVERIFY( mModel->getHeaderData(event) == num );
+    
+    // No number
+    QString remote("Souuu");
+    event.setRemoteParty(remote);
+    event.setNumber("");
+    QVERIFY( mModel->getHeaderData(event) == remote );
+    
+    // Both
+    event.setNumber(num);
+    QVERIFY( mModel->getHeaderData(event) == remote );
+    
+    // Only remote url
+    event.setNumber("");
+    event.setRemoteParty("");
+    LogsEventData* eventData = new LogsEventData;
+    eventData->mRemoteUrl = "test@1.2.3.4";
+    event.setLogsEventData( eventData );
+    QVERIFY( mModel->getHeaderData(event) == eventData->mRemoteUrl );
+}
+
+
+void UT_LogsDetailsModel::testGetCallerId()
+{
+    // No name or number
+    LogsEvent event;
+    QVERIFY( mModel->getCallerId(event) == QString("") );
+
+    // No name
+    QString num("+12345555");
+    event.setNumber(num);
+    QVERIFY( mModel->getCallerId(event) == QString("") );
+    
+    // No number
+    QString remote("Souuu");
+    event.setRemoteParty(remote);
+    event.setNumber("");
+    QVERIFY( mModel->getCallerId(event) == QString("") );
+    
+    // Both
+    event.setNumber(num);
+    QVERIFY( mModel->getCallerId(event) == num );
+    
+    //Only number
+    event.setRemoteParty("");
+    QVERIFY( mModel->getCallerId(event) == QString("") );
+    
+    // Only remote url
+    event.setNumber("");
+    event.setRemoteParty("contactname");
+    LogsEventData* eventData = new LogsEventData;
+    eventData->mRemoteUrl = "test@1.2.3.4";
+    event.setLogsEventData( eventData );
+    QVERIFY( mModel->getCallerId(event) == eventData->mRemoteUrl );
+}
+
+void UT_LogsDetailsModel::testCreateContact()
+{
+    LogsEvent event;
+    LogsModelItemContainer item(&event);
+    LogsContact* contact = qVariantValue<LogsContact*>(mModel->createContact(item));
+    QVERIFY( !contact );
+    
+    LogsEvent event2;
+    event2.setNumber("2145");
+    LogsModelItemContainer item2(&event2);
+    contact = qVariantValue<LogsContact*>(mModel->createContact(item2));
+    QVERIFY( contact );
+    delete contact;
+}
+
+void UT_LogsDetailsModel::testContactActionCompleted()
+{
+    mModel->mDetailTexts.clear();
+    mModel->contactActionCompleted(false);
+    QVERIFY( mModel->mDetailTexts.count() == 0 );
+    
+    // No match
+    mModel->mEvent->setRemoteParty( "" );
+    mModel->mEvent->setNumber( "123445" );
+    mModel->contactActionCompleted(true);
+    QVERIFY( mModel->mDetailTexts.count() == 0 );
+    QVERIFY( mModel->mEvent->remoteParty().length() == 0 );
+    
+    // Match
+    QtContactsStubsHelper::setContactNames("first", "last");
+    mModel->mEvent->setRemoteParty( "" );
+    mModel->mEvent->setNumber( "11112222" );
+    mModel->contactActionCompleted(true);
+    QVERIFY( mModel->mDetailTexts.count() > 0 );
+    QVERIFY( mModel->mEvent->remoteParty().length() > 0 );
+}