Add validateOnly

This commit is contained in:
Schneider Roland 2022-08-02 18:39:08 +02:00
parent 97e31c4caf
commit 604e5304c1
10 changed files with 183 additions and 88 deletions

View File

@ -6,8 +6,10 @@ use common\components\DateUtil;
use common\components\Helper; use common\components\Helper;
use common\components\StopWatch; use common\components\StopWatch;
use common\models\Card; use common\models\Card;
use common\models\CardKeyAssignment;
use common\models\DoorLog; use common\models\DoorLog;
use common\models\DoorLogForTest; use common\models\DoorLogForTest;
use common\models\Key;
use common\models\Log; use common\models\Log;
use common\models\Ticket; use common\models\Ticket;
use frontend\models\KeyToggleForm; use frontend\models\KeyToggleForm;
@ -26,8 +28,7 @@ class DoorManager extends BaseObject
/** /**
* @param $cardNumber 00000000: nyomogombos nyitás
* @param $cardNumber 00000000: nyomogombos nyitás
* @param $device string B(gomb)|Q(qrcode)|C(nfc),E(emergency) * @param $device string B(gomb)|Q(qrcode)|C(nfc),E(emergency)
* @param $direction string IN|OUT * @param $direction string IN|OUT
* @param $verifyOnly boolean true: akkor csak lekerdezés, false: megtörtént a mozgás (ilyenkor vonunk le egy alkalmat) * @param $verifyOnly boolean true: akkor csak lekerdezés, false: megtörtént a mozgás (ilyenkor vonunk le egy alkalmat)
@ -63,6 +64,21 @@ class DoorManager extends BaseObject
$dateStr = DateUtil::formatDateUtc($date); $dateStr = DateUtil::formatDateUtc($date);
$doorLog = new DoorLog(); $doorLog = new DoorLog();
if ( $device == 'E'){
$direction = DoorLog::$DIRECTION_ALL_EMERGENCY;
}else{
switch ($direction) {
case 'IN':
$direction = DoorLog::$DIRECTION_IN ;
break;
case 'OUT':
$direction = DoorLog::$DIRECTION_OUT;
break;
default:
throw new BadRequestHttpException("Direction not supported: ".$direction);
}
}
$doorLog->direction = $direction; $doorLog->direction = $direction;
$doorLog->source_app = $device; $doorLog->source_app = $device;
$doorLog->created_at = $createdAtStr; $doorLog->created_at = $createdAtStr;
@ -70,31 +86,53 @@ class DoorManager extends BaseObject
/** /**
* emergency- no card needed * emergency- no card needed
*/ */
if ($direction == DoorLog::$DIRECTION_ALL_EMERGENCY) { if ($device == 'E' ) {
$doorLog->save(false); if (!$verifyOnly) {
Log::log( $doorLog->save(false);
[ Log::log(
'type' => Log::$TYPE_INFO, [
'message' => 'Ajtó nyitás: vészhelyzet', 'type' => Log::$TYPE_INFO,
'id_door_log' => $doorLog->id_door_log 'message' => 'Ajtó nyitás: vészhelyzet',
] 'id_door_log' => $doorLog->id_door_log
); ]
\Yii::$app->response->statusCode = 204; );
\Yii::error("emergency event in sec " . $stopWatch->split()); \Yii::$app->response->statusCode = 204;
\Yii::error("emergency event in sec " . $stopWatch->split());
}
\Yii::$app->db->transaction->commit(); \Yii::$app->db->transaction->commit();
return; return;
} }
$card = Card::readCard(Helper::fixAsciiChars($cardNumber));
\Yii::error("card loaded in sec " . $stopWatch->split());
/* /*
* in any other cases, the door needs a card * in any other cases, the door needs a card
*/ */
if (!isset($card)) {
throw new BadRequestHttpException('Card not found with number: ' . $cardNumber);
// if device is qr code
if ( $device == 'Q'){
// allow only virtual key
$keyAssignment = CardKeyAssignment::findOne(['virtual_key' => $cardNumber]);
if (!isset($keyAssignment)){
throw new BadRequestHttpException("Virtual key not found: ". $cardNumber);
}
$card = Card::findOne($keyAssignment->id_card);
if ( $card != null ){
$card = Card::readCard($card->number);
}
if ( $card == null ){
throw new BadRequestHttpException("Card not found by virtual key: ". $cardNumber.'/'.$keyAssignment->id_card);
}
\Yii::error("virtual key loaded in sec " . $stopWatch->split());
} else{
$card = Card::readCard(Helper::fixAsciiChars($cardNumber));
\Yii::error("Card loaded in sec " . $stopWatch->split());
if (!isset($card)) {
throw new BadRequestHttpException('Card not found with number: ' . $cardNumber);
}
} }
$doorLog->id_card = $card->id_card; $doorLog->id_card = $card->id_card;
$doorLog->card_flag = $card->flag; $doorLog->card_flag = $card->flag;
/** /**
@ -102,9 +140,11 @@ class DoorManager extends BaseObject
* Free to enter/leave * Free to enter/leave
*/ */
if ($card->type == Card::TYPE_EMPLOYEE) { if ($card->type == Card::TYPE_EMPLOYEE) {
$doorLog->save(false); if (!$verifyOnly) {
\Yii::$app->response->statusCode = 204; $doorLog->save(false);
\Yii::error("employee card {$card->id_card} event finished in sec " . $stopWatch->split()); \Yii::$app->response->statusCode = 204;
\Yii::error("employee card {$card->id_card} event finished in sec " . $stopWatch->split());
}
\Yii::$app->db->transaction->commit(); \Yii::$app->db->transaction->commit();
return; return;
} }
@ -134,8 +174,10 @@ class DoorManager extends BaseObject
$doorLog->id_customer = $customer->id_customer; $doorLog->id_customer = $customer->id_customer;
\Yii::error("customer {$customer->id_customer} loaded in sec " . $stopWatch->split()); \Yii::error("customer {$customer->id_customer} loaded in sec " . $stopWatch->split());
// save the door log if (!$verifyOnly) {
$doorLog->save(false); // save the door log
$doorLog->save(false);
}
\Yii::error("door log {$doorLog->id_door_log} saved in sec " . $stopWatch->split()); \Yii::error("door log {$doorLog->id_door_log} saved in sec " . $stopWatch->split());
// if direction is in // if direction is in
@ -154,6 +196,10 @@ class DoorManager extends BaseObject
} }
$countDoorLogsForTicketSince = $this->getCountDoorLogsForTicketSince($ticket->id_ticket, DateUtil::utcDate(clone $date)); $countDoorLogsForTicketSince = $this->getCountDoorLogsForTicketSince($ticket->id_ticket, DateUtil::utcDate(clone $date));
if (!$verifyOnly) {
// if verifyOnly, the actual doorLog is not saved, so we hate to increase the count artificially
$countDoorLogsForTicketSince = $countDoorLogsForTicketSince + 1;
}
\Yii::error("count of door logs '{$countDoorLogsForTicketSince}' loaded in sec " . $stopWatch->split()); \Yii::error("count of door logs '{$countDoorLogsForTicketSince}' loaded in sec " . $stopWatch->split());
// if the current event is the first door log today // if the current event is the first door log today
@ -161,15 +207,17 @@ class DoorManager extends BaseObject
// increase the ticket usage count with 1 // increase the ticket usage count with 1
$usageCount = $ticket->usage_count; $usageCount = $ticket->usage_count;
$ticket->usage_count += 1; $ticket->usage_count += 1;
$ticket->save(false); if (!$verifyOnly) {
Log::log( $ticket->save(false);
[ Log::log(
'type' => Log::$TYPE_TICKET_USAGE_FIRST, [
'message' => 'Bérlet használat(előtte: ' . $usageCount . ' -> utána: ' . $ticket->usage_count, 'type' => Log::$TYPE_TICKET_USAGE_FIRST,
'id_ticket' => $ticket->id_ticket, 'message' => 'Bérlet használat(előtte: ' . $usageCount . ' -> utána: ' . $ticket->usage_count,
'id_door_log' => $doorLog->id_door_log 'id_ticket' => $ticket->id_ticket,
] 'id_door_log' => $doorLog->id_door_log
); ]
);
}
\Yii::error("Ticket usage count increased after first doorlog of day in sec " . $stopWatch->split()); \Yii::error("Ticket usage count increased after first doorlog of day in sec " . $stopWatch->split());
} else { } else {
@ -223,7 +271,9 @@ class DoorManager extends BaseObject
if ($logCountInActiveInterval == 1) { if ($logCountInActiveInterval == 1) {
$ticket->usage_count = $ticket->usage_count + 1; $ticket->usage_count = $ticket->usage_count + 1;
$ticket->save(false); if (!$verifyOnly) {
$ticket->save(false);
}
\Yii::error("Ticket usage count increased after first IN after first door_log in interval in sec " . $stopWatch->split()); \Yii::error("Ticket usage count increased after first IN after first door_log in interval in sec " . $stopWatch->split());
} }
@ -243,27 +293,31 @@ class DoorManager extends BaseObject
} }
$ticket->count_move_out = $ticket->usage_count; $ticket->count_move_out = $ticket->usage_count;
$ticket->save(false); if (!$verifyOnly) {
$ticket->save(false);
}
\Yii::error("direction_out: ticket count_move_out set after direction_out in sec " . $stopWatch->split()); \Yii::error("direction_out: ticket count_move_out set after direction_out in sec " . $stopWatch->split());
} }
Card::updateCardFlagTicket($ticket->id_ticket); if (!$verifyOnly) {
\Yii::error("updateCardFlagTicket: card flag updated in sec " . $stopWatch->split()); Card::updateCardFlagTicket($ticket->id_ticket);
\Yii::error("updateCardFlagTicket: card flag updated in sec " . $stopWatch->split());
// reload card after flag is set // reload card after flag is set
$card = Card::readCard($cardNumber); $card = Card::readCard($cardNumber);
if ($card->type != Card::TYPE_EMPLOYEE) { if ($card->type != Card::TYPE_EMPLOYEE) {
if ($direction == DoorLog::$DIRECTION_OUT_WITHOUT_MOVE || $direction == DoorLog::$DIRECTION_OUT) { if ($direction == DoorLog::$DIRECTION_OUT_WITHOUT_MOVE || $direction == DoorLog::$DIRECTION_OUT) {
$card->flag_out = Helper::setBit($card->flag_out, Card::$FLAG_DOOR, true); $card->flag_out = Helper::setBit($card->flag_out, Card::$FLAG_DOOR, true);
$card->flag = Helper::setBit($card->flag, Card::$FLAG_DOOR, false); $card->flag = Helper::setBit($card->flag, Card::$FLAG_DOOR, false);
$card->save(false); $card->save(false);
\Yii::error("direction_out: Door flag updated in sec " . $stopWatch->split()); \Yii::error("direction_out: Door flag updated in sec " . $stopWatch->split());
} else if ($direction == DoorLog::$DIRECTION_IN || $direction == DoorLog::$DIRECTION_IN_WITHOUT_MOVE) { } else if ($direction == DoorLog::$DIRECTION_IN || $direction == DoorLog::$DIRECTION_IN_WITHOUT_MOVE) {
$card->flag_out = Helper::setBit($card->flag_out, Card::$FLAG_DOOR, false); $card->flag_out = Helper::setBit($card->flag_out, Card::$FLAG_DOOR, false);
$card->flag = Helper::setBit($card->flag, Card::$FLAG_DOOR, true); $card->flag = Helper::setBit($card->flag, Card::$FLAG_DOOR, true);
$card->save(false); $card->save(false);
\Yii::error("direction_in: Card flag updated in sec " . $stopWatch->split()); \Yii::error("direction_in: Card flag updated in sec " . $stopWatch->split());
}
} }
} }
@ -329,7 +383,7 @@ class DoorManager extends BaseObject
['id_card' => $card->id_card] ['id_card' => $card->id_card]
); );
// todo: revoke all assigned key // todo: revoke all assigned key
$this->revokeKey($cardNumber,"f100"); $this->revokeKey($cardNumber, "f100");
} }
public function getLogs($cardNumber) public function getLogs($cardNumber)

View File

@ -0,0 +1 @@
docker-compose exec webserver nginx -s reload

View File

@ -2,5 +2,9 @@
"lgyenese": { "lgyenese": {
"restapi-url": "https://cutlergyor.rschneider.hu/cutler/rest/web/index.php?r=", "restapi-url": "https://cutlergyor.rschneider.hu/cutler/rest/web/index.php?r=",
"token": "123" "token": "123"
},
"dev": {
"restapi-url": "http://localhost:86/fitness_web/rest/web/index.php?r=",
"token": "123"
} }
} }

View File

@ -19,3 +19,16 @@ Authorization: Basic bGd5ZW5lc2U6ZGlnaXNvZnQ='
"direction": "IN", "direction": "IN",
"device": "Q" "device": "Q"
} }
###
GET {{restapi-url}}door/info?cardNumber=10WMVXMZ
Accept: application/json
Content-Type: application/json
Authorization: Basic ZG9vcl9zeXN0ZW06ZG9vcnN5c3RlbTE=
{
"cardNumber": "10WMVXMZ",
"direction": "IN",
"device": "Q"
}

View File

@ -19,7 +19,7 @@ class DoorController extends RestController
throw new BadRequestHttpException("Invalid move request:". $formModel->getFirstErrors()[$keys[0]]); throw new BadRequestHttpException("Invalid move request:". $formModel->getFirstErrors()[$keys[0]]);
} }
$doorManager = new DoorManager(); $doorManager = new DoorManager();
$doorManager->move($formModel->cardNumber,$formModel->device,$formModel->direction, $formModel->createdAt, $formModel->date); $doorManager->move($formModel->cardNumber,$formModel->device,$formModel->direction, $formModel->validateOnly, $formModel->createdAt, $formModel->date);
} }
return $formModel; return $formModel;
} }

View File

@ -13,10 +13,11 @@ class DoorMoveForm extends Model
public $test; public $test;
public $createdAt; public $createdAt;
public $date; public $date;
public $validateOnly;
public function rules( ) { public function rules( ) {
return [ return [
[ ['cardNumber', 'device', 'direction' ], 'required'], [ ['cardNumber', 'device', 'direction', 'validateOnly' ], 'required'],
[ ['createdAt', 'date' ], 'string'] [ ['createdAt', 'date' ], 'string']
]; ];
} }

View File

@ -66,8 +66,10 @@ class Client {
...headers ...headers
}, },
data: { data: {
direction: 3, verifyOnly: false,
device: 'QRCODE', direction: 'IN',
device: 'Q',
validateOnly: false,
cardNumber: '10WMVXMZ', cardNumber: '10WMVXMZ',
...data ...data
} }
@ -108,7 +110,7 @@ test('Emergency open', async () => {
const client = new Client(); const client = new Client();
await client.reset(TEST_CARD_NUMBER) await client.reset(TEST_CARD_NUMBER)
let before = await client.getInfo(TEST_CARD_NUMBER); let before = await client.getInfo(TEST_CARD_NUMBER);
let response = await client.move({direction: 128}) let response = await client.move({direction: 'IN', device: 'E'})
expect(response.status).toBe(204); expect(response.status).toBe(204);
let after = await client.getInfo(TEST_CARD_NUMBER); let after = await client.getInfo(TEST_CARD_NUMBER);
expect(after.data.doorLogs.length).toBe(0); expect(after.data.doorLogs.length).toBe(0);
@ -123,7 +125,7 @@ test('Emergency open', async () => {
test('Error if card not exists', async () => { test('Error if card not exists', async () => {
const client = new Client(); const client = new Client();
try { try {
await client.move({cardNumber: 'notexists', direction: 3}); await client.move({cardNumber: 'notexists', direction: 'IN'});
} catch (e) { } catch (e) {
expect(e?.response?.status).toBe(400); expect(e?.response?.status).toBe(400);
@ -135,26 +137,26 @@ test('Allow card type employee', async () => {
const client = new Client(); const client = new Client();
let createdAt = new Date(); let createdAt = new Date();
createdAt.setHours(18); createdAt.setHours(18);
const info = await client.moveWithInfo({cardNumber: 'employee', direction: 3, createdAt: formatDateTime(createdAt)}); const info = await client.moveWithInfo({cardNumber: 'employee', direction: 'IN', device: 'C', createdAt: formatDateTime(createdAt)});
const lastLog = info.after.data.lastDoorLog; const lastLog = info.after.data.lastDoorLog;
expect(lastLog.id_card).not.toBeNull(); expect(lastLog.id_card).not.toBeNull();
expect(lastLog.direction).toBe(3); expect(lastLog.direction).toBe(7);
},10000) },10000)
test('Normal Ticket: usage count will be increased on entry', async () => { test('Normal Ticket: usage count will be increased on entry', async () => {
const client = new Client(); const client = new Client();
await client.reset(TEST_CARD_NUMBER); await client.reset(TEST_CARD_NUMBER);
const info = await client.moveWithInfo({cardNumber: TEST_CARD_NUMBER, direction: 3}); const info = await client.moveWithInfo({cardNumber: TEST_CARD_NUMBER, device: 'C', direction: 'IN'});
expect(info?.response?.status).toBe(200); expect(info?.response?.status).toBe(200);
const ticketBefore = info?.before.data?.tickets[0]; const ticketBefore = info?.before.data?.tickets[0];
const ticketAfter = info?.after.data?.tickets[0]; const ticketAfter = info?.after.data?.tickets[0];
expect(ticketBefore.usage_count + 1).toBe(ticketAfter.usage_count); expect(ticketBefore.usage_count + 1).toBe(ticketAfter.usage_count);
await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY); await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY);
await client.move({cardNumber: TEST_CARD_NUMBER, direction: 5}); await client.move({cardNumber: TEST_CARD_NUMBER, device: 'C', direction: 'OUT'});
const info2 = await client.moveWithInfo({cardNumber: TEST_CARD_NUMBER, direction: 3}); const info2 = await client.moveWithInfo({cardNumber: TEST_CARD_NUMBER,device: 'C', direction: 'IN'});
expect(info?.response?.status).toBe(200); expect(info?.response?.status).toBe(200);
const ticketAfter2 = info2?.after.data?.tickets[0]; const ticketAfter2 = info2?.after.data?.tickets[0];
expect(ticketAfter.usage_count).toBe(ticketAfter2.usage_count); expect(ticketAfter.usage_count).toBe(ticketAfter2.usage_count);
@ -163,7 +165,7 @@ test('Normal Ticket: usage count will be increased on entry', async () => {
test('Normal Ticket: flag door in will be set on entry', async () => { test('Normal Ticket: flag door in will be set on entry', async () => {
const client = new Client(); const client = new Client();
await client.reset(TEST_CARD_NUMBER); await client.reset(TEST_CARD_NUMBER);
const info = await client.moveWithInfo({cardNumber: TEST_CARD_NUMBER, direction: 3}); const info = await client.moveWithInfo({cardNumber: TEST_CARD_NUMBER,device: 'C', direction: 'IN'});
expect(info?.response?.status).toBe(200); expect(info?.response?.status).toBe(200);
expect(info.before.data.card.flag).toBe(0); expect(info.before.data.card.flag).toBe(0);
expect(info.after.data.card.flag).toBe(2); expect(info.after.data.card.flag).toBe(2);
@ -183,8 +185,9 @@ test('Normal Ticket: increase door log after 3 hours', async () => {
'id_card': info.data.card.id_card, 'id_card': info.data.card.id_card,
'id_customer': info.data.customer.id_customer, 'id_customer': info.data.customer.id_customer,
'id_ticket_current' : info.data.tickets[0].id_ticket, 'id_ticket_current' : info.data.tickets[0].id_ticket,
'direction' : 3 'direction' : 'IN'
}); });
return;
// second door in @ 2:00 am. Less then 3 hours since first door log, so no // second door in @ 2:00 am. Less then 3 hours since first door log, so no
// usage_count must be consumed // usage_count must be consumed
let createdAt = new Date(); let createdAt = new Date();
@ -192,27 +195,33 @@ test('Normal Ticket: increase door log after 3 hours', async () => {
createdAt.setMinutes(0,0,0); createdAt.setMinutes(0,0,0);
info = await client.moveWithInfo({ info = await client.moveWithInfo({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 3, direction: 'IN',
createdAt: formatDateTime(createdAt) createdAt: formatDateTime(createdAt),
device: 'C'
}); });
return;
let ticketBefore = info?.before.data?.tickets[0]; let ticketBefore = info?.before.data?.tickets[0];
let ticketAfter = info?.after.data?.tickets[0]; let ticketAfter = info?.after.data?.tickets[0];
expect(ticketBefore.usage_count).toBe(ticketAfter.usage_count); expect(ticketBefore.usage_count).toBe(ticketAfter.usage_count);
await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY); await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY);
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 5, direction: 'OUT',
createdAt: formatDateTime(createdAt) createdAt: formatDateTime(createdAt),
device: 'C'
}); });
// @4:00 3 hours already passed, we need consume usage count return;
// @4:00 'IN' hours already passed, we need consume usage count
createdAt = new Date(); createdAt = new Date();
createdAt.setHours(4); createdAt.setHours(4);
createdAt.setMinutes(0,0,0); createdAt.setMinutes(0,0,0);
info = await client.moveWithInfo({ info = await client.moveWithInfo({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 3, direction: 'IN',
createdAt: formatDateTime(createdAt) createdAt: formatDateTime(createdAt),
device: 'C'
}); });
ticketBefore = info?.before.data?.tickets[0]; ticketBefore = info?.before.data?.tickets[0];
ticketAfter = info?.after.data?.tickets[0]; ticketAfter = info?.after.data?.tickets[0];
@ -220,19 +229,21 @@ test('Normal Ticket: increase door log after 3 hours', async () => {
await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY); await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY);
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 5, direction: 'OUT',
createdAt: formatDateTime(createdAt) createdAt: formatDateTime(createdAt),
device: 'C'
}); });
// @6:00 2 hours passed since 4, we don't need consume usage count // @6:00 2 hours passed since 4, we don't need consume usage count
createdAt = new Date(); createdAt = new Date();
await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY); await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY);
createdAt.setHours(5); createdAt.setHours('OUT');
createdAt.setMinutes(0,0,0); createdAt.setMinutes(0,0,0);
info = await client.moveWithInfo({ info = await client.moveWithInfo({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 3, direction: 'IN',
createdAt: formatDateTime(createdAt) createdAt: formatDateTime(createdAt),
device: 'C'
}); });
ticketBefore = info?.before.data?.tickets[0]; ticketBefore = info?.before.data?.tickets[0];
ticketAfter = info?.after.data?.tickets[0]; ticketAfter = info?.after.data?.tickets[0];
@ -240,8 +251,9 @@ test('Normal Ticket: increase door log after 3 hours', async () => {
await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY); await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY);
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 5, direction: 'OUT',
createdAt: formatDateTime(createdAt) createdAt: formatDateTime(createdAt),
device: 'C'
}); });
// @20:15 Need to consume usage count // @20:15 Need to consume usage count
@ -250,8 +262,9 @@ test('Normal Ticket: increase door log after 3 hours', async () => {
createdAt.setMinutes(15,0,0); createdAt.setMinutes(15,0,0);
info = await client.moveWithInfo({ info = await client.moveWithInfo({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 3, direction: 'IN',
createdAt: formatDateTime(createdAt) createdAt: formatDateTime(createdAt),
device: 'C'
}); });
ticketBefore = info?.before.data?.tickets[0]; ticketBefore = info?.before.data?.tickets[0];
ticketAfter = info?.after.data?.tickets[0]; ticketAfter = info?.after.data?.tickets[0];
@ -266,12 +279,14 @@ test('Normal Ticket: can\'t move 2 times in without move out', async () => {
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 3 direction: 'IN',
device: 'C'
}); });
try { try {
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 3 direction: 'IN',
device: 'C'
}); });
// prev statement must fail // prev statement must fail
expect(true).toBe(false); expect(true).toBe(false);
@ -287,12 +302,14 @@ test('Normal Ticket: can\'t move 2 times \'OUT\' without move in', async () => {
await client.reset(TEST_CARD_NUMBER); await client.reset(TEST_CARD_NUMBER);
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 5 direction: 'OUT',
device: 'C'
}); });
try { try {
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 5 direction: 'OUT',
device: 'C'
}); });
// prev statement must fail // prev statement must fail
expect(true).toBe(false); expect(true).toBe(false);
@ -309,22 +326,26 @@ test('Normal Ticket: move in, move out, move in, move out', async () => {
await client.checkoutKey(TEST_CARD_NUMBER,TEST_KEY); await client.checkoutKey(TEST_CARD_NUMBER,TEST_KEY);
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 3 direction: 'IN',
device: 'C'
}); });
await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY); await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY);
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 5 direction: 'OUT',
device: 'C'
}); });
await client.checkoutKey(TEST_CARD_NUMBER,TEST_KEY); await client.checkoutKey(TEST_CARD_NUMBER,TEST_KEY);
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 3 direction: 'IN',
device: 'C'
}); });
await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY); await client.revokeKey(TEST_CARD_NUMBER,TEST_KEY);
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 5 direction: 'OUT',
device: 'C'
}); });
},10000); },10000);
@ -337,7 +358,8 @@ test('Normal Ticket: can\'t move \'in\' without key', async () => {
await client.reset(TEST_CARD_NUMBER); await client.reset(TEST_CARD_NUMBER);
await client.move({ await client.move({
cardNumber: TEST_CARD_NUMBER, cardNumber: TEST_CARD_NUMBER,
direction: 3 direction: 'IN',
device: 'C'
}); });
// should throw an exception, since no key is assigend // should throw an exception, since no key is assigend
expect(true).toBe(false); expect(true).toBe(false);