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