Files
shields/services/json/json.tester.js
Paul Melnikow ea4b758612 Move service tests alongside code (#1563)
Per discussion in #1543
2018-03-20 18:32:48 -07:00

87 lines
4.1 KiB
JavaScript

'use strict';
const Joi = require('joi');
const { expect } = require('chai');
const ServiceTester = require('../service-tester');
const colorscheme = require('../../lib/colorscheme.json');
const mapValues = require('lodash.mapvalues');
const colorsB = mapValues(colorscheme, 'colorB');
const t = new ServiceTester({ id: 'dynamic-json', title: 'User Defined JSON Source Data', pathPrefix: '/badge/dynamic/json' });
module.exports = t;
t.create('Connection error')
.get('.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.name&label=Package Name&style=_shields_test')
.networkOff()
.expectJSON({ name: 'Package Name', value: 'inaccessible', colorB: colorsB.red });
t.create('No URL specified')
.get('.json?query=$.name&label=Package Name&style=_shields_test')
.expectJSON({ name: 'Package Name', value: 'no url specified', colorB: colorsB.red });
t.create('No query specified')
.get('.json?url=https://github.com/badges/shields/raw/master/package.json&label=Package Name&style=_shields_test')
.expectJSON({ name: 'Package Name', value: 'no query specified', colorB: colorsB.red });
t.create('JSON from url')
.get('.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.name&style=_shields_test')
.expectJSON({ name: 'custom badge', value: 'gh-badges', colorB: colorsB.brightgreen });
t.create('JSON from uri (support uri query paramater)')
.get('.json?uri=https://github.com/badges/shields/raw/master/package.json&query=$.name&style=_shields_test')
.expectJSON({ name: 'custom badge', value: 'gh-badges', colorB: colorsB.brightgreen });
t.create('JSON from url | multiple results')
.get('.json?url=https://github.com/badges/shields/raw/master/package.json&query=$..keywords[0:2:1]')
.expectJSON({ name: 'custom badge', value: 'GitHub, badge' });
t.create('JSON from url | caching with new query params')
.get('.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.version')
.expectJSONTypes(Joi.object().keys({
name: 'custom badge',
value: Joi.string().regex(/^\d+(\.\d+)?(\.\d+)?$/)
}));
t.create('JSON from url | with prefix & suffix & label')
.get('.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.version&prefix=v&suffix= dev&label=Shields')
.expectJSONTypes(Joi.object().keys({
name: 'Shields',
value: Joi.string().regex(/^v\d+(\.\d+)?(\.\d+)?\sdev$/)
}));
t.create('JSON from url | object doesnt exist')
.get('.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.does_not_exist&style=_shields_test')
.expectJSON({ name: 'custom badge', value: 'no result', colorB: colorsB.lightgrey });
t.create('JSON from url | invalid url')
.get('.json?url=https://github.com/badges/shields/raw/master/notafile.json&query=$.version&style=_shields_test')
.expectJSON({ name: 'custom badge', value: 'resource not found', colorB: colorsB.lightgrey });
t.create('JSON from url | user color overrides default')
.get('.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.name&colorB=10ADED&style=_shields_test')
.expectJSON({ name: 'custom badge', value: 'gh-badges', colorB: '#10ADED' });
t.create('JSON from url | error color overrides default')
.get('.json?url=https://github.com/badges/shields/raw/master/notafile.json&query=$.version&style=_shields_test')
.expectJSON({ name: 'custom badge', value: 'resource not found', colorB: colorsB.lightgrey });
t.create('JSON from url | error color overrides user specified')
.get('.json?query=$.version&colorB=10ADED&style=_shields_test')
.expectJSON({ name: 'custom badge', value: 'no url specified', colorB: colorsB.red });
let headers;
t.create('JSON from url | request should set Accept header')
.get('.json?url=https://json-test/api.json&query=$.name')
.intercept(nock => nock('https://json-test')
.get('/api.json')
.reply(200, function (uri, requestBody) {
headers = this.req.headers;
return '{"name":"test"}';
})
)
.expectJSON({ name: 'custom badge', value: 'test' })
.after(function () {
expect(headers).to.have.property('accept', 'application/json');
});