void ConversationModelTest::getEvents() { QFETCH(bool, useThread); QThread modelThread; ConversationModel model; model.enableContactChanges(false); watcher.setModel(&model); if (useThread) { modelThread.start(); model.setBackgroundThread(&modelThread); } QVERIFY(model.getEvents(group1.id())); QVERIFY(watcher.waitForModelReady()); QCOMPARE(model.rowCount(), 10); for (int i = 0; i < model.rowCount(); i++) { Event e1, e2; QModelIndex ind = model.index(i, 0); e1 = model.event(ind); QVERIFY(model.trackerIO().getEvent(e1.id(), e2)); QVERIFY(compareEvents(e1, e2)); QVERIFY(model.event(ind).type() != Event::CallEvent); } // add but don't save status message and check content again addTestEvent(model, Event::StatusMessageEvent, Event::Outbound, ACCOUNT1, group1.id(), "status message", false, false, QDateTime::currentDateTime(), QString(), true); watcher.waitForSignals(-1, 1); QCOMPARE(model.rowCount(), 11); for (int i = 0; i < model.rowCount(); i++) QVERIFY(model.event(model.index(i, 0)).type() != Event::CallEvent); // NOTE: since setFilter re-fetches data from tracker, status message event is lost /* filtering by type */ QVERIFY(model.setFilter(Event::IMEvent)); QVERIFY(watcher.waitForModelReady()); QCOMPARE(model.rowCount(), 6); for (int i = 0; i < model.rowCount(); i++) QCOMPARE(model.event(model.index(i, 0)).type(), Event::IMEvent); QVERIFY(model.setFilter(Event::SMSEvent)); QVERIFY(watcher.waitForModelReady()); QCOMPARE(model.rowCount(), 4); for (int i = 0; i < model.rowCount(); i++) QCOMPARE(model.event(model.index(i, 0)).type(), Event::SMSEvent); /* filtering by account */ QVERIFY(model.setFilter(Event::UnknownType, ACCOUNT1)); QVERIFY(watcher.waitForModelReady()); QCOMPARE(model.rowCount(), 6); for (int i = 0; i < model.rowCount(); i++) QCOMPARE(model.event(model.index(i, 0)).localUid(), ACCOUNT1); QVERIFY(model.setFilter(Event::UnknownType, ACCOUNT2)); QVERIFY(watcher.waitForModelReady()); QCOMPARE(model.rowCount(), 4); for (int i = 0; i < model.rowCount(); i++) QCOMPARE(model.event(model.index(i, 0)).localUid(), ACCOUNT2); /* filtering by direction */ QVERIFY(model.setFilter(Event::UnknownType, QString(), Event::Inbound)); QVERIFY(watcher.waitForModelReady()); QCOMPARE(model.rowCount(), 5); for (int i = 0; i < model.rowCount(); i++) QCOMPARE(model.event(model.index(i, 0)).direction(), Event::Inbound); QVERIFY(model.setFilter(Event::UnknownType, QString(), Event::Outbound)); QVERIFY(watcher.waitForModelReady()); QCOMPARE(model.rowCount(), 5); for (int i = 0; i < model.rowCount(); i++) QCOMPARE(model.event(model.index(i, 0)).direction(), Event::Outbound); /* mixed filtering */ QVERIFY(model.setFilter(Event::IMEvent, ACCOUNT1, Event::Outbound)); QVERIFY(watcher.waitForModelReady()); QCOMPARE(model.rowCount(), 2); for (int i = 0; i < model.rowCount(); i++) { QCOMPARE(model.event(model.index(i, 0)).type(), Event::IMEvent); QCOMPARE(model.event(model.index(i, 0)).localUid(), ACCOUNT1); QCOMPARE(model.event(model.index(i, 0)).direction(), Event::Outbound); } modelThread.quit(); modelThread.wait(3000); }
void ConversationModelTest::addEvent() { ConversationModel model; model.enableContactChanges(false); watcher.setModel(&model); model.setQueryMode(EventModel::SyncQuery); QVERIFY(model.getEvents(group1.id())); int rows = model.rowCount(); QVERIFY(addTestEvent(model, Event::IMEvent, Event::Outbound, ACCOUNT1, group1.id(), "added event") != -1); watcher.waitForSignals(); rows++; QCOMPARE(model.rowCount(), rows); QCOMPARE(model.event(model.index(0, 0)).freeText(), QString("added event")); /* filtering by type */ QVERIFY(model.setFilter(Event::IMEvent)); rows = model.rowCount(); QVERIFY(addTestEvent(model, Event::IMEvent, Event::Inbound, ACCOUNT1, group1.id(), "im 1") != -1); watcher.waitForSignals(); QVERIFY(addTestEvent(model, Event::SMSEvent, Event::Inbound, ACCOUNT1, group1.id(), "sms 1") != -1); watcher.waitForSignals(); QCOMPARE(model.rowCount(), rows + 1); QCOMPARE(model.event(model.index(0, 0)).freeText(), QString("im 1")); /* filtering by account */ QVERIFY(model.setFilter(Event::UnknownType, ACCOUNT1)); rows = model.rowCount(); QVERIFY(addTestEvent(model, Event::SMSEvent, Event::Inbound, ACCOUNT2, group1.id(), "account 2") != -1); watcher.waitForSignals(); QVERIFY(addTestEvent(model, Event::SMSEvent, Event::Inbound, ACCOUNT1, group1.id(), "account 1") != -1); watcher.waitForSignals(); QVERIFY(addTestEvent(model, Event::IMEvent, Event::Outbound, ACCOUNT1, group1.id(), "account 1") != -1); watcher.waitForSignals(); QCOMPARE(model.rowCount(), rows + 2); QCOMPARE(model.event(model.index(0, 0)).freeText(), QString("account 1")); /* filtering by direction */ QVERIFY(model.setFilter(Event::UnknownType, "", Event::Inbound)); rows = model.rowCount(); QVERIFY(addTestEvent(model, Event::SMSEvent, Event::Inbound, ACCOUNT2, group1.id(), "in") != -1); watcher.waitForSignals(); QVERIFY(addTestEvent(model, Event::SMSEvent, Event::Outbound, ACCOUNT1, group1.id(), "out") != -1); watcher.waitForSignals(); QVERIFY(addTestEvent(model, Event::IMEvent, Event::Inbound, ACCOUNT1, group1.id(), "in") != -1); watcher.waitForSignals(); QCOMPARE(model.rowCount(), rows + 2); QCOMPARE(model.event(model.index(0, 0)).freeText(), QString("in")); /* mixed filtering */ QVERIFY(model.setFilter(Event::SMSEvent, ACCOUNT2, Event::Inbound)); rows = model.rowCount(); QVERIFY(addTestEvent(model, Event::IMEvent, Event::Inbound, ACCOUNT2, group1.id(), "added event") != -1); watcher.waitForSignals(); QCOMPARE(model.rowCount(), rows); QVERIFY(addTestEvent(model, Event::SMSEvent, Event::Inbound, ACCOUNT2, group1.id(), "filtering works") != -1); watcher.waitForSignals(); QCOMPARE(model.rowCount(), rows + 1); QCOMPARE(model.event(model.index(0, 0)).freeText(), QString("filtering works")); }