Fix for RemoteDBMgr unit tests
[irwi] / ut / ut_remotedbmgr / ut_remotedbmgr.cpp
1 #include "qnetworkreply.h"
2 #include "ut_remotedbmgr.h"
3
4 #include <QtTest>
5 #include <QNetworkAccessManager>
6
7 void Ut_RemoteDBMgr::initTestCase()
8 {
9     dbOk = false;
10     connect(&subject, SIGNAL(dbReady(RemoteDB *)),
11             this, SLOT(verifyDB(RemoteDB *)));
12     createTestData();
13 }
14
15 void Ut_RemoteDBMgr::cleanupTestCase()
16 {
17 }
18
19 void Ut_RemoteDBMgr::createTestData()
20 {
21     RemoteList ra;
22     ra << new Remote("model_A1", "A_mfg", 1, 9)
23        << new Remote("model_A2", "A_mfg", 2, 10);
24     RemoteList rb;
25     rb << new Remote("model_B3", "B_mfg", 3, 11)
26        << new Remote("model_B4", "B_mfg", 4, 12)
27        << new Remote("model_B5", "B_mfg", 5, 13);
28     RemoteList rc1;
29     rc1 << new Remote("model_C1_6", "C1_mfg", 6, 14);
30     RemoteList rc2;
31     rc2 << new Remote("model_C2_7", "C2_mfg", 7, 15)
32         << new Remote("model_C2_8", "C2_mfg", 8, 16);
33
34     MfgMap ma;
35     ma.insert("A_mfg", ra);
36     MfgMap mb;
37     mb.insert("B_mfg", rb);
38     MfgMap mc;
39     mc.insert("C1_mfg", rc1);
40     mc.insert("C2_mfg", rc2);
41
42     validDB.insert("A", ma);
43     validDB.insert("B", mb);
44     validDB.insert("C", mc);
45
46     createTestDocument();
47 }
48
49 void Ut_RemoteDBMgr::createTestDocument()
50 {
51     QDomElement root = document.createElement("db");
52     document.appendChild(root);
53
54     for (int i = 0; i < validDB.keys().size(); ++i) {
55         QChar letter = validDB.keys()[i][0];
56         QDomElement charEl = document.createElement("char");
57         charEl.setAttribute("id", letter); 
58         createMfgElements(letter, charEl);
59         root.appendChild(charEl);
60     }
61
62     QNetworkReply::data.setData(document.toByteArray());
63 }
64
65 void Ut_RemoteDBMgr::createMfgElements(QChar &letter, QDomElement &parent)
66 {
67     for (int i = 0; i < validDB[letter].keys().size(); ++i) {
68         QString mfg = validDB[letter].keys()[i];
69         QDomElement mfgEl = document.createElement("mfg");
70         mfgEl.setAttribute("id", mfg);
71         createModelElements(mfg, mfgEl);
72         parent.appendChild(mfgEl);
73     }
74 }
75
76 void Ut_RemoteDBMgr::createModelElements(const QString &mfg,
77                                          QDomElement &parent)
78 {
79     for (int i = 0; i < validDB[mfg[0]][mfg].size(); ++i) {
80         Remote *r = validDB[mfg[0]][mfg][i];
81         QDomElement modelEl = document.createElement("model");
82         modelEl.setAttribute("name", r->name());
83         modelEl.setAttribute("rating", r->rating());
84         modelEl.setAttribute("vote_count", r->voteCount());
85         parent.appendChild(modelEl);
86     }
87 }
88
89 void Ut_RemoteDBMgr::testGetDBAsync()
90 {
91     subject.getDBAsync();
92     dbMutex.lock();
93     dbVerified.wait(&dbMutex, 5000);  
94     QCOMPARE(dbOk, true);
95     dbMutex.unlock();
96 }
97
98 void Ut_RemoteDBMgr::verifyDB(RemoteDB *db)
99 {
100     if (db == NULL) {
101         dbOk = false;
102     } else {
103         QCOMPARE(db->isEmpty(), false);
104         QCOMPARE(validDB.size(), db->size());
105         verifyRemotes(db);
106         dbOk = true;
107     }
108     dbVerified.wakeAll();
109 }
110
111 void Ut_RemoteDBMgr::verifyRemotes(RemoteDB *db)
112 {
113     for (int i = 0; i < validDB.size(); ++i) {
114         MfgMap &validMfgs = validDB[validDB.keys()[i]];
115         MfgMap &mfgs = (*db)[db->keys()[i]];
116         QCOMPARE(validMfgs.size(), mfgs.size());
117         QCOMPARE(validDB.keys()[i], db->keys()[i]);
118             
119         for (int j = 0; j < validMfgs.size(); ++j) {
120             RemoteList validRemotes = validMfgs[validMfgs.keys()[j]];
121             RemoteList remotes = mfgs[mfgs.keys()[j]];
122             QCOMPARE(validRemotes.size(), remotes.size());
123             QCOMPARE(validMfgs.keys()[j], mfgs.keys()[j]);
124
125             for (int k = 0; k < validRemotes.size(); ++k) {
126                 QCOMPARE(*(validRemotes[k]), *(remotes[k]));
127             }
128         }
129     }
130 }
131
132
133 QTEST_MAIN(Ut_RemoteDBMgr)
134
135