teletype-client-modified
Version:
I have modified the library developed by Atom to make it compatible with non-browser facility. I am using it only for experimentation purposes. I will remove this package post my experiment and raise a PR at Atom to finally merge this package so that this
121 lines (107 loc) • 4.04 kB
JavaScript
require('./setup')
const assert = require('assert')
const http = require('http')
const Errors = require('../lib/errors')
const RestGateway = require('../lib/rest-gateway')
suite('RestGateway', () => {
const servers = []
teardown(() => {
for (const server of servers) {
server.close()
}
servers.length = 0
})
suite('get', () => {
test('successful request and response', async () => {
const address = listen(function (request, response) {
response.writeHead(200, {'Content-Type': 'application/json'})
response.write('{"a": 1}')
response.end()
})
const gateway = new RestGateway({baseURL: address})
const response = await gateway.get('/')
assert(response.ok)
assert.deepEqual(response.body, {a: 1})
})
test('failed request', async () => {
const gateway = new RestGateway({baseURL: 'http://localhost:0987654321'})
let error
try {
await gateway.get('/foo/b9e13e6b-9e6e-492c-b4d9-4ec75fd9c2bc/bar')
} catch (e) {
error = e
}
assert(error instanceof Errors.HTTPRequestError)
assert(error.diagnosticMessage.includes('GET'))
assert(error.diagnosticMessage.includes('/foo/REDACTED/bar'))
})
test('non-JSON response', async () => {
const address = listen(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'})
response.write('some unexpected response (b9e13e6b-9e6e-492c-b4d9-4ec75fd9c2bc)')
response.end()
})
const gateway = new RestGateway({baseURL: address})
let error
try {
await gateway.get('/foo/b9e13e6b-9e6e-492c-b4d9-4ec75fd9c2bc/bar')
} catch (e) {
error = e
}
assert(error instanceof Errors.HTTPRequestError)
assert(error.diagnosticMessage.includes('GET'))
assert(error.diagnosticMessage.includes('/foo/REDACTED/bar'))
assert(error.diagnosticMessage.includes('200'))
assert(error.diagnosticMessage.includes('some unexpected response (REDACTED)'))
})
})
suite('post', () => {
test('successful request and response', async () => {
const address = listen(function (request, response) {
response.writeHead(200, {'Content-Type': 'application/json'})
response.write('{"a": 1}')
response.end()
})
const gateway = new RestGateway({baseURL: address})
const response = await gateway.post('/')
assert(response.ok)
assert.deepEqual(response.body, {a: 1})
})
test('failed request', async () => {
const gateway = new RestGateway({baseURL: 'http://localhost:0987654321'})
let error
try {
await gateway.post('/foo/b9e13e6b-9e6e-492c-b4d9-4ec75fd9c2bc/bar', { "a": 1 })
} catch (e) {
error = e
}
assert(error instanceof Errors.HTTPRequestError)
assert(error.diagnosticMessage.includes('POST'))
assert(error.diagnosticMessage.includes('/foo/REDACTED/bar'))
})
test('non-JSON response', async () => {
const address = listen(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'})
response.write('some unexpected response (b9e13e6b-9e6e-492c-b4d9-4ec75fd9c2bc)')
response.end()
})
const gateway = new RestGateway({baseURL: address})
let error
try {
await gateway.post('/foo/b9e13e6b-9e6e-492c-b4d9-4ec75fd9c2bc/bar')
} catch (e) {
error = e
}
assert(error instanceof Errors.HTTPRequestError)
assert(error.diagnosticMessage.includes('POST'))
assert(error.diagnosticMessage.includes('/foo/REDACTED/bar'))
assert(error.diagnosticMessage.includes('200'))
assert(error.diagnosticMessage.includes('some unexpected response (REDACTED)'))
})
})
function listen (requestListener) {
const server = http.createServer(requestListener).listen(0)
servers.push(server)
return `http://localhost:${server.address().port}`
}
})