AusweisApp2/test/qt/jsonapi/test_MsgHandlerAccessRights.cpp

164 lines
7 KiB
C++
Raw Normal View History

2017-07-03 09:30:10 +02:00
/*!
* \brief Unit tests for \ref MsgHandlerAccessRights
*
* \copyright Copyright (c) 2016 Governikus GmbH & Co. KG
*/
#include "messages/MsgHandlerAccessRights.h"
#include "InternalActivationContext.h"
#include "MessageDispatcher.h"
2017-07-03 09:33:28 +02:00
#include "TestAuthContext.h"
2017-07-03 09:30:10 +02:00
#include <QtTest>
using namespace governikus;
class test_MsgHandlerAccessRights
: public QObject
{
Q_OBJECT
QSharedPointer<CHAT> getChat(const std::initializer_list<AccessRight>& pList)
{
auto chat = newObject<CHAT>();
chat->setAccessRights(QSet<AccessRight>(pList));
return chat;
}
2017-07-03 09:33:28 +02:00
QSharedPointer<TestAuthContext> getContextWithChat()
2017-07-03 09:30:10 +02:00
{
2017-07-03 09:33:28 +02:00
QSharedPointer<TestAuthContext> context(new TestAuthContext(new InternalActivationContext(QUrl("http://dummy")), ":/paos/DIDAuthenticateEAC1.xml"));
context->setRequiredAccessRights({AccessRight::READ_DG01, AccessRight::READ_DG04});
context->setOptionalAccessRights({AccessRight::AGE_VERIFICATION, AccessRight::READ_DG05});
2017-07-03 09:30:10 +02:00
return context;
}
private Q_SLOTS:
void state()
{
MessageDispatcher dispatcher;
dispatcher.init(getContextWithChat());
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processStateChange("StateEditAccessRights"), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
}
void getAccessRightsBadState()
{
MessageDispatcher dispatcher;
QByteArray msg = QByteArray("{\"cmd\": \"GET_ACCESS_RIGHTS\"}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"GET_ACCESS_RIGHTS\",\"msg\":\"BAD_STATE\"}"));
dispatcher.init(getContextWithChat());
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"GET_ACCESS_RIGHTS\",\"msg\":\"BAD_STATE\"}"));
}
void acceptAccessRights()
{
const auto& context = getContextWithChat();
MessageDispatcher dispatcher;
dispatcher.init(context);
QVERIFY(!context->isStateApproved());
QVERIFY(!dispatcher.processStateChange("StateEditAccessRights").isEmpty());
QVERIFY(!context->isStateApproved());
QByteArray msg = QByteArray("{\"cmd\": \"GET_ACCESS_RIGHTS\"}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
msg = QByteArray("{\"cmd\": \"ACCEPT\"}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray());
QVERIFY(context->isStateApproved());
}
void getAccessRights()
{
MessageDispatcher dispatcher;
dispatcher.init(getContextWithChat());
QVERIFY(!dispatcher.processStateChange("StateEditAccessRights").isEmpty());
QByteArray msg = QByteArray("{\"cmd\": \"GET_ACCESS_RIGHTS\"}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
}
void setAccessRights()
{
MessageDispatcher dispatcher;
dispatcher.init(getContextWithChat());
QVERIFY(!dispatcher.processStateChange("StateEditAccessRights").isEmpty());
QByteArray msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [8,\"11\"]}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"Entry in 'raw' data needs to be integer\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0, 123]}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"Entry in 'raw' data is invalid\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
2017-07-03 09:33:28 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [12]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0, 11]}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"Entry in 'raw' data is invalid\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
2017-07-03 09:33:28 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0,12]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0]}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
2017-07-03 09:33:28 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0,12]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": []}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[11,8],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
}
void setAccessRightsWithoutChat()
{
2017-07-03 09:33:28 +02:00
const auto& context = getContextWithChat();
context->setOptionalAccessRights({});
2017-07-03 09:30:10 +02:00
MessageDispatcher dispatcher;
dispatcher.init(context);
QVERIFY(!dispatcher.processStateChange("StateEditAccessRights").isEmpty());
QByteArray msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0]}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"No optional access rights available\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[11,8],\"optional\":[],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
2017-07-03 09:33:28 +02:00
context->setOptionalAccessRights({AccessRight::AGE_VERIFICATION});
2017-07-03 09:30:10 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0]}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[11,8,0],\"optional\":[0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
2017-07-03 09:33:28 +02:00
context->setRequiredAccessRights({AccessRight::AGE_VERIFICATION});
context->setOptionalAccessRights({});
2017-07-03 09:30:10 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"No optional access rights available\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[0],\"optional\":[],\"required\":[0]}}"));
}
void crap()
{
MessageDispatcher dispatcher;
dispatcher.init(getContextWithChat());
QVERIFY(!dispatcher.processStateChange("StateEditAccessRights").isEmpty());
QByteArray msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": null}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"Invalid 'raw' data\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"RAW\": []}");
2017-07-03 09:33:28 +02:00
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"'raw' cannot be undefined\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[12,11,8,0],\"optional\":[12,0],\"required\":[11,8]}}"));
2017-07-03 09:30:10 +02:00
}
};
QTEST_GUILESS_MAIN(test_MsgHandlerAccessRights)
#include "test_MsgHandlerAccessRights.moc"