[Coveralls] Bitbucket support + service tests (#1189)

Close #793
This commit is contained in:
piekar294
2017-10-20 18:45:48 +02:00
committed by Paul Melnikow
parent f52385f16d
commit 8ac0605e12
3 changed files with 123 additions and 11 deletions

View File

@@ -2397,13 +2397,14 @@ cache(function(queryParams, match, sendBadge, request) {
}));
// Coveralls integration.
camp.route(/^\/coveralls\/([^/]+\/[^/]+)(?:\/(.+))?\.(svg|png|gif|jpg|json)$/,
camp.route(/^\/coveralls\/(?:(bitbucket|github)\/)?([^/]+\/[^/]+)(?:\/(.+))?\.(svg|png|gif|jpg|json)$/,
cache(function(data, match, sendBadge, request) {
var userRepo = match[1]; // eg, `jekyll/jekyll`.
var branch = match[2];
var format = match[3];
var repoService = match[1] ? match[1] : 'github';
var userRepo = match[2]; // eg, `jekyll/jekyll`.
var branch = match[3];
var format = match[4];
var apiUrl = {
url: 'http://badge.coveralls.io/repos/' + userRepo + '/badge.png',
url: `https://coveralls.io/repos/${repoService}/${userRepo}/badge.svg`,
followRedirect: false,
method: 'HEAD',
};

103
service-tests/coveralls.js Normal file
View File

@@ -0,0 +1,103 @@
'use strict';
const Joi = require('joi');
const ServiceTester = require('./runner/service-tester');
const { isPercentage } = require('./helpers/validators');
const t = new ServiceTester({ id: 'coveralls', title: 'Coveralls.io' });
module.exports = t;
t.create('error status code - location header is missing')
.get('/github/not/existed.json')
.intercept(nock => nock('https://coveralls.io')
.head('/repos/github/not/existed/badge.svg')
.reply(404)
)
.expectJSON({ name: 'coverage', value: 'invalid' });
t.create('malformed location')
.get('/github/user/repository.json')
.intercept(nock => nock('https://coveralls.io')
.head('/repos/github/user/repository/badge.svg')
.reply(302, {}, {
'Location': 'https://s3.amazonaws.com/assets.coveralls.io/badges/malformedlocation.svg'
})
)
.expectJSON({ name: 'coverage', value: 'malformed' });
t.create('NaN percentage in location')
.get('/github/user/repository.json')
.intercept(nock => nock('https://coveralls.io')
.head('/repos/github/user/repository/badge.svg')
.reply(302, {}, {
'Location': 'https://s3.amazonaws.com/assets.coveralls.io/badges/coveralls_notanumber.svg'
})
)
.expectJSON({ name: 'coverage', value: 'unknown' });
t.create('connection error')
.get('/github/user/repository.json')
.networkOff()
.expectJSON({ name: 'coverage', value: 'invalid' });
t.create('show coverage')
.get('/github/user/repository.json')
.intercept(nock => nock('https://coveralls.io')
.head('/repos/github/user/repository/badge.svg')
.reply(302, {}, {
'Location': 'https://s3.amazonaws.com/assets.coveralls.io/badges/coveralls_50.svg'
})
)
.expectJSON({ name: 'coverage', value: '50%' });
t.create('show coverage for legacy github link')
.get('/user/repository.json')
.intercept(nock => nock('https://coveralls.io')
.head('/repos/github/user/repository/badge.svg')
.reply(302, {}, {
'Location': 'https://s3.amazonaws.com/assets.coveralls.io/badges/coveralls_50.svg'
})
)
.expectJSON({ name: 'coverage', value: '50%' });
t.create('show coverage for branch')
.get('/github/user/repository/branch.json')
.intercept(nock => nock('https://coveralls.io')
.head('/repos/github/user/repository/badge.svg?branch=branch')
.reply(302, {}, {
'Location': 'https://s3.amazonaws.com/assets.coveralls.io/badges/coveralls_50.svg'
})
)
.expectJSON({ name: 'coverage', value: '50%' });
t.create('show coverage for bitbucket')
.get('/bitbucket/user/repository.json')
.intercept(nock => nock('https://coveralls.io')
.head('/repos/bitbucket/user/repository/badge.svg')
.reply(302, {}, {
'Location': 'https://s3.amazonaws.com/assets.coveralls.io/badges/coveralls_50.svg'
})
)
.expectJSON({ name: 'coverage', value: '50%' });
t.create('show coverage for bitbucket with branch')
.get('/bitbucket/user/repository/branch.json')
.intercept(nock => nock('https://coveralls.io')
.head('/repos/bitbucket/user/repository/badge.svg?branch=branch')
.reply(302, {}, {
'Location': 'https://s3.amazonaws.com/assets.coveralls.io/badges/coveralls_50.svg'
})
)
.expectJSON({ name: 'coverage', value: '50%' });
t.create('github coverage')
.get('/github/jekyll/jekyll.json')
.expectJSONTypes(Joi.object().keys({ name: 'coverage', value: isPercentage }));
t.create('github coverage for legacy link')
.get('/jekyll/jekyll.json')
.expectJSONTypes(Joi.object().keys({ name: 'coverage', value: isPercentage }));
t.create('bitbucket coverage')
.get('/bitbucket/pyKLIP/pyklip.json')
.expectJSONTypes(Joi.object().keys({ name: 'coverage', value: isPercentage }));

View File

@@ -168,13 +168,21 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable
<td><img src='/jenkins/c/https/jenkins.qa.ubuntu.com/view/Utopic/view/All/job/address-book-service-utopic-i386-ci.svg' alt=''/></td>
<td><code>https://img.shields.io/jenkins/c/https/jenkins.qa.ubuntu.com/view/Utopic/view/All/job/address-book-service-utopic-i386-ci.svg</code></td>
</tr>
<tr><th> Coveralls: </th>
<td><img src='/coveralls/jekyll/jekyll.svg' alt=''/></td>
<td><code>https://img.shields.io/coveralls/jekyll/jekyll.svg</code></td>
<tr><th> Coveralls github: </th>
<td><img src='/coveralls/github/jekyll/jekyll.svg' alt=''/></td>
<td><code>https://img.shields.io/coveralls/github/jekyll/jekyll.svg</code></td>
</tr>
<tr><th> Coveralls branch: </th>
<td><img src='/coveralls/jekyll/jekyll/master.svg' alt=''/></td>
<td><code>https://img.shields.io/coveralls/jekyll/jekyll/master.svg</code></td>
<tr><th> Coveralls github branch: </th>
<td><img src='/coveralls/github/jekyll/jekyll/master.svg' alt=''/></td>
<td><code>https://img.shields.io/coveralls/github/jekyll/jekyll/master.svg</code></td>
</tr>
<tr><th> Coveralls bitbucket: </th>
<td><img src='/coveralls/bitbucket/pyKLIP/pyklip.svg' alt=''/></td>
<td><code>https://img.shields.io/coveralls/bitbucket/pyKLIP/pyklip.svg</code></td>
</tr>
<tr><th> Coveralls bitbucket branch: </th>
<td><img src='/coveralls/bitbucket/pyKLIP/pyklip.svg' alt=''/></td>
<td><code>https://img.shields.io/coveralls/bitbucket/pyKLIP/pyklip/master.svg</code></td>
</tr>
<tr><th> SonarQube Coverage: </th>
<td><img src='/sonar/http/sonar.qatools.ru/ru.yandex.qatools.allure:allure-core/coverage.svg' alt=''/></td>