colnod-connector/test/auto/colnod/tst_colnodapi.cpp

143 lines
3.9 KiB
C++

#include <QtTest>
#include "colnodapi.h"
#include "serversdk/request.h"
// add necessary includes here
Q_DECLARE_METATYPE(std::shared_ptr<Data>)
Q_DECLARE_METATYPE(std::shared_ptr<serversdk::Request>);
class ColnodTest : public QObject
{
Q_OBJECT
public:
ColnodTest()
{
qRegisterMetaType<std::shared_ptr<Data>>();
qRegisterMetaType<std::shared_ptr<serversdk::Request>>("std::shared_ptr<Request>");
}
private :
Q_SLOT void getTokens();
Q_SLOT void download_test();
Q_SLOT void download_data_test_now();
Q_SLOT void download_data_fail_test();
void login();
private:
QString getLoginToken(ColnodAPI &colnod);
};
void ColnodTest::login()
{
serversdk::RequestManager reqMan;
ColnodAPI colnod(&reqMan);
auto login = colnod.requestLogin();
QVERIFY(login);
QVERIFY(login->networkReply());
QSignalSpy spy(login.get(), &serversdk::Request::finished);
QCOMPARE(spy.count(), 0);
QVERIFY(spy.wait());
QCOMPARE(spy.count(), 1);
QVERIFY(login->responseData().contains("id"));
}
void ColnodTest::getTokens()
{
// FIXME: finish this -> must be valid test testing something
// FIXME: Was not testing anything only causing bug
serversdk::RequestManager reqMan;
ColnodAPI colnod(&reqMan);
// get login token
// FIXME: calling login request two times
auto login = colnod.requestLogin();
QSignalSpy spy(login.get(), &serversdk::Request::finished);
QVERIFY(spy.isValid());
QVERIFY(spy.wait());
//login->responseData().mid(7,36);
// NOTE: second calling of loging request
//QString token = getLoginToken(colnod);
Timestamp time;
time.setTimestamp(QDateTime::currentMSecsSinceEpoch());
auto request = colnod.getTokensUpdated(time);
// FIXING BUG: creating request not waiting for it immediatelly destroying request
// immediatelly reqMan goes out of scope destroying QNetworkRequestManager with QNetworkReply running.
QSignalSpy requestSpy(request.get(), &serversdk::Request::finished);
QVERIFY(requestSpy.wait()); // <-- have to wait here for request!!!!
// FIXME: check request and finish test!!
}
void ColnodTest::download_test()
{
serversdk::RequestManager reqMan;
reqMan.setIgnoreSsl(true);
ColnodAPI colnod(&reqMan);
QVERIFY(!colnod.mData);
QVERIFY(!colnod.mValid);
QVERIFY(!colnod.amountData);
QVERIFY(!colnod.amountProccessesFinished);
QSignalSpy spy(&colnod, &ColnodAPI::downloadDataFinished);
QVERIFY(spy.isValid());
QVERIFY(colnod.downloadData(1570190399259));
QVERIFY(spy.wait());
QVERIFY(colnod.amountData == 0);
auto data = qvariant_cast<std::shared_ptr<Data>>(spy.at(0).at(0));
QVERIFY(data);
QVERIFY(! data->updatedTokens.isEmpty());
QVERIFY(data->updatedTokens.contains("5e2f1260-da1c-441f-9644-24dfe3b97b2a"));
}
void ColnodTest::download_data_test_now()
{
serversdk::RequestManager reqMan;
ColnodAPI colnod(&reqMan);
colnod.downloadData(QDateTime::currentMSecsSinceEpoch());
QSignalSpy spy(&colnod, &ColnodAPI::downloadDataFinished);
QVERIFY(spy.wait());
auto data = qvariant_cast<std::shared_ptr<Data>>(spy.at(0).at(0));
// No latest data
QVERIFY(data);
QVERIFY(data->updatedTokens.isEmpty());
}
void ColnodTest::download_data_fail_test()
{
serversdk::RequestManager reqMan;
ColnodAPI colnod(&reqMan, false, "spaceti", "wrong password");
QSignalSpy spy(&colnod, &ColnodAPI::downloadDataFinished);
colnod.downloadData(0);
QVERIFY(spy.wait());
// FIXME: problem with returning data
auto data = qvariant_cast<std::shared_ptr<Data>>(spy.at(0).at(0));
QVERIFY(!data);
}
QString ColnodTest::getLoginToken(ColnodAPI &colnod)
{
auto login = colnod.requestLogin();
QSignalSpy spy(login.get(), &serversdk::Request::finished);
spy.wait();
return login->responseData().mid(7,36);
}
QTEST_GUILESS_MAIN(ColnodTest)
#include "tst_colnodapi.moc"