door manager

This commit is contained in:
Schneider Roland
2022-05-04 19:41:18 +02:00
parent fb39d6599e
commit 946799a598
20 changed files with 8872 additions and 220 deletions

7715
test/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

20
test/package.json Normal file
View File

@@ -0,0 +1,20 @@
{
"name": "rest-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "jest",
"test:watch": "jest --watch"
},
"author": "",
"license": "ISC",
"devDependencies": {
"jest": "^27.5.1",
"supertest": "^6.2.2"
},
"dependencies": {
"axios": "^0.27.0",
"node-fetch": "^3.2.3"
}
}

212
test/src/rest/move.test.js Normal file
View File

@@ -0,0 +1,212 @@
// const fetch = require('node-fetch');
// const {test, expect} = require('jest')
const axios = require('axios');
const url = 'http://localhost:86/fitness_web/rest/web/index.php?r=';
const auth = "Basic ZG9vcl9zeXN0ZW06ZG9vcnN5c3RlbTE=";
const TEST_CARD_NUMBER = "10WMVXMZ";
const TEST_AUTH_HEADER = {
'Authorization': auth
};
function fail(reason = "fail was called in a test.") {
throw new Error(reason);
}
function secondsSinceEpoch(d){
return Math.floor( d.getTime() / 1000 );
}
global.fail = fail;
function formatDateTime(date){
let s = date.getFullYear()
+ "-"
+ (date.getMonth() + 1+"").padStart(2,"0")
+ "-"
+ (date.getDate() +"").padStart(2,"0")
+ " "
+ (date.getHours()+"").padStart(2,"0")
+ ":"
+ (date.getMinutes()+"").padStart(2,"0")
+ ":"
+ "00";
console.info(s);
return s;
}
// This test fails because 1 !== 2
test('Testing to see if Jest works', () => {
expect(1).toBe(1)
})
class Client {
async reset($cardNumber) {
return await axios.get(url + 'door/reset&cardNumber=' + $cardNumber, {
headers: {...TEST_AUTH_HEADER}
});
}
async getInfo($cardNumber) {
return await axios.get(url + 'door/info&cardNumber=' + $cardNumber, {
headers: {...TEST_AUTH_HEADER}
});
}
async createDoorLog(doorlog) {
return await axios.post(url + 'door/create-door-log', doorlog,{
headers: {...TEST_AUTH_HEADER},
});
}
async move(data, headers) {
return await axios.get(url + 'door/move', {
headers: {
...TEST_AUTH_HEADER,
...headers
},
data: {
direction: 3,
device: 'QRCODE',
cardNumber: '10WMVXMZ',
...data
}
});
}
async moveWithInfo(data, headers) {
const before = await this.getInfo(data.cardNumber);
const response = await this.move(data, headers);
const after = await this.getInfo(data.cardNumber);
return {
before,
response,
after
}
}
}
test('Emergency open', async () => {
try {
const client = new Client();
await client.reset(TEST_CARD_NUMBER)
let before = await client.getInfo(TEST_CARD_NUMBER);
let response = await client.move({direction: 128})
expect(response.status).toBe(204);
let after = await client.getInfo(TEST_CARD_NUMBER);
// console.info("before:after", before.data.doorLogCount, after.data.doorLogCount);
expect(after.data.doorLogs.length).toBe(0);
expect(after.data.doorLogCount).toBe("" + (parseInt(before.data.doorLogCount) + 1));
expect(after.data.lastDoorLog?.direction).toBe(128);
} catch (e) {
throw e;
}
})
test('Error if card not exists', async () => {
const client = new Client();
try {
await client.move({cardNumber: 'notexists', direction: 3});
} catch (e) {
expect(e?.response?.status).toBe(400);
}
expect.assertions(1);
})
test('Allow card type employee', async () => {
const client = new Client();
let createdAt = new Date();
createdAt.setHours(18);
const info = await client.moveWithInfo({cardNumber: 'employee', direction: 3, createdAt: secondsSinceEpoch(createdAt)});
// console.info("employee ready");
const lastLog = info.after.data.lastDoorLog;
expect(lastLog.id_card).not.toBeNull();
expect(lastLog.direction).toBe(3);
})
test('Normal Ticket: usage count will be increased on entry', async () => {
const client = new Client();
client.reset(TEST_CARD_NUMBER);
const info = await client.moveWithInfo({cardNumber: TEST_CARD_NUMBER, direction: 3});
expect(info?.response?.status).toBe(200);
const ticketBefore = info?.before.data?.tickets[0];
const ticketAfter = info?.after.data?.tickets[0];
expect(ticketBefore.usage_count + 1).toBe(ticketAfter.usage_count);
const info2 = await client.moveWithInfo({cardNumber: TEST_CARD_NUMBER, direction: 3});
expect(info?.response?.status).toBe(200);
const ticketAfter2 = info2?.after.data?.tickets[0];
expect(ticketAfter.usage_count).toBe(ticketAfter2.usage_count);
})
test('Normal Ticket: increase door log after 3 hours', async () => {
const client = new Client();
client.reset(TEST_CARD_NUMBER);
let info = await client.getInfo(TEST_CARD_NUMBER);
// First log on this day
let date = new Date();
date.setHours(1);
date.setMinutes(0,0,0);
await client.createDoorLog({
'created_at' : formatDateTime( date ),
'id_card': info.data.card.id_card,
'id_customer': info.data.customer.id_customer,
'id_ticket_current' : info.data.tickets[0].id_ticket,
'direction' : 3
});
// second door in @ 2:00 am. Less then 3 hours since first door log, so no
// usage_count must be consumed
let createdAt = new Date();
createdAt.setHours(2);
createdAt.setMinutes(0,0,0);
info = await client.moveWithInfo({
cardNumber: TEST_CARD_NUMBER,
direction: 3,
createdAt: formatDateTime(createdAt)
});
let ticketBefore = info?.before.data?.tickets[0];
let ticketAfter = info?.after.data?.tickets[0];
expect(ticketBefore.usage_count).toBe(ticketAfter.usage_count);
// @4:00 3 hours already passed, we need consume usage count
createdAt = new Date();
createdAt.setHours(4);
createdAt.setMinutes(0,0,0);
info = await client.moveWithInfo({
cardNumber: TEST_CARD_NUMBER,
direction: 3,
createdAt: formatDateTime(createdAt)
});
ticketBefore = info?.before.data?.tickets[0];
ticketAfter = info?.after.data?.tickets[0];
expect(ticketBefore.usage_count+1).toBe(ticketAfter.usage_count);
// @6:00 2 hours passed since 4, we don't need consume usage count
createdAt = new Date();
createdAt.setHours(5);
createdAt.setMinutes(0,0,0);
info = await client.moveWithInfo({
cardNumber: TEST_CARD_NUMBER,
direction: 3,
createdAt: formatDateTime(createdAt)
});
ticketBefore = info?.before.data?.tickets[0];
ticketAfter = info?.after.data?.tickets[0];
expect(ticketBefore.usage_count).toBe(ticketAfter.usage_count);
// @20:15 Need to consume usage count
createdAt = new Date();
createdAt.setHours(20);
createdAt.setMinutes(15,0,0);
info = await client.moveWithInfo({
cardNumber: TEST_CARD_NUMBER,
direction: 3,
createdAt: formatDateTime(createdAt)
});
ticketBefore = info?.before.data?.tickets[0];
ticketAfter = info?.after.data?.tickets[0];
expect(ticketBefore.usage_count+1).toBe(ticketAfter.usage_count);
},10000)