Unit tests for RemoteDBMgr
[irwi] / ut / ut_remotedbmgr / ut_remotedbmgr.cpp
index 072eb2b..2e507f7 100644 (file)
@@ -7,10 +7,80 @@
 
 void Ut_RemoteDBMgr::initTestCase()
 {
-    dbVerified = false;
+    dbOk = false;
     connect(&subject, SIGNAL(dbReady(RemoteDB *)),
             this, SLOT(verifyDB(RemoteDB *)));
-    subject.getDBAsync();
+    createTestData();
+}
+
+void Ut_RemoteDBMgr::createTestData()
+{
+    RemoteList ra;
+    ra << new Remote("model_A1", "A_mfg", 1, 9)
+       << new Remote("model_A2", "A_mfg", 2, 10);
+    RemoteList rb;
+    rb << new Remote("model_B3", "B_mfg", 3, 11)
+       << new Remote("model_B4", "B_mfg", 4, 12)
+       << new Remote("model_B5", "B_mfg", 5, 13);
+    RemoteList rc1;
+    rc1 << new Remote("model_C1_6", "C1_mfg", 6, 14);
+    RemoteList rc2;
+    rc2 << new Remote("model_C2_7", "C2_mfg", 7, 15)
+        << new Remote("model_C2_8", "C2_mfg", 8, 16);
+
+    MfgMap ma;
+    ma.insert("A_mfg", ra);
+    MfgMap mb;
+    mb.insert("B_mfg", rb);
+    MfgMap mc;
+    mc.insert("C1_mfg", rc1);
+    mc.insert("C2_mfg", rc2);
+
+    validDB.insert("A", ma);
+    validDB.insert("B", mb);
+    validDB.insert("C", mc);
+
+    createTestDocument();
+}
+
+void Ut_RemoteDBMgr::createTestDocument()
+{
+    QDomElement root = document.createElement("db");
+    document.appendChild(root);
+
+    for (int i = 0; i < validDB.keys().size(); ++i) {
+        QChar letter = validDB.keys()[i][0];
+        QDomElement charEl = document.createElement("char");
+        charEl.setAttribute("id", letter); 
+        createMfgElements(letter, charEl);
+        root.appendChild(charEl);
+    }
+
+    QNetworkReply::content = document.toByteArray();
+}
+
+void Ut_RemoteDBMgr::createMfgElements(QChar &letter, QDomElement &parent)
+{
+    for (int i = 0; i < validDB[letter].keys().size(); ++i) {
+        QString mfg = validDB[letter].keys()[i];
+        QDomElement mfgEl = document.createElement("mfg");
+        mfgEl.setAttribute("id", mfg);
+        createModelElements(mfg, mfgEl);
+        parent.appendChild(mfgEl);
+    }
+}
+
+void Ut_RemoteDBMgr::createModelElements(const QString &mfg,
+                                         QDomElement &parent)
+{
+    for (int i = 0; i < validDB[mfg[0]][mfg].size(); ++i) {
+        Remote *r = validDB[mfg[0]][mfg][i];
+        QDomElement modelEl = document.createElement("model");
+        modelEl.setAttribute("name", r->name());
+        modelEl.setAttribute("rating", r->rating());
+        modelEl.setAttribute("vote_count", r->voteCount());
+        parent.appendChild(modelEl);
+    }
 }
 
 void Ut_RemoteDBMgr::cleanupTestCase()
@@ -19,12 +89,45 @@ void Ut_RemoteDBMgr::cleanupTestCase()
 
 void Ut_RemoteDBMgr::testGetDBAsync()
 {
-    QCOMPARE(dbVerified, true);
+    subject.getDBAsync();
+    dbMutex.lock();
+    dbVerified.wait(&dbMutex, 5000);  
+    QCOMPARE(dbOk, true);
+    dbMutex.unlock();
 }
 
 void Ut_RemoteDBMgr::verifyDB(RemoteDB *db)
 {
-    dbVerified = true;
+    if (db == NULL) {
+        dbOk = false;
+    } else {
+        QCOMPARE(db->isEmpty(), false);
+        QCOMPARE(validDB.size(), db->size());
+        verifyRemotes(db);
+        dbOk = true;
+    }
+    dbVerified.wakeAll();
+}
+
+void Ut_RemoteDBMgr::verifyRemotes(RemoteDB *db)
+{
+    for (int i = 0; i < validDB.size(); ++i) {
+        MfgMap &validMfgs = validDB[validDB.keys()[i]];
+        MfgMap &mfgs = (*db)[db->keys()[i]];
+        QCOMPARE(validMfgs.size(), mfgs.size());
+        QCOMPARE(validDB.keys()[i], db->keys()[i]);
+            
+        for (int j = 0; j < validMfgs.size(); ++j) {
+            RemoteList validRemotes = validMfgs[validMfgs.keys()[j]];
+            RemoteList remotes = mfgs[mfgs.keys()[j]];
+            QCOMPARE(validRemotes.size(), remotes.size());
+            QCOMPARE(validMfgs.keys()[j], mfgs.keys()[j]);
+
+            for (int k = 0; k < validRemotes.size(); ++k) {
+                QCOMPARE(*(validRemotes[k]), *(remotes[k]));
+            }
+        }
+    }
 }