/*! * \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 using namespace governikus; class test_MsgHandlerAccessRights : public QObject { Q_OBJECT QSharedPointer getChat(const std::initializer_list& pList) { auto chat = newObject(); chat->setAccessRights(QSet(pList)); return chat; } QSharedPointer getContextWithChat() { QSharedPointer 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 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()); 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"