test: added albumSearch test; chore: removed sample endpoint

This commit is contained in:
Roberto Tonino 2021-04-09 20:49:54 +02:00
parent e2c79f6ee6
commit 418fc5647f
7 changed files with 124 additions and 15 deletions

View File

@ -10,7 +10,7 @@
"prebuild": "yarn lint", "prebuild": "yarn lint",
"build": "tsc", "build": "tsc",
"test": "jest", "test": "jest",
"test-watch": "jest --watchAll" "test-watch": "jest --watch"
}, },
"dependencies": { "dependencies": {
"cookie-parser": "1.4.5", "cookie-parser": "1.4.5",

View File

@ -0,0 +1,40 @@
import request from 'supertest'
import { app } from '../../../app'
describe('albumSearch requests', () => {
it('should respond 200 to calls with term', async () => {
const responseStatusCollector: number[] = []
const batchCalls = [
'/api/album-search/?term=eminem',
'/api/album-search/?term=eminem?start=10',
'/api/album-search/?term=eminem?ack=aa',
'/api/album-search/?term=eminem?ack=aa?start=10',
'/api/album-search/?term=eminem?ack=aa?start=10?nb=34'
]
for (const uri of batchCalls) {
responseStatusCollector.push((await request(app).get(uri).send()).status)
}
expect(responseStatusCollector).toMatchObject(new Array(responseStatusCollector.length).fill(200))
})
it('should respond 400 to calls without term', async () => {
const responseStatusCollector: number[] = []
const batchCalls = [
'/api/album-search/',
'/api/album-search/?start=10',
'/api/album-search/?ack=aa',
'/api/album-search/?ack=aa?start=10',
'/api/album-search/?ack=aa?start=10?nb=34'
]
for (const uri of batchCalls) {
responseStatusCollector.push((await request(app).get(uri).send()).status)
}
expect(responseStatusCollector).toMatchObject(new Array(responseStatusCollector.length).fill(400))
})
it.todo('should respond the desired search result')
})

View File

@ -0,0 +1,77 @@
import { RequestHandler } from 'express'
import { ApiHandler } from '../../../types'
export interface RawAlbumQueryParams {
term: string
start?: string
nb?: string
ack: number
}
export interface AlbumSearchParams extends Omit<RawAlbumQueryParams, 'start' | 'nb'> {
start: number
nb: number
}
export interface AlbumResponse {
data: any[]
total: number
ack: RawAlbumQueryParams['ack']
}
const path: ApiHandler['path'] = '/album-search/'
const handler: RequestHandler<{}, {}, {}, RawAlbumQueryParams> = (req, res, next) => {
if (!req.query) {
res.status(400).send()
next()
}
const { term, start, nb, ack } = parseQuery(req.query)
if (!term || term.trim() === '') {
res.status(400).send()
next()
}
// const albums = getAlbums(term, start, nb)
// const output: AlbumResponse = {
// data: albums,
// total: albums.length,
// ack
// }
// res.send(output)
res.send()
next()
}
const apiHandler = { path, handler }
export default apiHandler
function parseQuery(query: RawAlbumQueryParams): AlbumSearchParams {
let startingPoint = 0
if (typeof query.start !== 'undefined') {
startingPoint = parseInt(query.start)
}
let newNb = 30
if (typeof query.nb !== 'undefined') {
newNb = parseInt(query.nb)
}
return {
term: query.term,
start: startingPoint,
nb: newNb,
ack: query.ack
}
}
// function getAlbums(term: string, start: number, nb: number): any[] {
// return []
// }

View File

@ -1,4 +1,4 @@
import sample from './sample'
import getHome from './getHome' import getHome from './getHome'
import albumSearch from './albumSearch'
export default [sample, getHome] export default [albumSearch, getHome]

View File

@ -1,11 +0,0 @@
import { ApiHandler } from '../../../types'
const path: ApiHandler['path'] = '/sample'
const handler: ApiHandler['handler'] = (_, res) => {
res.send('Mandi')
}
const apiHandler: ApiHandler = { path, handler }
export default apiHandler

View File

@ -4,7 +4,7 @@ import request from 'supertest'
import express from 'express' import express from 'express'
import cookieParser from 'cookie-parser' import cookieParser from 'cookie-parser'
describe('request.agent(app)', function () { describe('cookie parser', () => {
const app = express() const app = express()
app.use(cookieParser()) app.use(cookieParser())

View File

@ -1,5 +1,8 @@
import { RequestHandler } from 'express' import { RequestHandler } from 'express'
/* === Utilities === */
export type WithOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
export type Port = number | string | boolean export type Port = number | string | boolean
export interface ApiHandler { export interface ApiHandler {