osu-spotify-yt-rest/src/services/response/index.test.js

84 lines
2.3 KiB
JavaScript

import * as response from '.'
let res
beforeEach(() => {
res = {
status: jest.fn(() => res),
json: jest.fn(() => res),
end: jest.fn(() => res)
}
})
describe('success', () => {
it('responds with passed object and status 200', () => {
expect(response.success(res)({ prop: 'value' })).toBeNull()
expect(res.status).toBeCalledWith(200)
expect(res.json).toBeCalledWith({ prop: 'value' })
})
it('responds with passed object and status 201', () => {
expect(response.success(res, 201)({ prop: 'value' })).toBeNull()
expect(res.status).toBeCalledWith(201)
expect(res.json).toBeCalledWith({ prop: 'value' })
})
it('does not send any response when object has not been passed', () => {
expect(response.success(res, 201)()).toBeNull()
expect(res.status).not.toBeCalled()
})
})
describe('notFound', () => {
it('responds with status 404 when object has not been passed', () => {
expect(response.notFound(res)()).toBeNull()
expect(res.status).toBeCalledWith(404)
expect(res.end).toHaveBeenCalledTimes(1)
})
it('returns the passed object and does not send any response', () => {
expect(response.notFound(res)({ prop: 'value' })).toEqual({ prop: 'value' })
expect(res.status).not.toBeCalled()
expect(res.end).not.toBeCalled()
})
})
describe('authorOrAdmin', () => {
let user, entity
beforeEach(() => {
user = {
id: 1,
role: 'user'
}
entity = {
author: {
id: 1,
equals (id) {
return id === this.id
}
}
}
})
it('returns the passed entity when author is the same', () => {
expect(response.authorOrAdmin(res, user, 'author')(entity)).toEqual(entity)
})
it('returns the passed entity when author is admin', () => {
user.role = 'admin'
expect(response.authorOrAdmin(res, user, 'user')(entity)).toEqual(entity)
})
it('responds with status 401 when author is not the same or admin', () => {
user.id = 2
expect(response.authorOrAdmin(res, user, 'author')(entity)).toBeNull()
expect(res.status).toBeCalledWith(401)
expect(res.end).toHaveBeenCalledTimes(1)
})
it('returns null without sending response when entity has not been passed', () => {
expect(response.authorOrAdmin(res, user, 'author')()).toBeNull()
})
})