UNPKG

aurelia-api

Version:

A simple api wrapper around aurelia-fetch-client

899 lines (811 loc) 34.7 kB
import {Config} from '../src/config'; import {Rest} from '../src/rest'; import {Container} from 'aurelia-dependency-injection'; import {InjectTest} from './resources/inject-test'; import {buildQueryString} from 'aurelia-path'; let container = new Container(); let config = container.get(Config); let baseUrls = { jsonplaceholder: 'http://jsonplaceholder.typicode.com/', api : 'http://127.0.0.1:1927/' }; let options = { headers: { 'Content-Type' : 'application/x-www-form-urlencoded', 'Authorization': 'Bearer aToken' } }; let jsonOptions = { headers: { 'Content-Type': 'application/vnd.api+json', 'Accept': 'application/vnd.api+json' } }; config.registerEndpoint('api', baseUrls.api); config.registerEndpoint('jsonplaceholder', baseUrls.jsonplaceholder); config.registerEndpoint('form', baseUrls.api, null); config.registerEndpoint('urlencoded', baseUrls.api, options); config.registerEndpoint('fetchConfig', fetchConfig => { fetchConfig .withBaseUrl(baseUrls.api) .withDefaults(jsonOptions); }); let criteria = {user: 'john', comment: 'last'}; let criteriaWithArray = {sort: ['first', 'last']}; let body = {message: 'some'}; describe('Rest', function() { describe('.find()', function() { it('Should find results for multiple endpoints.', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = false; let responseOutput = { response: null }; expect(injectTest.apiEndpoint instanceof Rest).toBe(true); expect(injectTest.jsonplaceholderEndpoint instanceof Rest).toBe(true); Promise.all([ injectTest.jsonplaceholderEndpoint.find('posts/1') .then(x => { expect(x.userId).toBe(1); }), injectTest.apiEndpoint.find('posts') .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts'); }), injectTest.apiEndpoint.find('posts/') .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts/'); }), injectTest.apiEndpoint.find('posts', 'id') .then(y => { expect(y.path).toBe('/posts/id'); expect(JSON.stringify(y.query)).toBe('{}'); }), injectTest.apiEndpoint.find('posts', 1) .then(y => { expect(y.path).toBe('/posts/1'); expect(JSON.stringify(y.query)).toBe('{}'); }), injectTest.apiEndpoint.find('posts/', 'id') .then(y => { expect(y.path).toBe('/posts/id/'); expect(JSON.stringify(y.query)).toBe('{}'); }), injectTest.apiEndpoint.find('posts', 'id', options) .then(y => { expect(y.path).toBe('/posts/id'); expect(JSON.stringify(y.query)).toBe('{}'); expect(y.contentType).toBe(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.find('posts', criteria) .then(y => { expect(y.path).toBe('/posts'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); }), injectTest.apiEndpoint.find('posts/', criteria) .then(y => { expect(y.path).toBe('/posts/'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); }), injectTest.apiEndpoint.find('posts', undefined, options) .then(y => { expect(y.path).toBe('/posts'); expect(y.contentType).toBe(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.find('posts', criteriaWithArray) .then(y => { expect(y.path).toBe('/posts'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(encodeURI(`/posts?sort[]=${criteriaWithArray.sort[0]}&sort[]=${criteriaWithArray.sort[1]}`)); }), injectTest.apiEndpoint.find('posts', undefined, null, responseOutput) .then(y => { expect(responseOutput.response instanceof Response).toBe(true); }) ]).then(x => { done(); }); }); it('Should find with RFC6570 queries.', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = true; Promise.all([ injectTest.apiEndpoint.find('posts', criteriaWithArray) .then(y => { expect(y.path).toBe('/posts'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(`/posts?sort=${criteriaWithArray.sort[0]}&sort=${criteriaWithArray.sort[1]}`) }) ]).then(x => done()); }); }); describe('.findOne()', function() { it('Should find with id, criteria and options.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; injectTest.apiEndpoint.useTraditionalUriTemplates = false; Promise.all([ injectTest.apiEndpoint.findOne('posts', 'id', criteria, options) .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts/id'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.findOne('posts/', 'id', criteria, options) .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts/id/'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.findOne('posts/', 'id', criteriaWithArray) .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts/id/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(encodeURI(`/posts/id/?sort[]=${criteriaWithArray.sort[0]}&sort[]=${criteriaWithArray.sort[1]}`)); }), injectTest.apiEndpoint.findOne('posts/', 'id', criteriaWithArray, null, responseOutput) .then(y => { expect(responseOutput.response instanceof Response).toBe(true); }) ]).then(x => { done(); }); }); it('Should findOne with RFC6570 queries.', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = true; Promise.all([ injectTest.apiEndpoint.findOne('posts/', 'id', criteriaWithArray) .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts/id/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(`/posts/id/?sort=${criteriaWithArray.sort[0]}&sort=${criteriaWithArray.sort[1]}`); }) ]).then(x => done()); }); }); describe('.find()', function() { it('Should find with id and criteria using date objects.', function(done) { let injectTest = container.get(InjectTest); let dateCriteria = { date: new Date() }; injectTest.apiEndpoint.findOne('posts', 'id', dateCriteria) .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts/id'); expect(y.query.date).toBe(dateCriteria.date.toString()); expect(y.originalUrl).toBe('/posts/id?date='+encodeURIComponent(dateCriteria.date).toString()) }).then(done); }); it('Should find with criteria using id and date objects.', function(done) { let injectTest = container.get(InjectTest); let dateCriteria = { id: 'id', date: new Date() }; injectTest.apiEndpoint.findOne('posts', dateCriteria) .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts'); expect(y.query.id).toBe('id'); expect(y.query.date).toBe(dateCriteria.date.toString()); expect(y.originalUrl).toBe('/posts?date='+encodeURIComponent(dateCriteria.date).toString()+'&id=id') }).then(done); }); it('Should find with criteria using number objects.', function(done) { let injectTest = container.get(InjectTest); let numCriteria = { num: Number(-1.01) }; injectTest.apiEndpoint.findOne('posts/', 'id', numCriteria) .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts/id/'); expect(y.query.num).toBe(numCriteria.num.toString()); }).then(done); }); }); describe('.find()', function() { it('Should find with criteria using date objects.', function(done) { let injectTest = container.get(InjectTest); let dateCriteria = { date: new Date() }; injectTest.apiEndpoint.findOne('posts', 'id', dateCriteria) .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts/id'); expect(y.query.date).toBe(dateCriteria.date.toString()); }).then(done); }); it('Should find with criteria using number objects.', function(done) { let injectTest = container.get(InjectTest); let numCriteria = { num: Number(-1.01) }; injectTest.apiEndpoint.findOne('posts/', 'id', numCriteria) .then(y => { expect(y.method).toBe('GET'); expect(y.path).toBe('/posts/id/'); expect(y.query.num).toBe(numCriteria.num.toString()); }).then(done); }); }); describe('.update()', function() { it('Should update with body (as json).', function(done) { let injectTest = container.get(InjectTest); Promise.all([ injectTest.apiEndpoint.update('posts', null, body) .then(y => { expect(y.method).toBe('PUT'); expect(y.path).toBe('/posts'); expect(y.contentType).toMatch('application/json'); }), injectTest.apiEndpoint.update('posts/', null, body) .then(y => { expect(y.method).toBe('PUT'); expect(y.path).toBe('/posts/'); }) ]).then(x => { done(); }); }); it('Should update with body (as json), criteria and options.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; injectTest.apiEndpoint.useTraditionalUriTemplates = false; Promise.all([ injectTest.apiEndpoint.update('posts', criteria, body, options) .then(y => { expect(y.method).toBe('PUT'); expect(y.path).toBe('/posts'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.update('posts/', criteria, body, options) .then(y => { expect(y.path).toBe('/posts/'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); }), injectTest.apiEndpoint.update('posts/', criteriaWithArray, body, options) .then(y => { expect(y.path).toBe('/posts/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(encodeURI(`/posts/?sort[]=${criteriaWithArray.sort[0]}&sort[]=${criteriaWithArray.sort[1]}`)); }), injectTest.apiEndpoint.update('posts/', criteriaWithArray, body, options, responseOutput) .then(y => { expect(responseOutput.response instanceof Response).toBe(true); }) ]).then(x => { done(); }); }); it('Should update with RFC6570 queries.', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = true; Promise.all([ injectTest.apiEndpoint.update('posts/', criteriaWithArray, body, options) .then(y => { expect(y.path).toBe('/posts/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(`/posts/?sort=${criteriaWithArray.sort[0]}&sort=${criteriaWithArray.sort[1]}`); }) ]).then(x => done()); }); }); describe('.updateOne()', function() { it('Should update with body (as json), criteria and options.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; injectTest.apiEndpoint.useTraditionalUriTemplates = false; Promise.all([ injectTest.apiEndpoint.updateOne('posts', 'id', criteria, body, options) .then(y => { expect(y.method).toBe('PUT'); expect(y.path).toBe('/posts/id'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.updateOne('posts/', 'id', criteria, body, options) .then(y => { expect(y.method).toBe('PUT'); expect(y.path).toBe('/posts/id/'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.updateOne('posts/', 'id', criteria, body, options, responseOutput) .then(y => { expect(responseOutput.response instanceof Response).toBe(true); }), injectTest.apiEndpoint.updateOne('posts/', 'id', criteriaWithArray, body) .then(y => { expect(y.method).toBe('PUT'); expect(y.path).toBe('/posts/id/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(encodeURI(`/posts/id/?sort[]=${criteriaWithArray.sort[0]}&sort[]=${criteriaWithArray.sort[1]}`)); }) ]).then(x => { done(); }); }); it('Should updateOne with RFC6570 queries.', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = true; Promise.all([ injectTest.apiEndpoint.updateOne('posts/', 'id', criteriaWithArray, body) .then(y => { expect(y.method).toBe('PUT'); expect(y.path).toBe('/posts/id/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(`/posts/id/?sort=${criteriaWithArray.sort[0]}&sort=${criteriaWithArray.sort[1]}`); }) ]).then(x => done()); }); }); describe('.patch()', function() { it('Should patch with body (as json).', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = false; Promise.all([ injectTest.apiEndpoint.patch('post', null, body) .then(y => { expect(y.method).toBe('PATCH'); expect(y.path).toBe('/post'); expect(y.contentType).toMatch('application/json'); }), injectTest.apiEndpoint.patch('post/', null, body) .then(y => { expect(y.path).toBe('/post/'); }), injectTest.apiEndpoint.patch('post/', criteriaWithArray, body) .then(y => { expect(y.path).toBe('/post/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(encodeURI(`/post/?sort[]=${criteriaWithArray.sort[0]}&sort[]=${criteriaWithArray.sort[1]}`)); }) ]).then(x => { done(); }); }); it('Should patch with body (as json), criteria and options.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; injectTest.apiEndpoint.useTraditionalUriTemplates = false; Promise.all([ injectTest.apiEndpoint.patch('post', criteria, body, options) .then(y => { expect(y.method).toBe('PATCH'); expect(y.path).toBe('/post'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.patch('post/', criteria, body, options) .then(y => { expect(y.method).toBe('PATCH'); expect(y.path).toBe('/post/'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.patch('post/', criteria, body, options, responseOutput) .then(y => { expect(responseOutput.response instanceof Response).toBe(true); }), injectTest.apiEndpoint.patch('post/', criteriaWithArray, body) .then(y => { expect(y.method).toBe('PATCH'); expect(y.path).toBe('/post/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(encodeURI(`/post/?sort[]=${criteriaWithArray.sort[0]}&sort[]=${criteriaWithArray.sort[1]}`)); }) ]).then(x => { done(); }); }); it('Should patch with RFC6570 queries.', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = true; Promise.all([ injectTest.apiEndpoint.patch('post/', criteriaWithArray, body) .then(y => { expect(y.method).toBe('PATCH'); expect(y.path).toBe('/post/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(`/post/?sort=${criteriaWithArray.sort[0]}&sort=${criteriaWithArray.sort[1]}`); }) ]).then(x => done()); }); }); describe('.patchOne()', function() { it('Should patch with body (as json), id, criteria and options.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; injectTest.apiEndpoint.useTraditionalUriTemplates = false; Promise.all([ injectTest.apiEndpoint.patchOne('post', 'id', criteria, body, options) .then(y => { expect(y.method).toBe('PATCH'); expect(y.path).toBe('/post/id'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.patchOne('post/', 'id', criteria, body, options) .then(y => { expect(y.method).toBe('PATCH'); expect(y.path).toBe('/post/id/'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.patchOne('post/', 'id', criteria, body, options, responseOutput) .then(y => { expect(responseOutput.response instanceof Response).toBe(true); }), injectTest.apiEndpoint.patchOne('post/', 'id', criteriaWithArray, body) .then(y => { expect(y.method).toBe('PATCH'); expect(y.path).toBe('/post/id/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(encodeURI(`/post/id/?sort[]=${criteriaWithArray.sort[0]}&sort[]=${criteriaWithArray.sort[1]}`)); }) ]).then(x => { done(); }); }); it('Should patchOne with RFC6570 queries.', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = true; Promise.all([ injectTest.apiEndpoint.patchOne('post/', 'id', criteriaWithArray, body) .then(y => { expect(y.method).toBe('PATCH'); expect(y.path).toBe('/post/id/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(`/post/id/?sort=${criteriaWithArray.sort[0]}&sort=${criteriaWithArray.sort[1]}`); }) ]).then(x => done()); }); }); describe('.destroy()', function() { it('Should destroy with criteria and options.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; injectTest.apiEndpoint.useTraditionalUriTemplates = false; Promise.all([ injectTest.apiEndpoint.destroy('posts', criteria, options) .then(y => { expect(y.method).toBe('DELETE'); expect(y.path).toBe('/posts'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.destroy('posts/', criteria, options) .then(y => { expect(y.method).toBe('DELETE'); expect(y.path).toBe('/posts/'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.destroy('posts/', criteria, options, responseOutput) .then(y => { expect(responseOutput.response instanceof Response).toBe(true); }), injectTest.apiEndpoint.destroy('posts/', criteriaWithArray) .then(y => { expect(y.method).toBe('DELETE'); expect(y.path).toBe('/posts/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(encodeURI(`/posts/?sort[]=${criteriaWithArray.sort[0]}&sort[]=${criteriaWithArray.sort[1]}`)); }) ]).then(x => { done(); }); }); it('Should destroy with RFC6570 queries.', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = true; Promise.all([ injectTest.apiEndpoint.destroy('posts/', criteriaWithArray) .then(y => { expect(y.method).toBe('DELETE'); expect(y.path).toBe('/posts/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(`/posts/?sort=${criteriaWithArray.sort[0]}&sort=${criteriaWithArray.sort[1]}`); }) ]).then(x => done()); }); }); describe('.destroyOne()', function() { it('Should destroy with id, criteria and options.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; injectTest.apiEndpoint.useTraditionalUriTemplates = false; Promise.all([ injectTest.apiEndpoint.destroyOne('posts', 'id', criteria, options) .then(y => { expect(y.method).toBe('DELETE'); expect(y.path).toBe('/posts/id'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.destroyOne('posts/', 'id', criteria, options) .then(y => { expect(y.method).toBe('DELETE'); expect(y.path).toBe('/posts/id/'); expect(y.query.user).toBe(criteria.user); expect(y.query.comment).toBe(criteria.comment); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.destroyOne('posts/', 'id', criteria, options, responseOutput) .then(y => { expect(responseOutput.response instanceof Response).toBe(true); }), injectTest.apiEndpoint.destroyOne('posts/', 'id', criteriaWithArray) .then(y => { expect(y.method).toBe('DELETE'); expect(y.path).toBe('/posts/id/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(encodeURI(`/posts/id/?sort[]=${criteriaWithArray.sort[0]}&sort[]=${criteriaWithArray.sort[1]}`)); }) ]).then(x => { done(); }); }); it('Should destroyOne with RFC6570 queries.', function(done) { let injectTest = container.get(InjectTest); injectTest.apiEndpoint.useTraditionalUriTemplates = true; Promise.all([ injectTest.apiEndpoint.destroyOne('posts/', 'id', criteriaWithArray) .then(y => { expect(y.method).toBe('DELETE'); expect(y.path).toBe('/posts/id/'); expect(y.query.sort[0]).toBe(criteriaWithArray.sort[0]); expect(y.query.sort[1]).toBe(criteriaWithArray.sort[1]); expect(y.originalUrl).toBe(`/posts/id/?sort=${criteriaWithArray.sort[0]}&sort=${criteriaWithArray.sort[1]}`); }) ]).then(x => done()); }); }); describe('.create()', function() { it('Should create body (as json).', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; Promise.all([ injectTest.apiEndpoint.create('posts', body) .then(y => { expect(y.method).toBe('POST'); expect(y.path).toBe('/posts'); expect(y.contentType).toMatch('application/json'); }), injectTest.apiEndpoint.create('posts/', body) .then(y => { expect(y.path).toBe('/posts/'); }) ]).then(x => { done(); }); }); it('Should create body (as json) and options.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; Promise.all([ injectTest.apiEndpoint.create('posts', body, options) .then(y => { expect(y.method).toBe('POST'); expect(y.path).toBe('/posts'); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.create('posts/', body, options) .then(y => { expect(y.method).toBe('POST'); expect(y.path).toBe('/posts/'); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.create('posts/', body, options, responseOutput) .then(y => { expect(responseOutput.response instanceof Response).toBe(true); }) ]).then(x => { done(); }); }); }); describe('.post()', function() { it('Should post body (as urlencoded) with custom header (x-www-form-urlencoded).', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; Promise.all([ injectTest.apiEndpoint.post('posts', body, options) .then(y => { expect(JSON.stringify(y.body)).toBe(JSON.stringify(body)); expect(y.method).toBe('POST'); expect(y.path).toBe('/posts'); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); }), injectTest.apiEndpoint.post('posts/', body, options) .then(y => { expect(JSON.stringify(y.body)).toBe(JSON.stringify(body)); expect(y.path).toBe('/posts/'); }) ]).then(x => { done(); }); }); it('Should post object body (as urlencoded) with registered default header (x-www-form-urlencoded).', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; Promise.all([ injectTest.urlencodedEndpoint.post('posts', body) .then(y => { expect(y.method).toBe('POST'); expect(y.path).toBe('/posts'); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); expect(y.body.message).toBe('some'); }), injectTest.urlencodedEndpoint.post('posts/', body) .then(y => { expect(y.path).toBe('/posts/'); expect(y.body.message).toBe('some'); }) ]).then(x => { done(); }); }); it('Should post string body as string with registered default header (x-www-form-urlencoded).', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; Promise.all([ injectTest.urlencodedEndpoint.post('posts', buildQueryString(body)) .then(y => { expect(y.method).toBe('POST'); expect(y.path).toBe('/posts'); expect(y.contentType).toMatch(options.headers['Content-Type']); expect(y.Authorization).toBe(options.headers['Authorization']); expect(y.body.message).toBe('some'); }), injectTest.urlencodedEndpoint.post('posts/', buildQueryString(body)) .then(y => { expect(y.path).toBe('/posts/'); expect(y.body.message).toBe('some'); }) ]).then(x => { done(); }); }); it('Should post object body (as json) with fetchConfig configuration.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; Promise.all([ injectTest.fetchConfigEndpoint.post('posts', body) .then(y => { expect(y.method).toBe('POST'); expect(y.path).toBe('/posts'); expect(y.contentType).toBe(jsonOptions.headers['Content-Type']); expect(y.body.message).toBe('some'); }), injectTest.fetchConfigEndpoint.post('posts/', body) .then(y => { expect(y.path).toBe('/posts/'); expect(y.body.message).toBe('some'); }) ]).then(x => { done(); }); }); it('Should post string body as string with fetchConfig configuration.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; Promise.all([ injectTest.fetchConfigEndpoint.post('posts', JSON.stringify(body)) .then(y => { expect(y.method).toBe('POST'); expect(y.path).toBe('/posts'); expect(y.contentType).toBe(jsonOptions.headers['Content-Type']); expect(y.body.message).toBe('some'); }), injectTest.fetchConfigEndpoint.post('posts/', JSON.stringify(body)) .then(y => { expect(y.path).toBe('/posts/'); expect(y.body.message).toBe('some'); }) ]).then(x => { done(); }); }); it('Should post body (as FormData) and options.', function(done) { let injectTest = container.get(InjectTest); let responseOutput = { response: null }; let data = new FormData(); data.append('message', 'some'); Promise.all([ injectTest.formEndpoint.post('uploads', data, {headers: {'Authorization': 'Bearer aToken'}}) .then(y => { expect(y.method).toBe('POST'); expect(y.path).toBe('/uploads'); expect(y.contentType).toMatch('multipart/form-data'); expect(y.Authorization).toBe('Bearer aToken'); expect(y.body.message).toBe('some'); }), injectTest.formEndpoint.post('uploads/', data, {headers: {'Authorization': 'Bearer aToken'}}) .then(y => { expect(y.path).toBe('/uploads/'); expect(y.contentType).toMatch('multipart/form-data'); expect(y.body.message).toBe('some'); }) ]).then(x => { done(); }); }); }); });