From 4cc03fe611a94b575ff7fa7611c9b7da0efee037 Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Sun, 27 Jan 2019 16:19:35 +0100 Subject: [PATCH] Add test for StoryRoutes --- packages/common/src/URLFormatter.ts | 20 ++++++------ packages/server/src/story/StoryRoutes.test.ts | 32 +++++++++++++++---- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/packages/common/src/URLFormatter.ts b/packages/common/src/URLFormatter.ts index 0996545..c7e2c70 100644 --- a/packages/common/src/URLFormatter.ts +++ b/packages/common/src/URLFormatter.ts @@ -18,22 +18,24 @@ export class URLFormatter { params?: IRequestParams, query?: IRequestQuery, ) { - if (!params) { - return url + let formattedUrl = url + if (params) { + formattedUrl = url.replace(this.params.regex, match => { + const key = match.substring(1) + assert(params.hasOwnProperty(key)) + return String(params![key]) + }) } - const formattedUrl = url.replace(this.params.regex, match => { - const key = match.substring(1) - assert(params.hasOwnProperty(key)) - return String(params![key]) - }) + let qs = '' if (query) { - Object.keys(query).reduce((queryString, key) => { + qs = Object.keys(query).reduce((queryString, key) => { return queryString + encodeURIComponent(key) + '=' + encodeURIComponent(String(query[key])) + '&' }, '?') + .replace(/&$/, '') } - return this.params.baseURL + formattedUrl + return this.params.baseURL + formattedUrl + qs } } diff --git a/packages/server/src/story/StoryRoutes.test.ts b/packages/server/src/story/StoryRoutes.test.ts index f05ec00..6bf3d9f 100644 --- a/packages/server/src/story/StoryRoutes.test.ts +++ b/packages/server/src/story/StoryRoutes.test.ts @@ -1,4 +1,4 @@ -import {ISite/*, IStory*/} from '@rondo/common' +import {ISite} from '@rondo/common' import {createSite} from '../site/SiteTestUtils' import {test} from '../test' @@ -9,18 +9,27 @@ describe('story', () => { let cookie!: string let token!: string - let team!: ISite + let site!: ISite beforeEach(async () => { const session = await test.registerAccount() cookie = session.cookie token = session.token t.setHeaders({ cookie, 'x-csrf-token': token }) - team = await createSite(t, 'test.example.com') + site = await createSite(t, 'test.example.com') }) const invalidUrl = 'https://invalid.example.com/test' - // const validUrl = 'https://test.example.com/test' + const validUrl = 'https://test.example.com/test' + + async function getStory() { + const response = await t + .get('/stories/by-url', { + query: { url: validUrl }, + }) + .expect(200) + return response.body! + } describe('/stories/by-url', () => { it('returns undefined when a site is not configured', async () => { @@ -33,15 +42,24 @@ describe('story', () => { }) it('creates a story when it does not exist', async () => { - + const story = await getStory() + expect(story.id).toBeTruthy() + expect(story.siteId).toEqual(site.id) }) it('retrieves existing story after it is created', async () => { - + const story1 = await getStory() + const story2 = await getStory() + expect(story1.id).toBeTruthy() + expect(story1).toEqual(story2) }) it('prevents unique exceptions', async () => { - + const p1 = getStory() + const p2 = getStory() + const [story1, story2] = await Promise.all([p1, p2]) + expect(story1.id).toBeTruthy() + expect(story1).toEqual(story2) }) })