From 7afa32d12a9e32ac4c3f0f54d9cb1f5dea910eac Mon Sep 17 00:00:00 2001 From: "Michael J. Roberts" Date: Sat, 13 Apr 2024 15:24:39 +0100 Subject: [PATCH] feat: added client.exposure.isReady() router handler. feat: added client.exposure.isReady() router handler. Includes associated test suite for module export definition and expected output from API route. --- src/routes/exposure.ts | 34 ++++++++++++++++++++++++++++++++++ src/routes/index.ts | 2 ++ tests/exposure.spec.ts | 35 +++++++++++++++++++++++++++++++++++ tests/mocks/exposure.ts | 29 +++++++++++++++++++++++++++++ tests/mocks/handlers.ts | 2 ++ 5 files changed, 102 insertions(+) create mode 100644 src/routes/exposure.ts create mode 100644 tests/exposure.spec.ts create mode 100644 tests/mocks/exposure.ts diff --git a/src/routes/exposure.ts b/src/routes/exposure.ts new file mode 100644 index 0000000..480b49f --- /dev/null +++ b/src/routes/exposure.ts @@ -0,0 +1,34 @@ +/*****************************************************************************************************************/ + +// @author Michael Roberts +// @package @observerly/hyper +// @license Copyright © 2021-2023 observerly + +/*****************************************************************************************************************/ + +import { dispatchRequest } from '../internals/dispatchRequest' + +/*****************************************************************************************************************/ + +export const exposure = ( + base: URL, + init?: RequestInit, + headers?: () => Promise | Headers +) => + [ + { + name: 'isReady', + action: < + T = { + complete: boolean + progress: number + ready: boolean + } + >() => { + const url = new URL('exposure/ready', base) + return dispatchRequest(url, init, headers) + } + } + ] as const + +/*****************************************************************************************************************/ diff --git a/src/routes/index.ts b/src/routes/index.ts index f890e3b..5c36517 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -9,6 +9,7 @@ import { camera } from './camera' import { conditions } from './conditions' import { dome } from './dome' +import { exposure } from './exposure' import { filterwheel } from './filterwheel' import { focuser } from './focuser' import { monitor } from './monitor' @@ -25,6 +26,7 @@ export const routes = ( camera: camera(base, init, headers), conditions: conditions(base, init, headers), dome: dome(base, init, headers), + exposure: exposure(base, init, headers), filterwheel: filterwheel(base, init, headers), focuser: focuser(base, init, headers), monitor: monitor(base, init, headers), diff --git a/tests/exposure.spec.ts b/tests/exposure.spec.ts new file mode 100644 index 0000000..6e55b93 --- /dev/null +++ b/tests/exposure.spec.ts @@ -0,0 +1,35 @@ +/*****************************************************************************************************************/ + +// @author Michael Roberts +// @package @observerly/hyper +// @license Copyright © 2021-2023 observerly + +/*****************************************************************************************************************/ + +import { describe, expect, it, suite } from 'vitest' + +import { isDataResult } from '../src' + +/*****************************************************************************************************************/ + +import { getURL, setupClient } from './setup' + +/*****************************************************************************************************************/ + +suite('@observerly/hyper NOX API Observing Exposure Client', () => { + describe('exposureRoutes', () => { + it('should be able to determine if the exposure is ready', async () => { + const client = setupClient(getURL('/api/v1/')) + const isReady = await client.exposure.isReady() + expect(isDataResult(isReady)).toBe(true) + if (!isDataResult(isReady)) return + expect(isReady).toStrictEqual({ + complete: true, + progress: 100, + ready: true + }) + }) + }) +}) + +/*****************************************************************************************************************/ diff --git a/tests/mocks/exposure.ts b/tests/mocks/exposure.ts new file mode 100644 index 0000000..cdd98bf --- /dev/null +++ b/tests/mocks/exposure.ts @@ -0,0 +1,29 @@ +/*****************************************************************************************************************/ + +// @author Michael Roberts +// @package @observerly/hyper +// @license Copyright © 2021-2023 observerly + +/*****************************************************************************************************************/ + +import { eventHandler } from 'h3' + +import { type Handler } from '../shared/handler' + +/*****************************************************************************************************************/ + +export const exposureHandlers: Handler[] = [ + { + method: 'GET', + url: '/api/v1/exposure/ready', + handler: eventHandler(_event => { + return { + complete: true, + progress: 100, + ready: true + } + }) + } +] + +/*****************************************************************************************************************/ diff --git a/tests/mocks/handlers.ts b/tests/mocks/handlers.ts index 0d70df3..e3da74e 100644 --- a/tests/mocks/handlers.ts +++ b/tests/mocks/handlers.ts @@ -10,6 +10,7 @@ import { baseHandlers } from './base' import { cameraHandlers } from './camera' import { domeHandlers } from './dome' +import { exposureHandlers } from './exposure' import { filterwheelHandlers } from './filterwheel' import { focuserHandlers } from './focuser' import { monitorHandlers } from './monitor' @@ -26,6 +27,7 @@ export const handlers: Handler[] = [ ...cameraHandlers, ...conditionsHandlers, ...domeHandlers, + ...exposureHandlers, ...filterwheelHandlers, ...focuserHandlers, ...monitorHandlers,