2017-07-03 09:30:10 +02:00
/*!
* \ brief Unit tests for \ ref MsgHandlerEnterPin
*
* \ copyright Copyright ( c ) 2016 Governikus GmbH & Co . KG
*/
# include "messages/MsgHandlerEnterPin.h"
# include "MessageDispatcher.h"
# include "MockReaderManagerPlugIn.h"
# include "ReaderManager.h"
# include <QtPlugin>
2017-09-15 10:23:30 +02:00
# include <QTest>
2017-07-03 09:30:10 +02:00
Q_IMPORT_PLUGIN ( MockReaderManagerPlugIn )
using namespace governikus ;
class test_MsgHandlerEnterPin
: public QObject
{
Q_OBJECT
static void setValidPinState ( MessageDispatcher & pDispatcher , const QString & pState = QStringLiteral ( " StateEstablishPacePin " ) )
{
QSharedPointer < WorkflowContext > context ( new WorkflowContext ( ) ) ;
pDispatcher . init ( context ) ;
QByteArray expected ;
if ( pState = = QLatin1String ( " StateEstablishPacePin " ) )
{
expected = " { \" msg \" : \" ENTER_PIN \" } " ;
}
QCOMPARE ( pDispatcher . processStateChange ( pState ) , expected ) ;
}
private Q_SLOTS :
void initTestCase ( )
{
ReaderManager : : getInstance ( ) . init ( ) ;
ReaderManager : : getInstance ( ) . getPlugInInfos ( ) ; // just to wait until initialization finished
}
void cleanupTestCase ( )
{
ReaderManager : : getInstance ( ) . shutdown ( ) ;
}
void undefined ( )
{
MessageDispatcher dispatcher ;
setValidPinState ( dispatcher ) ;
QByteArray msg ( " { \" cmd \" : \" SET_PIN \" } " ) ;
QCOMPARE ( dispatcher . processCommand ( msg ) , QByteArray ( " { \" error \" : \" Value cannot be undefined \" , \" msg \" : \" ENTER_PIN \" } " ) ) ;
}
void invalid ( )
{
MessageDispatcher dispatcher ;
setValidPinState ( dispatcher ) ;
2017-07-03 09:33:28 +02:00
QByteArray msg ( " { \" cmd \" : \" SET_PIN \" , \" value \" : 123456} " ) ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , QByteArray ( " { \" error \" : \" Invalid value \" , \" msg \" : \" ENTER_PIN \" } " ) ) ;
}
void badInput ( )
{
MessageDispatcher dispatcher ;
setValidPinState ( dispatcher ) ;
2017-07-03 09:33:28 +02:00
QByteArray msg ( " { \" cmd \" : \" SET_PIN \" , \" value \" : \" 12345 \" } " ) ;
2017-07-03 09:30:10 +02:00
QByteArray expected ( " { \" error \" : \" You must provide 6 digits \" , \" msg \" : \" ENTER_PIN \" } " ) ;
QCOMPARE ( dispatcher . processCommand ( msg ) , expected ) ;
2017-07-03 09:33:28 +02:00
msg = " { \" cmd \" : \" SET_PIN \" , \" value \" : \" 1234567 \" } " ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , expected ) ;
2017-07-03 09:33:28 +02:00
msg = " { \" cmd \" : \" SET_PIN \" , \" value \" : \" abcdef \" } " ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , expected ) ;
2017-07-03 09:33:28 +02:00
msg = " { \" cmd \" : \" SET_PIN \" , \" value \" : \" \" } " ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , expected ) ;
2017-07-03 09:33:28 +02:00
msg = " { \" cmd \" : \" SET_PIN \" , \" value \" : \" 123456a \" } " ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , expected ) ;
2017-07-03 09:33:28 +02:00
msg = " { \" cmd \" : \" SET_PIN \" , \" value \" : \" 12x456 \" } " ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , expected ) ;
}
void badState ( )
{
MessageDispatcher dispatcher ;
setValidPinState ( dispatcher , QStringLiteral ( " invalid " ) ) ;
2017-07-03 09:33:28 +02:00
QByteArray msg ( " { \" cmd \" : \" SET_PIN \" , \" value \" : \" 12345 \" } " ) ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , QByteArray ( " { \" error \" : \" SET_PIN \" , \" msg \" : \" BAD_STATE \" } " ) ) ;
2017-07-03 09:33:28 +02:00
msg = " { \" cmd \" : \" SET_PIN \" , \" value \" : \" 123456 \" } " ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , QByteArray ( " { \" error \" : \" SET_PIN \" , \" msg \" : \" BAD_STATE \" } " ) ) ;
}
void noDirectResponseIfPinLooksValid ( )
{
MessageDispatcher dispatcher ;
setValidPinState ( dispatcher ) ;
2017-07-03 09:33:28 +02:00
QByteArray msg ( " { \" cmd \" : \" SET_PIN \" , \" value \" : \" 123456 \" } " ) ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , QByteArray ( ) ) ;
}
void readerInfo ( )
{
MockReader * reader = MockReaderManagerPlugIn : : getInstance ( ) . addReader ( " MockReader CARD " ) ;
reader - > setCard ( MockCardConfig ( ) ) ;
QSharedPointer < WorkflowContext > context ( new WorkflowContext ( ) ) ;
MessageDispatcher dispatcher ;
dispatcher . init ( context ) ;
context - > setReaderName ( " MockReader " ) ;
QCOMPARE ( dispatcher . processStateChange ( " StateEstablishPacePin " ) , QByteArray ( " { \" msg \" : \" ENTER_PIN \" } " ) ) ;
2017-07-03 09:33:28 +02:00
QByteArray msg = " { \" cmd \" : \" SET_PIN \" , \" value \" : \" 54321 \" } " ;
2017-07-03 09:30:10 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , QByteArray ( " { \" error \" : \" You must provide 6 digits \" , \" msg \" : \" ENTER_PIN \" } " ) ) ;
context - > setReaderName ( " MockReader CARD " ) ;
2017-09-15 10:23:30 +02:00
QCOMPARE ( dispatcher . processStateChange ( " StateEstablishPacePin " ) , QByteArray ( " { \" msg \" : \" ENTER_PIN \" , \" reader \" :{ \" attached \" :true, \" card \" :{ \" deactivated \" :false, \" inoperative \" :false, \" retryCounter \" :-1}, \" name \" : \" MockReader CARD \" }} " ) ) ;
2017-07-03 09:33:28 +02:00
msg = " { \" cmd \" : \" SET_PIN \" , \" value \" : \" 54321 \" } " ;
2017-09-15 10:23:30 +02:00
QCOMPARE ( dispatcher . processCommand ( msg ) , QByteArray ( " { \" error \" : \" You must provide 6 digits \" , \" msg \" : \" ENTER_PIN \" , \" reader \" :{ \" attached \" :true, \" card \" :{ \" deactivated \" :false, \" inoperative \" :false, \" retryCounter \" :-1}, \" name \" : \" MockReader CARD \" }} " ) ) ;
2017-07-03 09:30:10 +02:00
}
} ;
QTEST_GUILESS_MAIN ( test_MsgHandlerEnterPin )
# include "test_MsgHandlerEnterPin.moc"