From b56bb7200c4169c92a882bc2abdb4e206229755b Mon Sep 17 00:00:00 2001 From: "Michael J. Roberts" Date: Mon, 24 Apr 2023 12:41:33 +0100 Subject: [PATCH] feat: Added client.focuser.getStatus() route handler. feat: Added client.focuser.getStatus() route handler. Includes associated test suite for module export definition and expected output from API route. --- src/routes/focuser.ts | 13 +++++++++++++ tests/focuserRoutes.spec.ts | 12 ++++++++++++ tests/mocks/focuser.ts | 11 +++++++++++ 3 files changed, 36 insertions(+) diff --git a/src/routes/focuser.ts b/src/routes/focuser.ts index 34e3e90..6ca19fb 100644 --- a/src/routes/focuser.ts +++ b/src/routes/focuser.ts @@ -62,5 +62,18 @@ export const focuser = ( const url = new URL('focuser/temperature', base) return dispatchRequest(url, init, headers) } + }, + { + name: 'getStatus', + action: < + T = { + connected: boolean + moving: boolean + position: number + } + >() => { + const url = new URL('focuser/status', base) + return dispatchRequest(url, init, headers) + } } ] as const diff --git a/tests/focuserRoutes.spec.ts b/tests/focuserRoutes.spec.ts index 73dbcbd..6b2d071 100644 --- a/tests/focuserRoutes.spec.ts +++ b/tests/focuserRoutes.spec.ts @@ -54,5 +54,17 @@ suite('@observerly/hyper Fiber API Focuser Client', () => { if (!isDataResult(temperature)) return expect(temperature).toStrictEqual({ temperature: 20 }) }) + + it('should be able to determine the status of the focuser', async () => { + const client = setupClient(getURL('/api/v1/')) + const status = await client.focuser.getStatus() + expect(isDataResult(status)).toBe(true) + if (!isDataResult(status)) return + expect(status).toStrictEqual({ + connected: true, + moving: false, + position: 10000 + }) + }) }) }) diff --git a/tests/mocks/focuser.ts b/tests/mocks/focuser.ts index dc153df..b266b81 100644 --- a/tests/mocks/focuser.ts +++ b/tests/mocks/focuser.ts @@ -51,5 +51,16 @@ export const focuserHandlers: Handler[] = [ temperature: 20 } }) + }, + { + method: 'GET', + url: '/api/v1/focuser/status', + handler: eventHandler(_event => { + return { + connected: true, + moving: false, + position: 10000 + } + }) } ]