UNPKG

5.44 kBJavaScriptView Raw
1(function (handleInput, helper, Joi, request, fs, path) {
2 'use strict';
3
4 var expect = helper.chai.expect;
5 var lcovData = fs.readFileSync(__dirname + '/mock/lcov.info').toString();
6 var originalCodacyToken = process.env.CODACY_PROJECT_TOKEN || process.env.CODACY_REPO_TOKEN;
7
8 describe('Handle Input', function () {
9 beforeEach(function () {
10 helper.clearEnvironmentVariables();
11 process.env.CODACY_PROJECT_TOKEN = originalCodacyToken;
12 });
13 it('should be able to use the mock end-point', function () {
14 var bodyValidator = Joi.object({
15 total: Joi.number().valid(50),
16 fileReports: Joi.array().items(Joi.object({
17 filename: Joi.string().valid('filename.js'),
18 total: Joi.number().valid(10),
19 coverage: Joi.object({
20 1: Joi.number().valid(1),
21 2: Joi.number().valid(3)
22 })
23 }).required())
24 });
25
26 var sampleCoverageData = {
27 total: 50,
28 fileReports: [
29 {
30 filename: 'filename.js',
31 total: 10,
32 coverage: {
33 1: 1,
34 2: 3
35 }
36 }
37 ]
38 };
39
40 return helper.setupMockEndpoint('1234', '4321', bodyValidator)
41 .then(function () {
42 return expect(request({
43 url: 'https://api.codacy.com/2.0/coverage/4321/javascript',
44 method: 'POST',
45 json: sampleCoverageData,
46 resolveWithFullResponse: true
47 }).promise()).to.eventually.satisfy(function (res) {
48 expect(res.statusCode).to.equal(200);
49 return true;
50 });
51 });
52 });
53 it('should be able to parse lcov data', function () {
54 var expectedCoverage = {
55 total: 92,
56 fileReports: Joi.array().items(Joi.compile({
57 filename: path.normalize('lib/reporter.js'),
58 coverage: {
59 1: 1,
60 25: 1,
61 39: 1,
62 40: 3,
63 44: 3,
64 48: 3,
65 50: 3,
66 52: 3,
67 54: 3,
68 55: 3,
69 61: 3,
70 63: 3,
71 67: 3,
72 73: 2,
73 74: 1,
74 75: 1,
75 76: 1,
76 77: 1,
77 79: 2,
78 81: 1,
79 82: 1,
80 83: 1,
81 84: 1,
82 87: 3
83 },
84 total: 92
85 }))
86 };
87
88 return helper.setupMockEndpoint('1234', '4321', Joi.compile(expectedCoverage))
89 .then(function () {
90 return expect(handleInput(lcovData, {
91 token: '1234',
92 commit: '4321'
93 })).to.eventually.be.fulfilled();
94 });
95 });
96 it('should be able to parse lcov data with path prefix', function () {
97 var expectedCoverage = {
98 total: 92,
99 fileReports: Joi.array().items(Joi.compile({
100 filename: path.normalize('my-project/lib/reporter.js'),
101 coverage: {
102 1: 1,
103 25: 1,
104 39: 1,
105 40: 3,
106 44: 3,
107 48: 3,
108 50: 3,
109 52: 3,
110 54: 3,
111 55: 3,
112 61: 3,
113 63: 3,
114 67: 3,
115 73: 2,
116 74: 1,
117 75: 1,
118 76: 1,
119 77: 1,
120 79: 2,
121 81: 1,
122 82: 1,
123 83: 1,
124 84: 1,
125 87: 3
126 },
127 total: 92
128 }))
129 };
130
131 return helper.setupMockEndpoint('1234', '4321', Joi.compile(expectedCoverage))
132 .then(function () {
133 return expect(handleInput(lcovData, {
134 token: '1234',
135 commit: '4321',
136 prefix: 'my-project' + path.sep
137 })).to.eventually.be.fulfilled();
138 });
139 });
140 it('shouldn\'t be able to send coverage with invalid input', function () {
141 process.env.CODACY_PROJECT_TOKEN = '';
142 return expect(handleInput()).to.eventually.be.rejectedWith(Error, 'Token is required');
143 });
144 });
145
146}(require('../lib/handleInput'), require('./helper'), require('joi'), require('request-promise'), require('fs'), require('path')));