'use strict'; const Joi = require('joi'); const ServiceTester = require('./runner/service-tester'); const t = new ServiceTester({ id: 'github', title: 'Github' }); module.exports = t; t.create('License') .get('/license/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('license'), value: Joi.string() })); t.create('Contributors') .get('/contributors/cdnjs/cdnjs.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('contributors'), value: Joi.string().regex(/^\w+$/) })); t.create('GitHub closed pull requests') .get('/issues-pr-closed/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('pull requests'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? closed$/) })); t.create('GitHub closed pull requests raw') .get('/issues-pr-closed-raw/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('closed pull requests'), value: Joi.string().regex(/^\w+?$/) })); t.create('GitHub pull requests') .get('/issues-pr/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('pull requests'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? open$/) })); t.create('GitHub pull requests raw') .get('/issues-pr-raw/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('open pull requests'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]?$/) })); t.create('GitHub closed issues') .get('/issues-closed/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('issues'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? closed$/) })); t.create('GitHub closed issues raw') .get('/issues-closed-raw/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('closed issues'), value: Joi.string().regex(/^\w+\+?$/) })); t.create('GitHub open issues') .get('/issues/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('issues'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? open$/) })); t.create('GitHub open issues raw') .get('/issues-raw/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('open issues'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]?$/) })); t.create('GitHub open issues by label') .get('/issues/badges/shields/vendor-badge.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('vendor-badge issues'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? open$/) })); t.create('GitHub open issues by label (raw)') .get('/issues-raw/badges/shields/vendor-badge.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('open vendor-badge issues'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]?$/) })); t.create('GitHub open pull requests by label') .get('/issues-pr/badges/shields/vendor-badge.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('vendor-badge pull requests'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? open$/) })); t.create('GitHub open pull requests by label (raw)') .get('/issues-pr-raw/badges/shields/vendor-badge.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('open vendor-badge pull requests'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]?$/) })); t.create('Followers') .get('/followers/webcaetano.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('followers'), value: Joi.string().regex(/^\w+$/) })); t.create('Watchers') .get('/watchers/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('watchers'), value: Joi.number().integer().positive() })); t.create('Stars') .get('/stars/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('stars'), value: Joi.string().regex(/^\w+$/) })); t.create('Forks') .get('/forks/badges/shields.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('forks'), value: Joi.number().integer().positive() })); t.create('Commits since') .get('/commits-since/badges/shields/a0663d8da53fb712472c02665e6ff7547ba945b7.json') .expectJSONTypes(Joi.object().keys({ name: Joi.string().regex(/^(commits since){1}[\s\S]+$/), value: Joi.string().regex(/^\w+$/) })); t.create('Release') .get('/release/photonstorm/phaser.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('release'), value: Joi.string() })); t.create('(pre-)Release') .get('/release/photonstorm/phaser/all.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('release'), value: Joi.string() })); t.create('Tag') .get('/tag/photonstorm/phaser.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('tag'), value: Joi.string() })); t.create('File size') .get('/size/webcaetano/craft/build/phaser-craft.min.js.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('size'), value: Joi.string().regex(/^[0-9]*[.]?[0-9]+\s(B|kB|MB|GB|TB|PB|EB|ZB|YB)$/), })); t.create('File size 404') .get('/size/webcaetano/craft/build/does-not-exist.min.js.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('size'), value: Joi.string().regex(/^repo or file not found$/), })); t.create('File size for "not a regular file"') .get('/size/webcaetano/craft/build.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('size'), value: Joi.string().regex(/^not a regular file$/), })); t.create('Downloads all releases') .get('/downloads/photonstorm/phaser/total.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('downloads'), value: Joi.string().regex(/^\w+\s+total$/) })); t.create('downloads for release without slash') .get('/downloads/atom/atom/v0.190.0/total.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('downloads'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? v0\.190\.0$/) })); t.create('downloads for specific asset without slash') .get('/downloads/atom/atom/v0.190.0/atom-amd64.deb.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('downloads'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? v0\.190\.0 \[atom-amd64\.deb\]$/) })); t.create('downloads for release with slash') .get('/downloads/NHellFire/dban/stable/v2.2.8/total.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('downloads'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? stable\/v2\.2\.8$/) })); t.create('downloads for specific asset with slash') .get('/downloads/NHellFire/dban/stable/v2.2.8/dban-2.2.8_i586.iso.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('downloads'), value: Joi.string().regex(/^[0-9]+[kMGTPEZY]? stable\/v2\.2\.8 \[dban-2\.2\.8_i586\.iso\]$/) })); t.create('downloads for unknown release') .get('/downloads/atom/atom/does-not-exist/total.json') .expectJSON({ name: 'downloads', value: 'none' }); t.create('hit counter') .get('/search/torvalds/linux/goto.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('goto counter'), value: Joi.string().regex(/^[0-9]*(k|M|G|T|P|E|Z|Y)$/), })); t.create('hit counter for nonexistent repo') .get('/search/torvalds/not-linux/goto.json') .expectJSONTypes(Joi.object().keys({ name: Joi.equal('goto counter'), value: Joi.string().regex(/^repo not found$/), }));