1 /*!
2  * \copyright Copyright (c) 2018-2021 Governikus GmbH & Co. KG, Germany
3  */
4 
5 #include "MsgHandlerEnterPassword.h"
6 
7 #include "MockCardConnection.h"
8 #include "MockReaderManagerPlugIn.h"
9 #include "ReaderManager.h"
10 
11 #include <QTest>
12 
13 using namespace governikus;
14 
setValidState(MessageDispatcher & pDispatcher,bool pSelectReader,bool pBasicReader,const PacePasswordId pPasswordID,const QLatin1String & pState,const QSharedPointer<WorkflowContext> pContext)15 void governikus::setValidState(MessageDispatcher& pDispatcher,
16 		bool pSelectReader,
17 		bool pBasicReader,
18 		const PacePasswordId pPasswordID,
19 		const QLatin1String& pState,
20 		const QSharedPointer<WorkflowContext> pContext)
21 {
22 	pDispatcher.init(pContext);
23 	pContext->setEstablishPaceChannelType(pPasswordID);
24 
25 	QByteArray expected;
26 	if (pPasswordID == PacePasswordId::PACE_PIN)
27 	{
28 		expected = R"({"msg":"ENTER_PIN"})";
29 	}
30 	else if (pPasswordID == PacePasswordId::PACE_CAN)
31 	{
32 		expected = R"({"msg":"ENTER_CAN"})";
33 	}
34 	else if (pPasswordID == PacePasswordId::PACE_PUK)
35 	{
36 		expected = R"({"msg":"ENTER_PUK"})";
37 	}
38 
39 	if (pState == QLatin1String("StateEnterNewPacePin"))
40 	{
41 		expected = R"({"msg":"ENTER_NEW_PIN"})";
42 	}
43 
44 	QCOMPARE(pDispatcher.processStateChange(pState), expected);
45 
46 	if (pSelectReader)
47 	{
48 		auto* reader = MockReaderManagerPlugIn::getInstance().addReader("MockReader CARD");
49 		auto info = reader->getReaderInfo();
50 		info.setBasicReader(pBasicReader);
51 		reader->setReaderInfo(info);
52 		reader->setCard(MockCardConfig());
53 		pContext->setReaderName("MockReader CARD");
54 
55 		QSharedPointer<CardConnection> cardConnection(new MockCardConnection(reader->getReaderInfo()));
56 		pContext->setCardConnection(cardConnection);
57 		pContext->rememberReader();
58 	}
59 }
60 
61 
addReaderData(const char * pData,bool pKeyPad)62 QByteArray governikus::addReaderData(const char* pData, bool pKeyPad)
63 {
64 	const QByteArray data(pData);
65 	const QByteArray part1(R"(,"reader":{"attached":true,"card":{"deactivated":false,"inoperative":false,"retryCounter":-1},"keypad":)");
66 	const QByteArray keypad = pKeyPad ? QByteArrayLiteral("true") : QByteArrayLiteral("false");
67 	const QByteArray part2(R"(,"name":"MockReader CARD"})");
68 	return data.mid(0, data.size() - 1) + part1 + keypad + part2 + QByteArrayLiteral("}");
69 }
70