messagingapp/msgui/appengine/tsrc/testconversationengine/src/testconversationengine.cpp
changeset 37 518b245aa84c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/appengine/tsrc/testconversationengine/src/testconversationengine.cpp	Fri Jun 25 15:47:40 2010 +0530
@@ -0,0 +1,339 @@
+/*
+ * 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:
+ *
+ */
+
+// INCLUDES
+#include "conversationsengine.h"
+#include "testconversationengine.h"
+#include "testconversationenginestub.h"
+#include "testconversationenginestub.h"
+#include "testconversationupdatehandler.h"
+#include <ccsclientconversation.h>
+#include <ccsconversationentry.h>
+#include <xqconversions.h>
+#include <conversationsenginedefines.h>
+
+
+void TConversationEngine::initTestCase()
+{
+    iConvUpdateHandler = new TConversationUpdateHandler();
+    QVERIFY2(ConversationsEngine::instance() != NULL, "Appengine is not initialized.");
+    QVERIFY2(TestConversationEngineStub::Instance() != NULL, "Appengine Stub is not initialized.");
+    
+}
+
+void TConversationEngine::init()
+{
+    // allocate, setup the neccessary environment for 
+    // current test case to execute 
+}
+
+// fetch the conversations from server
+void TConversationEngine::GetConversationsFromServer()
+{
+    QVERIFY2(ConversationsEngine::instance()->
+            getConversations(TestConversationEngineStub::Instance()->
+                            GetConversationID()), "Get conversations failed");
+}
+
+//fetch the coversation and validate conversation view
+void TConversationEngine::FetchConversationsAndUpdateCV()
+{
+    QVERIFY2(ConversationsEngine::instance()->
+            getConversations(TestConversationEngineStub::Instance()->
+                            GetConversationID()), "Get conversations failed");
+    
+    //should be used once, will work for all the test cases
+    iConvUpdateHandler->SetConversationsViewUpdateHandler();
+    
+    //listen for emitted signal
+    QSignalSpy convListUpdate(ConversationsEngine::instance(), 
+                        SIGNAL(conversationModelPopulated()));
+    
+    // Now we check to make sure we don't have any signals already
+    QCOMPARE( convListUpdate.count(), 0 );
+
+    //update the coversation model and 
+    //wait for active object to execute
+    TestConversationEngineStub::Instance()->UpdateConversationList();
+    QTest::qWait(2000);
+    
+    //conversation engine should have emitted signal
+    QCOMPARE( convListUpdate.count(), 1 );        
+}
+
+//validate the current conversation id
+void TConversationEngine::CheckCurrentConversationID()
+{
+    QVERIFY2((ConversationsEngine::instance()->getCurrentConversationId() 
+            == TestConversationEngineStub::Instance()->GetConversationID()), 
+            "Current conversation id mismatch");
+}
+
+//mark the conversation as read and validate the conversation view
+void TConversationEngine::MarkConversationReadAndUpdateCV()
+{
+    //mark the conversation as read
+    ConversationsEngine::instance()->
+            markConversationRead(TestConversationEngineStub::Instance()->
+                                GetConversationID());
+
+    //listen for emitted signal
+    QSignalSpy convModify(ConversationsEngine::instance(), 
+                        SIGNAL(conversationModelUpdated()));
+    
+    // Now we check to make sure we don't have any signals already
+    QCOMPARE( convModify.count(), 0 );
+
+    // update the conversation view with modified conversation 
+    TestConversationEngineStub::Instance()->
+            UpdateConvEntry(TestConversationEngineStub::Instance()->
+                                GetConversationID());
+    
+    ConversationsEngine::instance()->emitConversationModelUpdated();
+    
+    //conversation engine should have emitted signal
+    QCOMPARE( convModify.count(), 1 );
+}
+
+//delete the conversation and validate updetad conversation view
+void TConversationEngine::DeleteConversationAndUpdateCV()
+{
+    // delete the conversation entry
+    ConversationsEngine::instance()->
+            deleteConversations(TestConversationEngineStub::Instance()->
+                                GetConversationID());
+   
+    //listen for emitted signal
+    QSignalSpy convDelete(ConversationsEngine::instance(), 
+                        SIGNAL(conversationModelUpdated()));
+    
+    // Now we check to make sure we don't have any signals already
+    QCOMPARE( convDelete.count(), 0 );
+    
+    // update the conversation view with deleted entry  
+    TestConversationEngineStub::Instance()->UpdateDeletedConvEntry();
+
+    ConversationsEngine::instance()->emitConversationModelUpdated();
+    
+    //conversation engine should have emitted signal
+    QCOMPARE( convDelete.count(), 1 );
+}
+
+//notify new recieved conversation and validate conversation view
+void TConversationEngine::NotifyNewConversationEntryAndUpdateCV()
+{
+    //listen for emitted signal
+    QSignalSpy convAdd(ConversationsEngine::instance(), 
+                        SIGNAL(conversationModelUpdated()));
+    
+    // Now we check to make sure we don't have any signals already
+    QCOMPARE( convAdd.count(), 0 );
+
+    TestConversationEngineStub::Instance()->UpdateAddConvEntry();
+    
+    //conversation engine should have emitted signal
+    QCOMPARE( convAdd.count(), 1 );
+}
+
+//update conversation client list and validate conversation summary model
+void TConversationEngine::NotifyConversationClientListAndUpdateCLV()
+{
+    //should be used once, will work for all the test cases
+    //set the conversation summary view update handler 
+    iConvUpdateHandler->SetConversationsSummaryViewUpdateHandler();
+
+    //listen for emitted signal
+    QSignalSpy convClientList(ConversationsEngine::instance(), 
+                        SIGNAL(conversationListModelPopulated()));
+    
+    // Now we check to make sure we don't have any signals already
+    QCOMPARE( convClientList.count(), 0 );
+    
+    //update the conversation client list to summary model
+    TestConversationEngineStub::Instance()->UpdateConversationClientList();
+    QTest::qWait(2000);
+    
+    //conversation engine should have emitted signal
+    QCOMPARE( convClientList.count(), 1 );
+}
+
+//get contactt details associated with conversation id
+void TConversationEngine::GetContactDetailsFromConversationID()
+{
+    //get the conversation client list
+    RPointerArray<CCsClientConversation>&  clientList 
+            = TestConversationEngineStub::Instance()->GetConversationClientList();
+    
+    //match the client list with summary model list
+    for (int loop = 0; loop < clientList.Count(); loop++)
+    {
+        CCsClientConversation* clientConv = clientList[loop];
+         
+        qint64 msgId = clientConv->GetConversationEntryId();
+         
+        QString fname;
+        QString address;
+         
+        ConversationsEngine::instance()->
+                getContactDetails(msgId, fname, address);
+         
+        qDebug() << "msgId " << msgId;
+          
+        //check the bunch of converation client details 
+        QCOMPARE(fname,
+               XQConversions::s60DescToQString(
+                       *(clientConv->GetDisplayName())));
+          
+        QCOMPARE(address,
+                XQConversions::s60DescToQString(
+                        *(clientConv->GetConversationEntry()->Contact())));
+    }
+}
+
+// get conversation id associated with contact id
+void TConversationEngine::GetConversationIDFromContatcID()
+{
+    //get the conversation client list
+    RPointerArray<CCsClientConversation>&  clientList 
+            = TestConversationEngineStub::Instance()->GetConversationClientList();
+
+    //match the client list with summary model list
+    for (int loop = 0; loop < clientList.Count(); loop++)
+     {
+         CCsClientConversation* clientConv = clientList[loop];
+         
+         qint64 msgId = clientConv->GetConversationEntryId();
+         
+         qint64 convID = ConversationsEngine::instance()->
+                 getConversationIdFromContactId(clientConv->GetContactId());
+         QCOMPARE(convID, msgId);
+     }
+}
+
+// update the new conversation client to summary view 
+void TConversationEngine::NotifyNewConversationClientAndUpdateCLV()
+{
+    //Add and update new conversation client to summary model
+    TestConversationEngineStub::Instance()->UpdateAddConvClient();
+
+    //emit the signal for validating the summary model
+    ConversationsEngine::instance()->emitConversationListModelPopulated();
+}
+
+//update the modified conversation client
+void TConversationEngine::NotifyModifyConversationClientAndUpdateCLV()
+{
+    //update the modified conversation client to summary model
+    TestConversationEngineStub::Instance()->
+            UpdateConvClient(TestConversationEngineStub::Instance()->GetConversationID());
+    
+    //emit the signal for validating the summary model
+    ConversationsEngine::instance()->emitConversationListModelPopulated();
+}
+
+//update the deleted conversation client
+void TConversationEngine::NotifyDeleteConversationClientAndUpdateCLV()
+{
+    //update the deleted conversation client to summary model
+    TestConversationEngineStub::Instance()->UpdateDeletedConvClient();
+    
+    //emit the signal for validating the summary model
+    ConversationsEngine::instance()->emitConversationListModelPopulated();
+}
+
+//get the conversation id from address
+void TConversationEngine::GetConversationIDFromAddress()
+{
+    //get the conversation client list
+    RPointerArray<CCsClientConversation>&  clientList 
+                = TestConversationEngineStub::Instance()->GetConversationClientList();
+
+    //math the conversation id recieved from summary model
+    if (clientList.Count())
+    {
+         qint64 msgId = clientList[0]->GetConversationEntryId();
+         
+         QStandardItemModel* convModel = ConversationsEngine::instance()->
+                                                 getConversationsSummaryModel();
+  
+         //match convid in model, if not found raise error
+         QModelIndexList indexList = convModel->match(convModel->index(0, 0), 
+                  ConversationId, msgId, 1, Qt::MatchExactly);
+
+         QVERIFY2(indexList.count(), "No item found in summary model");
+         
+         qint64 convID = ConversationsEngine::instance()->
+                         getConversationIdFromAddress(
+                         convModel->data(indexList[0], ConversationAddress).toString());
+         QCOMPARE(convID, msgId);
+    }
+}
+
+//fetch more conversations from server
+void TConversationEngine::FetchMoreConversations()
+{
+    ConversationsEngine::instance()->fetchMoreConversations();
+}
+
+//clear conversations from conversation view
+void TConversationEngine::ClearConversations()
+{
+    //clear the conversations
+    ConversationsEngine::instance()->clearConversations();
+    
+    //validate the conversation view, and raise the error if entry found
+    QStandardItemModel* convModel 
+                        =  ConversationsEngine::instance()->getConversationsModel();
+    QVERIFY2(convModel->rowCount() == 0, "conversation view not cleared");     
+}
+
+//get the drafts model
+void TConversationEngine::GetDraftsModelFromConversationEngine()
+{
+    QStandardItemModel* convModel 
+                =  ConversationsEngine::instance()->getDraftsModel();
+    QVERIFY2(convModel, "Get Drafts Model Failed");
+}
+
+void TConversationEngine::cleanup()
+{
+    //clean the resources for the current test case
+}
+
+void TConversationEngine::cleanupTestCase()
+{
+    //delete the update handler
+    delete iConvUpdateHandler;
+    iConvUpdateHandler = NULL;
+    //delete the conversation engine variable
+    delete ConversationsEngine::instance();
+    //delete the stub data
+    delete TestConversationEngineStub::Instance();
+}
+
+
+//main entry point
+int main(int argc, char *argv[])
+    { 
+    int ret = -1;
+    QCoreApplication app(argc, argv);
+    QObject* tc = new TConversationEngine();
+    ret =  QTest::qExec(tc, argc, argv);
+	delete tc;
+    return ret;
+    }
+