UNPKG

clayful

Version:

JavaScript & Node.js SDK for Clayful API

200 lines (158 loc) 5.16 kB
"use strict"; const expect = require('expect.js'); const decache = require('decache'); describe('request-axios', () => { // Remove cache for testing decache('../../../clayful'); const fs = require('fs'); const path = require('path'); const axios = require('axios'); const Hapi = require('hapi'); const Boom = require('boom'); const FormData = require('form-data'); const Clayful = require('../../../client-node'); const { Review, Image } = Clayful; Clayful.plugins.request = null; Clayful.install('request', require('../')(axios)); Clayful.baseUrl = 'http://localhost:9999'; const server = new Hapi.Server(); server.connection({ port: 9999 }); server.route([ { method: 'GET', path: '/v1/products/reviews/{reviewId}', handler: (request, reply) => reply({ method: request.method, url: request.url, params: request.params, headers: request.headers, query: request.query }) }, { method: 'GET', path: '/v1/products/reviews', handler: (request, reply) => { const error = Boom.badRequest('bad boy'); error.output.payload.errorCode = 'error-code'; error.output.payload.validation = {}; reply(error); } }, { method: 'POST', path: '/v1/products/reviews', handler: (request, reply) => reply({ method: request.method, url: request.url, params: request.params, headers: request.headers, query: request.query, payload: request.payload }).created('') }, { method: 'POST', path: '/v1/images', config: { payload: { parse: true, allow: 'multipart/form-data' } }, handler: (request, reply) => reply({ method: request.method, url: request.url, params: request.params, headers: request.headers, query: request.query, payload: request.payload }).created('') }, ]); before(done => server.start(err => done(err))); after(done => server.stop(done)); it(`should make a HTTP GET request for the API`, done => { const queryHeaders = { language: 'en', query: { raw: true, }, }; Review.get('rid', queryHeaders, (err, result) => { expect(err).to.be(null); expect(result.status).to.be(200); expect(result.headers).to.be.an('object'); expect(result.data.method).to.be('get'); expect(result.data.url.href).to.be('/v1/products/reviews/rid?raw=true'); expect(result.data.params).to.eql({ reviewId: 'rid' }); expect(result.data.headers['accept-encoding']).to.be('gzip'); expect(result.data.headers['accept-language']).to.be('en'); expect(result.data.query).to.eql({ raw: 'true' }); done(); }); }); it(`should reply a clayful error when the API errs`, done => { Review.list((err, result) => { expect(err).to.be.an(Error); expect(err.isClayful).to.be(true); expect(err.model).to.be('Review'); expect(err.method).to.be('list'); expect(err.status).to.be(400); expect(err.headers).to.be.an('object'); expect(err.code).to.be('error-code'); expect(err.message).to.be.a('string'); expect(err.validation).to.be.an('object'); done(); }); }); it(`should make a HTTP POST request for the API`, done => { const data = { name: { en: 'Review Name' } }; const queryHeaders = { language: 'en', query: { raw: true, }, }; Review.create(data, queryHeaders, (err, result) => { expect(err).to.be(null); expect(result.status).to.be(201); expect(result.headers).to.be.an('object'); expect(result.data.method).to.be('post'); expect(result.data.url.href).to.be('/v1/products/reviews?raw=true'); expect(result.data.params).to.eql({}); expect(result.data.headers['accept-encoding']).to.be('gzip'); expect(result.data.headers['accept-language']).to.be('en'); expect(result.data.query).to.eql({ raw: 'true' }); expect(result.data.payload).to.eql(data); done(); }); }); it('should make a HTTP POST request for the API with multipart/form-data', done => { const data = new FormData(); data.append('model', 'Review'); data.append('application', 'images'); data.append('file', fs.createReadStream(path.join(__dirname, 'blob'))); const queryHeaders = { language: 'en', query: { raw: true, } }; Image.create(data, queryHeaders, (err, result) => { expect(err).to.be(null); expect(result.status).to.be(201); expect(result.headers).to.be.an('object'); expect(result.data.method).to.be('post'); expect(result.data.url.href).to.be('/v1/images?raw=true'); expect(result.data.params).to.eql({}); expect(result.data.headers['accept-encoding']).to.be('gzip'); expect(result.data.headers['accept-language']).to.be('en'); expect(result.data.query).to.eql({ raw: 'true' }); expect(result.data.payload.model).to.be('Review'); expect(result.data.payload.application).to.be('images'); expect(result.data.payload.file).to.be.an('object'); done(); }); }); });