|
@@ -0,0 +1,93 @@
|
|
|
|
|
+import { expect } from 'chai'
|
|
|
|
|
+import fetchMock from 'fetch-mock'
|
|
|
|
|
+import OError from '@overleaf/o-error'
|
|
|
|
|
+import {
|
|
|
|
|
+ deleteJSON,
|
|
|
|
|
+ getJSON,
|
|
|
|
|
+ postJSON,
|
|
|
|
|
+ putJSON
|
|
|
|
|
+} from '../../../frontend/js/infrastructure/fetch-json'
|
|
|
|
|
+
|
|
|
|
|
+describe('fetchJSON', function() {
|
|
|
|
|
+ before(function() {
|
|
|
|
|
+ fetchMock.restore()
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ afterEach(function() {
|
|
|
|
|
+ fetchMock.restore()
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ const headers = {
|
|
|
|
|
+ Accept: 'application/json',
|
|
|
|
|
+ 'Content-Type': 'application/json'
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ it('handles GET requests', function() {
|
|
|
|
|
+ fetchMock.once(
|
|
|
|
|
+ { method: 'GET', url: '/test', headers },
|
|
|
|
|
+ { status: 200, body: { result: 'success' } }
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ return expect(getJSON('/test')).to.eventually.deep.equal({
|
|
|
|
|
+ result: 'success'
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it('handles 4xx responses', function() {
|
|
|
|
|
+ fetchMock.get('/test', {
|
|
|
|
|
+ status: 400,
|
|
|
|
|
+ body: { message: 'The request was invalid' }
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ return expect(getJSON('/test'))
|
|
|
|
|
+ .to.eventually.be.rejectedWith('Bad Request')
|
|
|
|
|
+ .and.be.an.instanceOf(OError)
|
|
|
|
|
+ .to.nested.include({
|
|
|
|
|
+ 'info.response.status': 400,
|
|
|
|
|
+ 'info.data.message': 'The request was invalid'
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it('handles 5xx responses', async function() {
|
|
|
|
|
+ fetchMock.get('/test', { status: 500 })
|
|
|
|
|
+
|
|
|
|
|
+ return expect(getJSON('/test'))
|
|
|
|
|
+ .to.eventually.be.rejectedWith('Internal Server Error')
|
|
|
|
|
+ .and.be.an.instanceOf(OError)
|
|
|
|
|
+ .to.nested.include({
|
|
|
|
|
+ 'info.response.status': 500
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it('handles POST requests', function() {
|
|
|
|
|
+ const body = { example: true }
|
|
|
|
|
+
|
|
|
|
|
+ fetchMock.once(
|
|
|
|
|
+ { method: 'POST', url: '/test', headers, body },
|
|
|
|
|
+ { status: 200, body: { result: 'success' } }
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ return expect(postJSON('/test', { body })).to.eventually.deep.equal({
|
|
|
|
|
+ result: 'success'
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it('handles PUT requests', function() {
|
|
|
|
|
+ const body = { example: true }
|
|
|
|
|
+
|
|
|
|
|
+ fetchMock.once(
|
|
|
|
|
+ { method: 'PUT', url: '/test', headers, body },
|
|
|
|
|
+ { status: 200, body: { result: 'success' } }
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ return expect(putJSON('/test', { body })).to.eventually.deep.equal({
|
|
|
|
|
+ result: 'success'
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it('handles DELETE requests', function() {
|
|
|
|
|
+ fetchMock.once({ method: 'DELETE', url: '/test', headers }, { status: 204 })
|
|
|
|
|
+
|
|
|
|
|
+ return expect(deleteJSON('/test')).to.eventually.deep.equal({})
|
|
|
|
|
+ })
|
|
|
|
|
+})
|