From 0bcf0a4c7de073702a3f198399643f78288eaa5a Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Fri, 14 Oct 2022 15:45:59 +0100 Subject: [PATCH] Add an empty route for a form to remove other authors from a PREreview Refs #388 --- src/app.ts | 6 +++++ src/routes.ts | 7 ++++++ src/write-review/index.ts | 1 + .../write-review-remove-author.ts | 3 +++ .../write-review-remove-author.test.ts | 22 +++++++++++++++++++ 5 files changed, 39 insertions(+) create mode 100644 src/write-review/write-review-remove-author.ts create mode 100644 test/write-review/write-review-remove-author.test.ts diff --git a/src/app.ts b/src/app.ts index 38f057558..efb86bd01 100644 --- a/src/app.ts +++ b/src/app.ts @@ -43,6 +43,7 @@ import { writeReviewMatch, writeReviewPersonaMatch, writeReviewPostMatch, + writeReviewRemoveAuthorMatch, writeReviewReviewMatch, } from './routes' import { @@ -55,6 +56,7 @@ import { writeReviewConduct, writeReviewPersona, writeReviewPost, + writeReviewRemoveAuthor, writeReviewReview, } from './write-review' @@ -131,6 +133,10 @@ export const router: P.Parser writeReviewAddAuthor(doi)), ), + pipe( + writeReviewRemoveAuthorMatch.parser, + P.map(() => writeReviewRemoveAuthor()), + ), pipe( writeReviewAddAuthorsMatch.parser, P.map(({ doi }) => writeReviewAddAuthors(doi)), diff --git a/src/routes.ts b/src/routes.ts index ede18b715..df9b6b5f7 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 writeReviewRemoveAuthorMatch = pipe( + writeReviewBaseMatch, + P.then(P.lit('remove-author')), + P.then(type('index', IntegerFromStringC)), + P.then(P.end), +) + export const writeReviewAddAuthorsMatch = pipe(writeReviewBaseMatch, P.then(P.lit('add-more-authors')), P.then(P.end)) export const writeReviewCompetingInterestsMatch = pipe( diff --git a/src/write-review/index.ts b/src/write-review/index.ts index 41bfd1471..ea3b8fb21 100644 --- a/src/write-review/index.ts +++ b/src/write-review/index.ts @@ -8,4 +8,5 @@ export { writeReviewCompetingInterests } from './write-review-competing-interest export { writeReviewConduct } from './write-review-conduct' export { writeReviewPersona } from './write-review-persona' export { NewPrereview, PostPrereviewEnv, writeReviewPost } from './write-review-post' +export { writeReviewRemoveAuthor } from './write-review-remove-author' export { writeReviewReview } from './write-review-review' diff --git a/src/write-review/write-review-remove-author.ts b/src/write-review/write-review-remove-author.ts new file mode 100644 index 000000000..09989b5c1 --- /dev/null +++ b/src/write-review/write-review-remove-author.ts @@ -0,0 +1,3 @@ +import { notFound } from '../middleware' + +export const writeReviewRemoveAuthor = () => notFound diff --git a/test/write-review/write-review-remove-author.test.ts b/test/write-review/write-review-remove-author.test.ts new file mode 100644 index 000000000..9fd56e03c --- /dev/null +++ b/test/write-review/write-review-remove-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('writeReviewRemoveAuthor', async () => { + await fc.assert( + fc.asyncProperty(fc.connection({}), async connection => { + const actual = await runMiddleware(_.writeReviewRemoveAuthor()({}), 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() }, + ]), + ) + }), + ) +})