phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntpresenceinfoprovider.cpp
changeset 46 efe85016a067
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntpresenceinfoprovider.cpp	Wed Jun 23 18:02:44 2010 +0300
@@ -0,0 +1,190 @@
+/*
+* 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_cntpresenceinfoprovider.h"
+#include "cntpresenceinfoprovider.h"
+
+#include <prcpresencebuddyinfo_qt.h>
+#include <prcpresencereader_qt.h>
+#include <prcpresencewriter_qt.h>
+
+void TestCntPresenceInfoProvider::initTestCase()
+{
+    mCntPresenceInfoProvider = NULL;
+}
+
+void TestCntPresenceInfoProvider::create()
+{
+    mCntPresenceInfoProvider = new CntPresenceInfoProvider();
+}
+
+void TestCntPresenceInfoProvider::testSupportedFields()
+{
+    QVERIFY(mCntPresenceInfoProvider->supportedFields() == ContactInfoIcon2Field);
+}
+
+void TestCntPresenceInfoProvider::testRequestInfo()
+{
+    PrcPresenceWriter *writer = PrcPresenceWriter::createWriter();
+    
+    PrcPresenceBuddyInfoQt *buddy = PrcPresenceBuddyInfoQt::createInstance();
+    buddy->setIdentity("sip:test@test.com");
+    buddy->setAvailability(PrcPresenceBuddyInfoQt::PrcNotAvailable, "meh");
+    writer->writePresence(*buddy);
+    
+    QContactManager manager("symbian");
+    
+    QContact c;
+    QContactName name;
+    name.setFirstName("firstname");
+    name.setLastName("lastname");
+    c.saveDetail(&name);
+    QContactPhoneNumber number;
+    number.setNumber("1234567");
+    number.setContexts(QContactDetail::ContextHome);
+    number.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+    c.saveDetail(&number);
+    manager.saveContact(&c);
+    
+    ContactInfoFields fields;
+    fields = ContactInfoTextField;
+    
+    QSignalSpy spy(mCntPresenceInfoProvider, SIGNAL(infoFieldReady(CntInfoProvider*, int, ContactInfoField, const QString&)));
+    
+    mCntPresenceInfoProvider->requestInfo(c, fields);
+    QCOMPARE(spy.count(), 0);
+    QVERIFY(mCntPresenceInfoProvider->mBuddyMap.isEmpty());
+    
+    fields = ContactInfoIcon2Field;
+    
+    mCntPresenceInfoProvider->requestInfo(c, fields);
+    QCOMPARE(spy.count(), 0);
+    QVERIFY(mCntPresenceInfoProvider->mBuddyMap.isEmpty());
+    
+    QContactOnlineAccount account;
+    account.setSubTypes(QStringList() << QContactOnlineAccount::SubTypeSip);
+    account.setServiceProvider("sip");
+    account.setAccountUri("test@test.com");
+    c.saveDetail(&account);
+    QContactOnlineAccount account2;
+    account2.setSubTypes(QStringList() << QContactOnlineAccount::SubTypeSipVoip);
+    account.setServiceProvider("sip");
+    account2.setAccountUri("test@test.com");
+    c.saveDetail(&account2);
+    QContactOnlineAccount account3;
+    account3.setSubTypes(QStringList() << QContactOnlineAccount::SubTypeSip);
+    account3.setAccountUri("malformatted");
+    c.saveDetail(&account3);
+    manager.saveContact(&c);
+    
+    mCntPresenceInfoProvider->requestInfo(c, fields);
+    QCOMPARE(spy.count(), 0);
+    QCOMPARE(mCntPresenceInfoProvider->mBuddyMap.count(), 1);
+    
+    delete mCntPresenceInfoProvider;
+    mCntPresenceInfoProvider = NULL;
+    
+    buddy->setAvailability(PrcPresenceBuddyInfoQt::PrcAvailable, "meh");
+    writer->writePresence(*buddy);
+    
+    mCntPresenceInfoProvider = new CntPresenceInfoProvider();
+    
+    QSignalSpy spy2(mCntPresenceInfoProvider, SIGNAL(infoFieldReady(CntInfoProvider*, int, ContactInfoField, const QString&)));
+    mCntPresenceInfoProvider->requestInfo(c, fields);
+    QCOMPARE(spy2.count(), 1);
+    QCOMPARE(mCntPresenceInfoProvider->mBuddyMap.count(), 1);
+    
+    delete buddy;
+    delete writer;
+}
+
+void TestCntPresenceInfoProvider::testHandlePresenceUpdate()
+{
+    QSignalSpy spy(mCntPresenceInfoProvider, SIGNAL(infoFieldReady(CntInfoProvider*, int, ContactInfoField, const QString&)));
+    
+    PrcPresenceWriter *writer = PrcPresenceWriter::createWriter();
+    PrcPresenceReader *reader = PrcPresenceReader::createReader();
+    
+    PrcPresenceBuddyInfoQt *dummyBuddy = PrcPresenceBuddyInfoQt::createInstance();
+    dummyBuddy->setIdentity("sip:dummy@dummy.com");
+    dummyBuddy->setAvailability(PrcPresenceBuddyInfoQt::PrcAvailable, "meh");
+    writer->writePresence(*dummyBuddy);
+    
+    mCntPresenceInfoProvider->handlePresenceUpdate(true, dummyBuddy);
+    QCOMPARE(spy.count(), 0);
+
+    mCntPresenceInfoProvider->handlePresenceUpdate(false, dummyBuddy);
+    QCOMPARE(spy.count(), 0);
+
+    mCntPresenceInfoProvider->handlePresenceUpdate(true, NULL);
+    QCOMPARE(spy.count(), 0);
+    
+    PrcPresenceBuddyInfoQt *buddy = reader->presenceInfo("sip:test@test.com");
+    buddy->setAvailability(PrcPresenceBuddyInfoQt::PrcNotAvailable, "meh");
+    writer->writePresence(*buddy);
+    QTest::qWait(5000);
+    QCOMPARE(spy.count(), 1);
+    
+    QContactManager manager("symbian");
+    QContact c = manager.contact(mCntPresenceInfoProvider->mBuddyMap.value("sip:test@test.com"));
+    
+    QList<QContactOnlineAccount> accounts = c.details<QContactOnlineAccount>();
+    foreach (QContactOnlineAccount account, accounts)
+    {
+        c.removeDetail(&account);
+    }
+    manager.saveContact(&c);
+    
+    buddy->setAvailability(PrcPresenceBuddyInfoQt::PrcAvailable, "meh");
+    writer->writePresence(*buddy);
+    QTest::qWait(5000);
+    QCOMPARE(spy.count(), 2);
+    
+    delete writer;
+    delete reader;
+    delete dummyBuddy;
+    delete buddy;
+}
+
+void TestCntPresenceInfoProvider::testParsePresence()
+{
+    PrcPresenceBuddyInfoQt *buddy = PrcPresenceBuddyInfoQt::createInstance();
+    buddy->setAvailability(PrcPresenceBuddyInfoQt::PrcNotAvailable, "meh");
+
+    QList<PrcPresenceBuddyInfoQt*> buddies;
+    buddies.append(buddy);
+
+    QVERIFY(mCntPresenceInfoProvider->parsePresence(buddies).isEmpty());
+
+    buddy->setAvailability(PrcPresenceBuddyInfoQt::PrcAvailable, "meh");
+
+    QVERIFY(mCntPresenceInfoProvider->parsePresence(buddies) == "qtg_small_online");
+    
+    delete buddy;
+}
+
+void TestCntPresenceInfoProvider::cleanupTestCase()
+{
+    delete mCntPresenceInfoProvider;
+    mCntPresenceInfoProvider = NULL;
+    
+    QContactManager manager("symbian");
+    QList<QContactLocalId> ids = manager.contactIds();
+    QMap<int, QContactManager::Error> errorMap;
+    manager.removeContacts(ids, &errorMap);
+}
+