diff --git a/integration/src/api.ts b/integration/src/api.ts index 083560c1..c22795e2 100644 --- a/integration/src/api.ts +++ b/integration/src/api.ts @@ -43,6 +43,10 @@ const rapidReviewSchema = z.object({ uuid: z.string(), }); +const requestSchema = z.object({ + uuid: z.string(), +}) + const templateSchema = z.object({ uuid: z.string(), title: z.string(), @@ -75,6 +79,8 @@ export type Preprint = z.infer<typeof preprintSchema>; export type RapidReview = z.infer<typeof rapidReviewSchema>; +export type Request = z.infer<typeof requestSchema>; + export type Template = z.infer<typeof templateSchema>; export type User = z.infer<typeof userSchema>; @@ -108,16 +114,16 @@ export async function ensurePreprint( export async function ensureRequest( fetch: Fetch, preprint: string, -): Promise<unknown> { +): Promise<Request> { const requests = await fetch(`/api/v2/preprints/${preprint}/requests`, { headers: adminHeaders, }) .then(response => response.json()) - .then(dataSchema(z.array(z.unknown())).parse) + .then(dataSchema(z.array(requestSchema)).parse) .then(response => response.data); if (requests.length > 0) { - return; + return requests[0]; } return await fetch(`/api/v2/preprints/${preprint}/requests`, { @@ -127,7 +133,11 @@ export async function ensureRequest( 'Content-Type': 'application/json', ...adminHeaders, }, - }).then(ensureSuccess); + }) + .then(ensureSuccess) + .then(response => response.json()) + .then(dataSchema(requestSchema).parse) + .then(response => response.data); } export async function ensureFullReview( diff --git a/src/backend/controllers/request.js b/src/backend/controllers/request.js index e4533db5..23fa9c4a 100644 --- a/src/backend/controllers/request.js +++ b/src/backend/controllers/request.js @@ -83,6 +83,7 @@ export default function controller(reqModel, preprintModel, thisUser) { ctx.body = { status: 201, message: 'created', + data: request, }; ctx.status = 201; }; diff --git a/test/backend/requests.test.ts b/test/backend/requests.test.ts index 559ca59d..65670dc7 100644 --- a/test/backend/requests.test.ts +++ b/test/backend/requests.test.ts @@ -43,22 +43,11 @@ describe('requests', () => { expect(response.body).toStrictEqual({ message: 'created', status: StatusCodes.CREATED, - }); - - const listResponse = await request(server).get( - `/api/v2/preprints/${preprint.uuid}/requests`, - ); - - expect(listResponse.status).toBe(StatusCodes.OK); - expect(listResponse.type).toBe('application/json'); - expect(listResponse.body).toMatchObject({ - data: [ - { - author: user.id, - isPreprintAuthor: false, - preprint: preprint.id, - }, - ], + data: expect.objectContaining({ + author: user.id, + isPreprintAuthor: false, + preprint: preprint.id, + }), }); }); }); @@ -84,16 +73,11 @@ describe('author requests', () => { expect(response.body).toStrictEqual({ message: 'created', status: StatusCodes.CREATED, - }); - - const listResponse = await request(server).get( - `/api/v2/preprints/${preprint.uuid}/requests`, - ); - - expect(listResponse.status).toBe(StatusCodes.OK); - expect(listResponse.type).toBe('application/json'); - expect(listResponse.body).toMatchObject({ - data: [{ isPreprintAuthor: false }], + data: expect.objectContaining({ + author: user.id, + isPreprintAuthor: false, + preprint: preprint.id, + }), }); }); @@ -117,16 +101,11 @@ describe('author requests', () => { expect(response.body).toStrictEqual({ message: 'created', status: StatusCodes.CREATED, - }); - - const listResponse = await request(server).get( - `/api/v2/preprints/${preprint.uuid}/requests`, - ); - - expect(listResponse.status).toBe(StatusCodes.OK); - expect(listResponse.type).toBe('application/json'); - expect(listResponse.body).toMatchObject({ - data: [{ isPreprintAuthor: true }], + data: expect.objectContaining({ + author: user.id, + isPreprintAuthor: true, + preprint: preprint.id, + }), }); }); });