diff --git a/src/routes/dome.ts b/src/routes/dome.ts
index aed3aa1..805abc0 100644
--- a/src/routes/dome.ts
+++ b/src/routes/dome.ts
@@ -73,6 +73,23 @@ export const dome = (base: URL, init?: RequestInit, headers?: () => Promise
(url, init, headers)
}
},
+ {
+ name: 'shutdown',
+ action: <
+ T = {
+ connected: boolean
+ slewing: boolean
+ slaved: boolean
+ parked: boolean
+ home: boolean
+ shutter: string
+ }
+ >() => {
+ const url = new URL('dome/shutdown', base)
+
+ return dispatchRequest(url, { ...init, method: 'PUT' }, headers)
+ }
+ },
{
name: 'connect',
action: <
diff --git a/tests/domeRoutes.spec.ts b/tests/domeRoutes.spec.ts
index 8ce0d64..d5faaf0 100644
--- a/tests/domeRoutes.spec.ts
+++ b/tests/domeRoutes.spec.ts
@@ -112,5 +112,20 @@ suite('@observerly/hyper Fiber API Dome Client', () => {
if (!isDataResult(uncouple)) return
expect(uncouple).toStrictEqual({ coupled: false })
})
+
+ it('should be able to shutdown the dome', async () => {
+ const client = setupClient(getURL('/api/v1/'))
+ const shutdown = await client.dome.shutdown()
+ expect(isDataResult(shutdown)).toBe(true)
+ if (!isDataResult(shutdown)) return
+ expect(shutdown).toStrictEqual({
+ connected: false,
+ slewing: false,
+ slaved: false,
+ parked: true,
+ home: true,
+ shutter: 'Closed'
+ })
+ })
})
})
diff --git a/tests/mocks/dome.ts b/tests/mocks/dome.ts
index e5b19a4..865d556 100644
--- a/tests/mocks/dome.ts
+++ b/tests/mocks/dome.ts
@@ -144,5 +144,28 @@ export const domeHandlers: Handler[] = [
coupled: body.couple
}
})
+ },
+ {
+ method: 'PUT',
+ url: '/api/v1/dome/shutdown',
+ handler: eventHandler(async event => {
+ const method = getMethod(event)
+
+ if (method !== 'PUT') {
+ return new Response('Method Not Allowed', {
+ status: 405,
+ statusText: 'Method Not Allowed'
+ })
+ }
+
+ return {
+ connected: false,
+ slewing: false,
+ slaved: false,
+ parked: true,
+ home: true,
+ shutter: 'Closed'
+ }
+ })
}
]