diff --git a/src/routes/dome.ts b/src/routes/dome.ts new file mode 100644 index 0000000..31d0923 --- /dev/null +++ b/src/routes/dome.ts @@ -0,0 +1,26 @@ +/*****************************************************************************************************************/ + +// @author Michael Roberts +// @package @observerly/hyper +// @license Copyright © 2021-2023 observerly + +/*****************************************************************************************************************/ + +import { dispatchRequest } from '../internals/dispatchRequest' + +/*****************************************************************************************************************/ + +export const dome = (base: URL, init?: RequestInit, headers?: () => Promise | Headers) => + [ + { + name: 'isConnected', + action: < + T = { + connected: boolean + } + >() => { + const url = new URL('dome/connected', base) + return dispatchRequest(url, init, headers) + } + } + ] as const diff --git a/src/routes/index.ts b/src/routes/index.ts index 0332558..fc7dd3d 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -6,6 +6,7 @@ /*****************************************************************************************************************/ +import { dome } from './dome' import { filterwheel } from './filterwheel' import { focuser } from './focuser' import { rotator } from './rotator' @@ -18,6 +19,7 @@ export const routes = ( init?: RequestInit, headers?: () => Headers | Promise ) => ({ + dome: dome(base, init, headers), filterwheel: filterwheel(base, init, headers), focuser: focuser(base, init, headers), rotator: rotator(base, init, headers), diff --git a/tests/domeRoutes.spec.ts b/tests/domeRoutes.spec.ts new file mode 100644 index 0000000..aaa9789 --- /dev/null +++ b/tests/domeRoutes.spec.ts @@ -0,0 +1,29 @@ +/*****************************************************************************************************************/ + +// @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 Fiber API Dome Client', () => { + describe('domeRoutes', () => { + it('should be able to determine the connection status of the dome', async () => { + const client = setupClient(getURL('/api/v1/')) + const isConnected = await client.dome.isConnected() + expect(isDataResult(isConnected)).toBe(true) + if (!isDataResult(isConnected)) return + expect(isConnected).toStrictEqual({ connected: true }) + }) + }) +}) diff --git a/tests/mocks/dome.ts b/tests/mocks/dome.ts new file mode 100644 index 0000000..1dea9b5 --- /dev/null +++ b/tests/mocks/dome.ts @@ -0,0 +1,25 @@ +/*****************************************************************************************************************/ + +// @author Michael Roberts +// @package @observerly/hyper +// @license Copyright © 2021-2023 observerly + +/*****************************************************************************************************************/ + +import { eventHandler } from 'h3' + +import { type Handler } from '../shared/handler' + +/*****************************************************************************************************************/ + +export const domeHandlers: Handler[] = [ + { + method: 'GET', + url: '/api/v1/dome/connected', + handler: eventHandler(_event => { + return { + connected: true + } + }) + } +] diff --git a/tests/mocks/handlers.ts b/tests/mocks/handlers.ts index 69f3e50..908e515 100644 --- a/tests/mocks/handlers.ts +++ b/tests/mocks/handlers.ts @@ -8,17 +8,19 @@ import { baseHandlers } from './base' +import { domeHandlers } from './dome' +import { filterwheelHandlers } from './filterwheel' import { focuserHandlers } from './focuser' import { rotatorHandlers } from './rotator' import { telescopeHandlers } from './telescope' import { type Handler } from '../shared/handler' -import { filterwheelHandlers } from './filterwheel' /*****************************************************************************************************************/ export const handlers: Handler[] = [ ...baseHandlers, + ...domeHandlers, ...filterwheelHandlers, ...focuserHandlers, ...rotatorHandlers,