Added project for building all unit tests
[situare] / tests / situareservice / networkaccessmanagermock.cpp
1 /*
2    Situare - A location system for Facebook
3    Copyright (C) 2010  Ixonos Plc. Authors:
4
5       Henri Lampela - henri.lampela@ixonos.com
6       Jussi Laitinen - jussi.laitinen@ixonos.com
7
8    Situare is free software; you can redistribute it and/or
9    modify it under the terms of the GNU General Public License
10    version 2 as published by the Free Software Foundation.
11
12    Situare is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with Situare; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
20    USA.
21 */
22
23 #include <QDebug>
24 #include <QBuffer>
25 #include "networkaccessmanagermock.h"
26
27 NetworkAccessManagerMock::NetworkAccessManagerMock(QNetworkAccessManager *manager, QObject *parent)
28     : QNetworkAccessManager(parent)
29     , mode(0)
30 {
31     qDebug() << __PRETTY_FUNCTION__;
32 }
33
34 NetworkReplyMock *NetworkAccessManagerMock::createRequest(Operation op, const QNetworkRequest &request,
35                                                         QIODevice *outgoingData)
36 {
37      qDebug() << __PRETTY_FUNCTION__;
38
39      reply = new NetworkReplyMock(this);
40      this->request = request;
41
42      switch (this->mode) {
43
44      case NetworkAccessManagerMock::CORRECT:
45          QTimer::singleShot(0, this, SLOT(generateCorrectReply()));
46          break;
47      case NetworkAccessManagerMock::INCORRECT:
48          QTimer::singleShot(0, this, SLOT(generateError()));
49          break;
50      case NetworkAccessManagerMock::DELAYED_CORRECT:
51          QTimer::singleShot(0, this, SLOT(generateDelayedCorrectReply()));
52          break;
53      default:
54          QTimer::singleShot(0, this, SLOT(generateCorrectReply()));
55          break;
56     }
57     return reply;
58 }
59
60 NetworkAccessManagerMock::~NetworkAccessManagerMock()
61 {
62     delete reply;
63 }
64
65 NetworkReplyMock *NetworkAccessManagerMock::get(const QNetworkRequest &request)
66 {
67     qDebug() << __PRETTY_FUNCTION__;
68     this->request = request;
69
70     return reply;
71 }
72
73 void NetworkAccessManagerMock::setMode(int mode)
74 {
75     this->mode = mode;
76 }
77
78 void NetworkAccessManagerMock::generateError()
79 {
80     qDebug() << __PRETTY_FUNCTION__;
81     reply->setUrl(request.url());
82     reply->setError(QNetworkReply::HostNotFoundError, "Host not found");
83     emit QNetworkAccessManager::finished(reply);
84 }
85
86 void NetworkAccessManagerMock::generateCorrectReply()
87 {
88     qDebug() << __PRETTY_FUNCTION__;
89     reply->setUrl(request.url());
90     reply->setError(QNetworkReply::NoError, "No error");
91 //    QImage image;
92 //    if (!image.load(":testTile.png", 0)) {
93 //        qDebug() << "could not load image";
94 //        image = QImage();
95 //    }
96 //    else
97 //    qDebug() << "image loaded";
98 //
99 //    QByteArray array;
100 //    QBuffer buffer(&array);
101 //    buffer.open(QBuffer::WriteOnly);
102 //    if (image.save(&buffer, "PNG"))
103 //        qDebug() << "image saved";
104 //    buffer.close();
105 //    reply->setData(array);
106     emit QNetworkAccessManager::finished(reply);
107 }
108
109 void NetworkAccessManagerMock::generateDelayedCorrectReply()
110 {
111     qDebug() << __PRETTY_FUNCTION__;
112     QTimer::singleShot(4000, this, SLOT(generateCorrectReply()));
113 }