Skip to content

Commit a8603b8

Browse files
committed
feat(connect): add queue.create and queue.destroy #619
1 parent 15759f7 commit a8603b8

File tree

4 files changed

+68
-1
lines changed

4 files changed

+68
-1
lines changed

packages/connect/deno/mod.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,16 @@ export function connect(CONNECTION_STRING: string, domain = 'default'): Hyper {
247247
.then(queue.queued())
248248
.then($fetch)
249249
.then(handleResponse),
250+
create: (target, secret) =>
251+
Promise.resolve(h)
252+
.then(queue.create(target, secret))
253+
.then($fetch)
254+
.then(handleResponse),
255+
destroy: (confirm) =>
256+
Promise.resolve(h)
257+
.then(queue.destroy(confirm))
258+
.then($fetch)
259+
.then(handleResponse),
250260
},
251261
info: {
252262
services: () =>

packages/connect/deno/services/queue.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,11 @@ export const errors = () => (h: HyperRequestFunction) =>
1010

1111
export const queued = () => (h: HyperRequestFunction) =>
1212
h({ service, method: Method.GET, params: { status: QueueStatus.READY } })
13+
14+
export const create = (target: string, secret?: string) => (hyper: HyperRequestFunction) =>
15+
hyper({ service, method: Method.PUT, body: { target, secret } })
16+
17+
export const destroy = (confirm?: boolean) => (hyper: HyperRequestFunction) =>
18+
confirm
19+
? hyper({ service, method: Method.DELETE })
20+
: Promise.reject({ ok: false, msg: 'request not confirmed!' })

packages/connect/deno/tests/queue.test.ts

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { HyperRequest } from '../types.ts'
2-
import { assertEquals } from '../dev_deps.ts'
2+
import { assert, assertEquals } from '../dev_deps.ts'
33

44
import { enqueue, errors, queued } from '../services/queue.ts'
5+
import { create } from '../services/queue.ts'
6+
import { destroy } from '../services/queue.ts'
57

68
const test = Deno.test
79

@@ -57,3 +59,45 @@ test('queue.queued', async () => {
5759
const request = await queued()(mockRequest)
5860
assertEquals(request.url, 'http://localhost/?status=READY')
5961
})
62+
63+
test('queue.create', async () => {
64+
const mockRequest = (h: HyperRequest) => {
65+
assertEquals(h.service, 'queue')
66+
assertEquals(h.method, 'PUT')
67+
return Promise.resolve(
68+
new Request('http://localhost', {
69+
method: 'PUT',
70+
body: JSON.stringify(h.body),
71+
}),
72+
)
73+
}
74+
75+
const result = await create('https://foo.bar', 'shhhh')(mockRequest)
76+
const body = await result.json()
77+
assertEquals(body, { target: 'https://foo.bar', secret: 'shhhh' })
78+
79+
const noSecret = await create('https://foo.bar')(mockRequest)
80+
const noSecertBody = await noSecret.json()
81+
assertEquals(noSecertBody, { target: 'https://foo.bar' })
82+
})
83+
84+
test('queue.destroy', async () => {
85+
const mockRequest = (h: HyperRequest) => {
86+
assertEquals(h.service, 'queue')
87+
assertEquals(h.method, 'DELETE')
88+
return Promise.resolve(
89+
new Request('http://localhost', { method: 'DELETE' }),
90+
)
91+
}
92+
93+
await destroy(true)(mockRequest)
94+
95+
const noConfirmRequest = (_h: HyperRequest) => {
96+
assert(false, 'unreachable')
97+
return Promise.resolve(
98+
new Request('http://localhost', { method: 'DELETE' }),
99+
)
100+
}
101+
102+
await destroy()(noConfirmRequest).catch(assert)
103+
})

packages/connect/deno/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,11 @@ export interface HyperQueue {
175175
enqueue: <Job>(job: Job) => Promise<Result>
176176
errors: <Job>() => Promise<Job[]>
177177
queued: <Job>() => Promise<Job[]>
178+
create: (
179+
target: string,
180+
secret?: string,
181+
) => Promise<Result>
182+
destroy: (confirm: boolean) => Promise<Result>
178183
}
179184

180185
export interface HyperRequest {

0 commit comments

Comments
 (0)