AusweisApp2/test/qt/jsonapi/test_MsgHandlerAccessRights.cpp

164 lines
7.1 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"
#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;
}
QSharedPointer<AuthContext> getContextWithChat()
{
QSharedPointer<AuthContext> context(new AuthContext(new InternalActivationContext(QUrl("http://dummy"))));
context->setRequiredChat(getChat({AccessRight::READ_DG01, AccessRight::READ_DG04}));
context->setOptionalChat(getChat({AccessRight::AGE_VERIFICATION, AccessRight::READ_DG21}));
context->setEffectiveChat(getChat({AccessRight::READ_DG01, AccessRight::READ_DG04, AccessRight::READ_DG21, AccessRight::AGE_VERIFICATION}));
return context;
}
private Q_SLOTS:
void state()
{
MessageDispatcher dispatcher;
dispatcher.init(getContextWithChat());
QCOMPARE(dispatcher.processStateChange("StateEditAccessRights"), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
}
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\"}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
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\"}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
}
void setAccessRights()
{
MessageDispatcher dispatcher;
dispatcher.init(getContextWithChat());
QVERIFY(!dispatcher.processStateChange("StateEditAccessRights").isEmpty());
QByteArray msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [8,\"11\"]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"Entry in 'raw' data needs to be integer\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0, 123]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"Entry in 'raw' data is invalid\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [28]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8],\"optional\":[28,0],\"required\":[11,8]}}"));
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0, 11]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"Entry in 'raw' data is invalid\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8],\"optional\":[28,0],\"required\":[11,8]}}"));
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0,28]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0,28]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": []}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[11,8],\"optional\":[28,0],\"required\":[11,8]}}"));
}
void setAccessRightsWithoutChat()
{
const QSharedPointer<AuthContext> context(new AuthContext(new InternalActivationContext(QUrl("http://dummy"))));
context->setEffectiveChat(getChat({}));
MessageDispatcher dispatcher;
dispatcher.init(context);
QVERIFY(!dispatcher.processStateChange("StateEditAccessRights").isEmpty());
QByteArray msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"No optional access rights available\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[],\"optional\":[],\"required\":[]}}"));
context->setOptionalChat(getChat({AccessRight::AGE_VERIFICATION}));
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"raw\": [0]}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[0],\"optional\":[0],\"required\":[]}}"));
context->setOptionalChat(QSharedPointer<CHAT>());
context->setRequiredChat(getChat({AccessRight::AGE_VERIFICATION}));
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}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"Invalid 'raw' data\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
msg = QByteArray("{\"cmd\": \"SET_ACCESS_RIGHTS\", \"RAW\": []}");
QCOMPARE(dispatcher.processCommand(msg), QByteArray("{\"error\":\"'raw' cannot be undefined\",\"msg\":\"ACCESS_RIGHTS\",\"raw\":{\"effective\":[28,11,8,0],\"optional\":[28,0],\"required\":[11,8]}}"));
}
};
QTEST_GUILESS_MAIN(test_MsgHandlerAccessRights)
#include "test_MsgHandlerAccessRights.moc"