mirror of https://github.com/Seich/Beau.git
101 lines
3.1 KiB
JavaScript
101 lines
3.1 KiB
JavaScript
const Request = require('../request')
|
|
const RequestCache = require('../requestCache')
|
|
const requestPromiseNativeMock = require('request-promise-native')
|
|
|
|
describe('Request', () => {
|
|
let cache
|
|
let validRequestConfig
|
|
let invalidRequestConfig
|
|
let request
|
|
let requestWithoutDependencies
|
|
|
|
beforeEach(() => {
|
|
validRequestConfig = {
|
|
request: 'POST /user',
|
|
endpoint: 'http://example.com',
|
|
alias: 'update',
|
|
params: {
|
|
userId: '$profile.UserId'
|
|
},
|
|
headers: {
|
|
authentication: 'BEARER $session.token'
|
|
},
|
|
payload: {
|
|
username: 'seich'
|
|
}
|
|
}
|
|
|
|
invalidRequestConfig = {
|
|
request: `POST /session`,
|
|
endpoint: 'http://example.com'
|
|
}
|
|
|
|
cache = new RequestCache()
|
|
cache.add('session', { token: 'abc123' })
|
|
cache.add('profile', { UserId: 14 })
|
|
|
|
request = new Request(validRequestConfig)
|
|
requestWithoutDependencies = new Request({
|
|
endpoint: 'http://example.com',
|
|
request: 'GET /user',
|
|
alias: 'show'
|
|
})
|
|
|
|
requestPromiseNativeMock.fail = false
|
|
})
|
|
|
|
it('should load up the given request', () => {
|
|
expect(request.VERB).toBe('POST')
|
|
expect(request.ENDPOINT).toBe(validRequestConfig.endpoint)
|
|
expect(request.HEADERS).toBeDefined()
|
|
expect(request.PAYLOAD).toBeDefined()
|
|
expect(request.PARAMS).toBeDefined()
|
|
})
|
|
|
|
it('should throw if a given request is invalid', () => {
|
|
expect(() => new Request(invalidRequestConfig)).toThrow()
|
|
})
|
|
|
|
it('should list all of its dependencies', () => {
|
|
expect(request.DEPENDENCIES.size).toBe(2)
|
|
expect(request.DEPENDENCIES).toContain('session')
|
|
expect(request.DEPENDENCIES).toContain('profile')
|
|
})
|
|
|
|
it('should execute a request', async () => {
|
|
await expect(request.exec(cache)).resolves.toMatchSnapshot()
|
|
await expect(
|
|
requestWithoutDependencies.exec()
|
|
).resolves.toMatchSnapshot()
|
|
})
|
|
|
|
it('should throw if the request fails', async () => {
|
|
requestPromiseNativeMock.fail = true
|
|
await expect(requestWithoutDependencies.exec()).rejects.toThrow(Error)
|
|
})
|
|
|
|
it(`should use the full url if given one as part of the path instead of the global endpoint`, async () => {
|
|
const requestWithPath = new Request({
|
|
endpoint: 'http://example.com',
|
|
request: 'GET http://martianwabbit.com/user',
|
|
alias: 'get-user'
|
|
})
|
|
|
|
const requestWithoutPath = new Request({
|
|
endpoint: 'http://example.com',
|
|
request: 'GET /user',
|
|
alias: 'get-user'
|
|
})
|
|
|
|
await expect(requestWithPath.exec()).resolves.toHaveProperty(
|
|
'request.endpoint',
|
|
'http://martianwabbit.com/user'
|
|
)
|
|
|
|
await expect(requestWithoutPath.exec()).resolves.toHaveProperty(
|
|
'request.endpoint',
|
|
'http://example.com/user'
|
|
)
|
|
})
|
|
})
|