@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
115 lines (86 loc) • 3.49 kB
JavaScript
'use strict';var _this=this;
var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda);
var _http=require('../http');var http=_interopRequireWildcard(_http);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}
describe('http',function(){
describe('a response',function(){
test('is a response if it has a value',function(){
expect(http.isResponse(null)).not.toBeTruthy();
expect(http.isResponse('')).not.toBeTruthy();
expect(http.isResponse([])).not.toBeTruthy();
expect(http.isResponse({A:1})).not.toBeTruthy();
expect(http.isResponse({value:1})).toBeTruthy();
expect(http.isResponse({value:2,meta:{status:500}})).toBeTruthy();
});
test('is a response if it has a status code',function(){
expect(http.isResponse({meta:{}})).not.toBeTruthy();
expect(http.isResponse({meta:{status:300}})).toBeTruthy();
});
test('is ok if it has a value, and no meta',function(){
expect(http.isOK({value:1})).toBeTruthy();
expect(http.isOK({meta:{}})).not.toBeTruthy();
});
test('is ok if it has a status of 2xx **and** it has a value',function(){
expect(http.isOK({value:1,meta:{status:222}})).toBeTruthy();
expect(http.isOK({value:1,meta:{status:300}})).not.toBeTruthy();
expect(http.isOK({value:1,meta:{status:200}})).toBeTruthy();
expect(http.isOK({meta:{status:200}})).not.toBeTruthy();
});
test('obtaining a response from a value',function(){
expect(http.asResponse(1)).toEqual({value:1});
expect(http.asResponse(1,'http://example.com')).toEqual({
value:1,
meta:{
status:200,
message:'OK',
uri:'http://example.com',
url:'http://example.com'}});
});
expect(http.failedResponse('Fail')).toEqual({
meta:{
status:999,
message:'Fail'}});
expect(http.failedResponse('Fail','http://example.com')).toEqual({
meta:{
status:999,
message:'Fail',
uri:'http://example.com',
url:'http://example.com'}});
expect(http.failedResponse('Fail',42,'http://example.com')).toEqual({
value:42,
meta:{
status:999,
message:'Fail',
uri:'http://example.com',
url:'http://example.com'}});
});
describe('flow',function(){
test('chains transformation fns on the value of a OK responise',function(){
var resp=http.asResponse(10);
expect(http.flow(resp,_ramda2.default.inc,_ramda2.default.add(10))).toEqual({
value:21});
expect(http.flow(http.failedResponse('Fail'),_ramda2.default.inc,_ramda2.default.add(10))).toEqual({
meta:{
status:999,
message:'Fail'}});
});
test('a transform fn can return a response',function(){
var resp=http.asResponse(10);
expect(
http.flow(resp,_ramda2.default.inc,function(){return http.asResponse('something');},_ramda2.default.length)).
toEqual({
value:9});
expect(
http.flow(resp,_ramda2.default.inc,function(){return http.failedResponse('Fail');},_ramda2.default.dec)).
toEqual({
meta:{
status:999,
message:'Fail'}});
});
});
describe('execute',function(){
test('faild http call returns 998 as status code',function _callee(){var response;return regeneratorRuntime.async(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:
fetch.mockReject();_context.next=3;return regeneratorRuntime.awrap(
http.get('http://example.com'));case 3:response=_context.sent;
expect(response.meta.status).toEqual(998);case 5:case'end':return _context.stop();}}},null,_this);});
});
});