phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntpresenceinfoprovider.cpp
--- /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);
+}
+