diff --git a/packages/doorman-api/tst/integ-local.test.ts b/packages/doorman-api/tst/integ-local.test.ts index 03b2c81..d017c63 100644 --- a/packages/doorman-api/tst/integ-local.test.ts +++ b/packages/doorman-api/tst/integ-local.test.ts @@ -3,7 +3,8 @@ import { waitForService, baseUrl, doorName, buzzerNumber, key, buzzerUrl } from import { DoorStatus } from "../src/types/DoorStatus"; import { StatusResponse } from "../src/functions/api/door/status"; import { sleep } from "bun"; -import { InfoResponseClient } from "../src/functions/api/door/info"; +import { ONBOARDING_DOOR_NAME, ONBOARDING_DOOR_PIN } from "../src/schema/DoorConfig"; +import { LogCallResponse } from "../src/functions/api/door/logCall"; // these tests should only run locally if (process.env.STAGE === 'staging') { @@ -53,7 +54,7 @@ describe("unlock path works", () => { // unlock door with wrong code should be 401 const badAuthResp = await fetch(baseUrl + `/api/door/auth?door=${doorName}&key=thisisthewrongkey`); expect(badAuthResp.status).toBe(401); - + // unlock door with correct code should be 200 const authResp = await fetch(baseUrl + `/api/door/auth?door=${doorName}&key=${key}`); expect(authResp.status).toBe(200); @@ -73,15 +74,56 @@ describe("unlock path works", () => { test("auth works for timeout", async () => { // run status first, to make sure we are closed const statusReset = await fetch(baseUrl + `/api/door/status?door=${doorName}`).then(res => res.json()) as StatusResponse; - + // run auth with timeout specified const authResp = await fetch(baseUrl + `/api/door/auth?door=${doorName}&key=${key}&timeout=1`); - + // sleep 1s await sleep(1_000); - + // we should be closed, because we passed the timeout const infoClosed = await fetch(baseUrl + `/api/door/info?door=${doorName}`).then(res => res.json()) as any; - expect(infoClosed.status).toBe(DoorStatus.CLOSED); + expect(infoClosed.status).toBe(DoorStatus.CLOSED); + }); +}); + +describe("call log path works", () => { + test("call log returns nothing when onboarding is not enabled", async () => { + // run status first, to make sure we are closed + const statusReset = await fetch(baseUrl + `/api/door/status?door=${ONBOARDING_DOOR_NAME}`).then(res => res.json()) as StatusResponse; + + // try to log call + const logCallRes = await fetch(baseUrl + `/api/door/callLog?caller=${buzzerNumber}`); + expect(logCallRes.status).toBe(400); + }); + + test("call log returns 4 digit OTP when onboarding enabled", async () => { + // run status first, to make sure we are closed + const statusReset = await fetch(baseUrl + `/api/door/status?door=${ONBOARDING_DOOR_NAME}`).then(res => res.json()) as StatusResponse; + + // run auth with timeout specified + const authResp = await fetch(baseUrl + `/api/door/auth?door=${ONBOARDING_DOOR_NAME}&key=${ONBOARDING_DOOR_PIN}`); + + // try to log call + const logCallRes = await fetch(baseUrl + `/api/door/callLog?caller=${buzzerNumber}`); + expect(logCallRes.status).toBe(200); + + const otp = (await logCallRes.json() as LogCallResponse).otp + expect(otp.length).toBe(4) + }); + + test("call log after door closed, should not return OTP", async () => { + // run status first, to make sure we are closed + const statusReset = await fetch(baseUrl + `/api/door/status?door=${ONBOARDING_DOOR_NAME}`).then(res => res.json()) as StatusResponse; + + // run auth with timeout specified + const authResp = await fetch(baseUrl + `/api/door/auth?door=${ONBOARDING_DOOR_NAME}&key=${ONBOARDING_DOOR_PIN}&timeout=1`); + + // sleep 1s + await sleep(1_000); + + // try to log call + const logCallRes = await fetch(baseUrl + `/api/door/callLog?caller=${buzzerNumber}`); + expect(logCallRes.status).toBe(400); }); });