void Ut_NotificationManager::testAddMissedCallNotification()
{
    CommHistory::Event event = createMissedCallEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    // One notification from contact 1
    NotificationManager* nm = NotificationManager::instance();
    nm->addNotification(createPersonalNotification(event));
    NotificationGroup group = nm->notificationGroup(event.type());

    QVERIFY(nm->countNotifications(group) == 1);
    QVERIFY(nm->countContacts(group) == 1);
    QVERIFY(nm->removeNotificationGroup(event.type()));
    QVERIFY(nm->countNotifications(group) == 0);
    QVERIFY(nm->countContacts(group) == 0);

    // Multiple notifications from contact 1
    CommHistory::Event event1 = createMissedCallEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    CommHistory::Event event2 = createMissedCallEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    nm->addNotification(createPersonalNotification(event1));
    nm->addNotification(createPersonalNotification(event2));
    QVERIFY(nm->countNotifications(group) == 2);
    QVERIFY(nm->countContacts(group) == 1);
    QVERIFY(nm->removeNotificationGroup(event1.type()));
    QVERIFY(nm->countNotifications(group) == 0);
    QVERIFY(nm->countContacts(group) == 0);
}
void Ut_NotificationManager::testMissedCallNotification()
{
    CommHistory::Event event = createMissedCallEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    // One notification from contact 1
    NotificationManager* nm = NotificationManager::instance();
    nm->m_NotificationTimer.stop();
    nm->removeNotificationGroup(event.type());
    removeGroup(event.type());

    QVERIFY(getGroup(event.type(), 10) == 0);

    nm->showNotification(event, CONTACT_1_REMOTE_ID);

    waitForCompletion(nm);

    MNotificationGroup *mgtGroup = getGroup(event.type(), 5000);
    QVERIFY(mgtGroup);
    QVERIFY(mgtGroup->isPublished());
    QVERIFY(mgtGroup->summary().contains(CONTACT_1_REMOTE_ID));
    QCOMPARE(mgtGroup->body(), txt_qtn_call_missed(1));

    NotificationGroup group = nm->notificationGroup(event.type());

    QVERIFY(nm->countContacts(group) == 1);
    QVERIFY(nm->countNotifications(group) == 1);

    waitForCompletion(nm);

    // Multiple notifications from contact 1
    CommHistory::Event event1 = createMissedCallEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    nm->showNotification(event1, CONTACT_1_REMOTE_ID);

    waitForCompletion(nm);

    mgtGroup = getGroup(event.type(), 5000);
    QVERIFY(mgtGroup);
    QVERIFY(mgtGroup->isPublished());
    QVERIFY(mgtGroup->summary().contains(CONTACT_1_REMOTE_ID));
    QCOMPARE(mgtGroup->body(), txt_qtn_call_missed(2));

    QVERIFY(nm->countContacts(group) == 1);
    QVERIFY(nm->countNotifications(group) == 2);

    waitForCompletion(nm);

    CommHistory::Event event2 = createMissedCallEvent(CONTACT_2_REMOTE_ID, internalId(contact2));
    nm->showNotification(event2, CONTACT_2_REMOTE_ID);

    waitForCompletion(nm); //wait for contact resolving

    mgtGroup = getGroup(event.type(), 5000);
    QVERIFY(mgtGroup);
    QVERIFY(mgtGroup->isPublished());
    QVERIFY(mgtGroup->summary().contains(CONTACT_1_REMOTE_ID));
    QVERIFY(mgtGroup->summary().contains(CONTACT_2_REMOTE_ID));
    QCOMPARE(mgtGroup->body(), txt_qtn_call_missed(3));

    QVERIFY(nm->countContacts(group) == 2);
    QVERIFY(nm->countNotifications(group) == 3);
}
void Ut_NotificationManager::testSaveAndLoadNotificationState()
{
    NotificationManager* nm = NotificationManager::instance();
    CommHistory::Event event1 = createImEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    CommHistory::Event event2 = createImEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    CommHistory::Event event3 = createImEvent(CONTACT_2_REMOTE_ID, internalId(contact2));
    CommHistory::Event event4 = createImEvent(CONTACT_2_REMOTE_ID, internalId(contact2));
    nm->addNotification(createPersonalNotification(event1));
    nm->addNotification(createPersonalNotification(event2));
    nm->addNotification(createPersonalNotification(event3));
    nm->addNotification(createPersonalNotification(event4));
    nm->saveState();
    nm->m_Notifications.clear();
    nm->loadState();

    NotificationGroup group = nm->notificationGroup(event1.type());

    QVERIFY(nm->countContacts(group) == 2);
    QVERIFY(nm->countNotifications(group) == 4);

    QVERIFY(nm->removeNotificationGroup(event1.type()));

    QVERIFY(nm->countContacts(group) == 0);
    QVERIFY(nm->countNotifications(group) == 0);
    nm->saveState();
    nm->m_Notifications.clear();
    nm->loadState();
    QVERIFY(nm->m_Notifications.count() == 0);
}
void Ut_NotificationManager::testVoicemail()
{
    // One notification from contact 1
    NotificationManager* nm = NotificationManager::instance();
    nm->m_NotificationTimer.stop();
    nm->removeNotificationGroup(CommHistory::Event::VoicemailEvent);
    removeGroup(CommHistory::Event::VoicemailEvent);

    QVERIFY(getGroup(CommHistory::Event::VoicemailEvent, 10) == 0);

    nm->slotMWICountChanged(1);
    waitForCompletion(nm);

    MNotificationGroup *mgtGroup = getGroup(CommHistory::Event::VoicemailEvent, 5000);
    QVERIFY(mgtGroup);
    QVERIFY(mgtGroup->isPublished());
    QVERIFY(mgtGroup->summary().isEmpty());
    QCOMPARE(mgtGroup->body(), txt_qtn_call_voicemail_notification(1));

    waitForCompletion(nm);

    nm->slotMWICountChanged(2);

    waitForCompletion(nm);

    mgtGroup = getGroup(CommHistory::Event::VoicemailEvent, 5000);
    QVERIFY(mgtGroup);
    QVERIFY(mgtGroup->isPublished());
    QVERIFY(mgtGroup->summary().isEmpty());
    QCOMPARE(mgtGroup->body(), txt_qtn_call_voicemail_notification(2));

    waitForCompletion(nm);

    nm->slotMWICountChanged(-1); // unknown number

    waitForCompletion(nm);

    mgtGroup = getGroup(CommHistory::Event::VoicemailEvent, 5000);
    QVERIFY(mgtGroup);
    QVERIFY(mgtGroup->isPublished());
    QVERIFY(mgtGroup->summary().isEmpty());
    QCOMPARE(mgtGroup->body(), txt_qtn_call_voicemail_notification(1));

    waitForCompletion(nm);

    nm->slotMWICountChanged(0);
    waitForCompletion(nm);

    mgtGroup = getGroup(CommHistory::Event::VoicemailEvent, 1);
    QVERIFY(mgtGroup == 0);
}
void Ut_NotificationManager::testRemoveNotificationGrouop()
{
    NotificationManager* nm = NotificationManager::instance();

    // One IM notification from contact 1
    CommHistory::Event event = createImEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    nm->addNotification(createPersonalNotification(event));

    // 1st time to remove NotificationGroup, return true
    QVERIFY(nm->removeNotificationGroup(event.type()));
    // 2nd time to remove the same NotificationGroup, return false
    QVERIFY(!nm->removeNotificationGroup(event.type()));

    //Mutile IM notifications from contact 1
    CommHistory::Event event1 = createMissedCallEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    CommHistory::Event event2 = createMissedCallEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    nm->addNotification(createPersonalNotification(event1));
    nm->addNotification(createPersonalNotification(event2));

    // 1st time to remove NotificationGroup, return true
    QVERIFY(nm->removeNotificationGroup(event1.type()));
    // 2nd time to remove the same NotificationGroup, return false
    QVERIFY(!nm->removeNotificationGroup(event1.type()));
}
void Ut_NotificationManager::testAddGroupImNotification()
{
    NotificationManager* nm = NotificationManager::instance();
    CommHistory::Event event1 = createImEvent(CONTACT_1_REMOTE_ID, internalId(contact1));
    CommHistory::Event event2 = createImEvent(CONTACT_2_REMOTE_ID, internalId(contact2));
    nm->addNotification(createPersonalNotification(event1));
    nm->addNotification(createPersonalNotification(event2));
    NotificationGroup group = nm->notificationGroup(event1.type());

    QVERIFY(nm->countContacts(group) == 2);
    QVERIFY(nm->countNotifications(group) == 2);
    QVERIFY(nm->removeNotificationGroup(event1.type()));
    QVERIFY(nm->countContacts(group) == 0);
    QVERIFY(nm->countNotifications(group) == 0);
}