diff --git a/src/index.ts b/src/index.ts index bd58c93..5bdae97 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,28 +11,31 @@ declare global { } } -const responseEnhancer = () => ( +const responseEnhancer = (definedMeta?: any) => ( req: Request, res: Response, next: NextFunction, ): void => { - res.formatter = _generateFormatters(res) + res.formatter = _generateFormatters(res, definedMeta) next() } -const _generateFormatters = (res: Response) => { +const _generateFormatters = (res: Response, definedMeta?: any) => { const formatter = {} as ResponseFunction + let responseMeta = {} let responseBody = {} methods.map((method: Method) => { if (method.isSuccess) { formatter[method.name] = (data: any, meta: any) => { - responseBody = _generateSuccessResponse({ data, meta }) + responseMeta = meta ? meta : definedMeta + responseBody = _generateSuccessResponse({ data, meta: responseMeta }) res.status(parseInt(method.code)).json(responseBody) } } else { formatter[method.name] = (error: any, meta: any) => { - responseBody = _generateErrorResponse({ error, meta }) + responseMeta = meta ? meta : definedMeta + responseBody = _generateErrorResponse({ error, meta: responseMeta }) res.status(parseInt(method.code)).json(responseBody) } } diff --git a/test/index.test.ts b/test/index.test.ts index a8f6a83..1649ed8 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -6,7 +6,11 @@ const app = express() describe('Test avaliable methods.', () => { beforeAll(() => { - app.use(responseEnhancer()) + const definedMEta = { + version: '1.0', + env: 'dev', + } + app.use(responseEnhancer(definedMEta)) app.get('/success-with-meta', function(req, res) { const users = [{ name: 'John' }, { name: 'Jane' }] @@ -15,6 +19,13 @@ describe('Test avaliable methods.', () => { res.formatter.ok(users, metadata) }) + app.get('/success-with-defined-meta', function(req, res) { + const users = [{ name: 'John' }, { name: 'Jane' }] + // const metadata = { total: 2 } + + res.formatter.ok(users) + }) + app.get('/not-found', function(req, res) { const meta = { trackId: '12345' } const errors = [{ message: 'NOT_FOUND', detail: 'User not found.' }] @@ -54,4 +65,23 @@ describe('Test avaliable methods.', () => { done() }) }) + + it('"formatter.notFound" should return status code "404" and correct payload', done => { + request(app) + .get('/success-with-defined-meta') + .set('Accept', 'application/json') + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + if (err) return done(err) + expect(res.body).toEqual({ + data: [{ name: 'John' }, { name: 'Jane' }], + meta: { + version: '1.0', + env: 'dev', + }, + }) + done() + }) + }) })