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"