From 14926533c126f2d7c51dd6b4383d1b78c2c214c1 Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Thu, 20 Oct 2022 12:00:43 +0100 Subject: [PATCH] Add an empty route for a form to change authors on a PREreview Refs #388 --- src/app.ts | 6 +++++ src/routes.ts | 7 ++++++ src/write-review/index.ts | 1 + .../write-review-change-author.ts | 3 +++ .../write-review-change-author.test.ts | 22 +++++++++++++++++++ 5 files changed, 39 insertions(+) create mode 100644 src/write-review/write-review-change-author.ts create mode 100644 test/write-review/write-review-change-author.test.ts diff --git a/src/app.ts b/src/app.ts index f66d3824c..29019625a 100644 --- a/src/app.ts +++ b/src/app.ts @@ -38,6 +38,7 @@ import { writeReviewAddAuthorMatch, writeReviewAddAuthorsMatch, writeReviewAuthorsMatch, + writeReviewChangeAuthorMatch, writeReviewCompetingInterestsMatch, writeReviewConductMatch, writeReviewMatch, @@ -52,6 +53,7 @@ import { writeReviewAddAuthor, writeReviewAddAuthors, writeReviewAuthors, + writeReviewChangeAuthor, writeReviewCompetingInterests, writeReviewConduct, writeReviewPersona, @@ -133,6 +135,10 @@ export const router: P.Parser writeReviewAddAuthor(doi)), ), + pipe( + writeReviewChangeAuthorMatch.parser, + P.map(() => writeReviewChangeAuthor()), + ), pipe( writeReviewRemoveAuthorMatch.parser, P.map(({ doi, index }) => writeReviewRemoveAuthor(doi, index)), diff --git a/src/routes.ts b/src/routes.ts index df9b6b5f7..cae985cfd 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -69,6 +69,13 @@ export const writeReviewAuthorsMatch = pipe(writeReviewBaseMatch, P.then(P.lit(' export const writeReviewAddAuthorMatch = pipe(writeReviewBaseMatch, P.then(P.lit('add-author')), P.then(P.end)) +export const writeReviewChangeAuthorMatch = pipe( + writeReviewBaseMatch, + P.then(P.lit('change-author')), + P.then(type('index', IntegerFromStringC)), + P.then(P.end), +) + export const writeReviewRemoveAuthorMatch = pipe( writeReviewBaseMatch, P.then(P.lit('remove-author')), diff --git a/src/write-review/index.ts b/src/write-review/index.ts index ea3b8fb21..8b1ffdfa6 100644 --- a/src/write-review/index.ts +++ b/src/write-review/index.ts @@ -4,6 +4,7 @@ export { writeReview } from './write-review' export { writeReviewAddAuthor } from './write-review-add-author' export { writeReviewAddAuthors } from './write-review-add-authors' export { writeReviewAuthors } from './write-review-authors' +export { writeReviewChangeAuthor } from './write-review-change-author' export { writeReviewCompetingInterests } from './write-review-competing-interests' export { writeReviewConduct } from './write-review-conduct' export { writeReviewPersona } from './write-review-persona' diff --git a/src/write-review/write-review-change-author.ts b/src/write-review/write-review-change-author.ts new file mode 100644 index 000000000..8416daff0 --- /dev/null +++ b/src/write-review/write-review-change-author.ts @@ -0,0 +1,3 @@ +import { notFound } from '../middleware' + +export const writeReviewChangeAuthor = () => notFound diff --git a/test/write-review/write-review-change-author.test.ts b/test/write-review/write-review-change-author.test.ts new file mode 100644 index 000000000..b40774524 --- /dev/null +++ b/test/write-review/write-review-change-author.test.ts @@ -0,0 +1,22 @@ +import * as E from 'fp-ts/Either' +import { MediaType, Status } from 'hyper-ts' +import * as _ from '../../src/write-review' +import * as fc from '../fc' +import { runMiddleware } from '../middleware' + +test('writeReviewChangeAuthor', async () => { + await fc.assert( + fc.asyncProperty(fc.connection({}), async connection => { + const actual = await runMiddleware(_.writeReviewChangeAuthor()({}), connection)() + + expect(actual).toStrictEqual( + E.right([ + { type: 'setStatus', status: Status.NotFound }, + { type: 'setHeader', name: 'Cache-Control', value: 'no-store, must-revalidate' }, + { type: 'setHeader', name: 'Content-Type', value: MediaType.textHTML }, + { type: 'setBody', body: expect.anything() }, + ]), + ) + }), + ) +})