setup-php/node_modules/codecov/test/index.test.js
2019-09-20 21:54:46 +05:30

280 lines
8.7 KiB
JavaScript

var fs = require('fs')
var mockFs = require('mock-fs')
var codecov = require('../lib/codecov')
var isWindows =
process.platform.match(/win32/) || process.platform.match(/win64/)
var pathSeparator = !isWindows ? '/' : '\\'
describe('Codecov', function() {
beforeEach(function() {
try {
fs.unlinkSync('.bowerrc')
} catch (e) {}
})
afterAll(function() {
try {
fs.unlinkSync('.bowerrc')
} catch (e) {}
})
it('can get a token passed via env variable', function() {
jest.setTimeout(10000)
process.env.codecov_token = 'abc123'
expect(codecov.upload({ options: { dump: true } }).query.token).toBe(
'abc123'
)
delete process.env.codecov_token
process.env.CODECOV_TOKEN = 'ABC123'
expect(codecov.upload({ options: { dump: true } }).query.token).toBe(
'ABC123'
)
delete process.env.CODECOV_TOKEN
})
it('can get a token passed in cli', function() {
expect(
codecov.upload({ options: { dump: true, token: 'qwerty' } }).query.token
).toBe('qwerty')
})
it('can read a codecov.yml file', function() {
mockFs({
'codecov.yml': 'codecov:\n token: fake-token',
})
expect(codecov.upload({ options: { dump: true } }).query.token).toBe(
'fake-token'
)
mockFs.restore()
})
it('can read a .codecov.yml file', function() {
mockFs({
'.codecov.yml': 'codecov:\n token: fake-token-dotfile',
})
expect(codecov.upload({ options: { dump: true } }).query.token).toBe(
'fake-token-dotfile'
)
mockFs.restore()
})
it('should have no token if yaml file does not supplied', function() {
mockFs({
'.codecov.yml': 'codecov:\n noconfig: true',
})
expect(codecov.upload({ options: { dump: true } }).query.token).toBe(
undefined
)
mockFs.restore()
})
it('token precedence should be respected', function() {
// options.token || .codecov.yml/codecov.yml file || codecov_token || CODECOV_TOKEN
mockFs({
'.codecov.yml': 'codecov:\n token: fake-token-dotfile',
})
var upload = codecov.upload({ options: { dump: true, token: 'qwerty' } })
expect(upload.query.token).toBe('qwerty')
mockFs.restore()
process.env.codecov_token = 'abc123'
upload = codecov.upload({ options: { dump: true, token: 'qwerty2' } })
expect(upload.query.token).toBe('qwerty2')
delete process.env.codecov_token
process.env.CODECOV_TOKEN = 'ABC123'
upload = codecov.upload({ options: { dump: true, token: 'qwerty3' } })
expect(upload.query.token).toBe('qwerty3')
delete process.env.CODECOV_TOKEN
mockFs({
'.codecov.yml': 'codecov:\n token: fake-token-dotfile',
})
process.env.codecov_token = 'abc123'
upload = codecov.upload({ options: { dump: true } })
expect(upload.query.token).toBe('fake-token-dotfile')
mockFs.restore()
process.env.codecov_token = 'abc123'
process.env.CODECOV_TOKEN = 'ABC123'
upload = codecov.upload({ options: { dump: true } })
expect(upload.query.token).toBe('abc123')
delete process.env.codecov_token
delete process.env.CODECOV_TOKEN
})
it('can auto detect reports', function() {
var res = codecov.upload({ options: { dump: true } })
expect(res.files[0].split(pathSeparator).pop()).toBe('example.coverage.txt')
expect(res.body).toContain('this file is intentionally left blank')
})
it('can specify report in cli', function() {
var res = codecov.upload({
options: {
dump: true,
file: 'test' + pathSeparator + 'example.coverage.txt',
},
})
expect(res.files[0].split(pathSeparator).pop()).toBe('example.coverage.txt')
expect(res.body).toContain('this file is intentionally left blank')
})
it('can specify report in cli fail', function() {
var res = codecov.upload({ options: { dump: true, file: 'notreal.txt' } })
expect(res.debug).toContain('failed: notreal.txt')
})
// it("can detect .bowerrc with directory", function(){
// fs.writeFileSync('.bowerrc', '{"directory": "test"}');
// var res = codecov.upload({options: {dump: true}});
// expect(res.files).toBe([]);
// });
it('can detect .bowerrc without directory', function() {
fs.writeFileSync('.bowerrc', '{"key": "value"}')
var res = codecov.upload({ options: { dump: true } })
expect(res.files[0].split(pathSeparator).pop()).toBe('example.coverage.txt')
expect(res.body).toContain('this file is intentionally left blank')
})
it('can disable search', function() {
var res = codecov.upload({ options: { dump: true, disable: 'search' } })
expect(res.debug).toContain('disabled search')
expect(res.files).toEqual([])
})
it('can disable gcov', function() {
var res = codecov.upload({ options: { dump: true, disable: 'gcov' } })
console.log(res.debug)
expect(res.debug).toContain('disabled gcov')
})
it('can disable detection', function() {
var res = codecov.upload({ options: { dump: true, disable: 'detect' } })
expect(res.debug).toContain('disabled detect')
})
it('can get build from cli args', function() {
var res = codecov.upload({ options: { dump: true, build: 'value' } })
expect(res.query.build).toBe('value')
})
it('can get commit from cli args', function() {
var res = codecov.upload({ options: { dump: true, commit: 'value' } })
expect(res.query.commit).toBe('value')
})
it('can get branch from cli args', function() {
var res = codecov.upload({ options: { dump: true, branch: 'value' } })
expect(res.query.branch).toBe('value')
})
it('can get slug from cli args', function() {
var res = codecov.upload({ options: { dump: true, slug: 'value' } })
expect(res.query.slug).toBe('value')
})
it('can get flags from cli args', function() {
var res = codecov.upload({ options: { dump: true, flags: 'value' } })
expect(res.query.flags).toBe('value')
})
it('can include env in cli', function() {
process.env.HELLO = 'world'
var res = codecov.upload({ options: { dump: true, env: 'HELLO,VAR1' } })
expect(res.body).toContain('HELLO=world\n')
expect(res.body).toContain('VAR1=\n')
delete process.env.HELLO
})
it('can include env in env', function() {
process.env.HELLO = 'world'
process.env.CODECOV_ENV = 'HELLO,VAR1'
var res = codecov.upload({ options: { dump: true, env: 'VAR2' } })
expect(res.body).toContain('HELLO=world\n')
expect(res.body).toContain('VAR1=\n')
expect(res.body).toContain('VAR2=\n')
delete process.env.HELLO
delete process.env.CODECOV_ENV
})
it('can have custom args for gcov', function() {
var res = codecov.upload({
options: {
dump: true,
'gcov-root': 'folder/path',
'gcov-glob': 'ignore/this/folder',
'gcov-exec': 'llvm-gcov',
'gcov-args': '-o',
},
})
if (!isWindows) {
expect(res.debug).toContain(
"find folder/path -type f -name '*.gcno' -not -path 'ignore/this/folder' -exec llvm-gcov -o {} +"
)
} else {
expect(res.debug).toContain(
'for /f "delims=" %g in (\'dir /a-d /b /s *.gcno ^| findstr /i /v ignore/this/folder\') do llvm-gcov -o %g'
)
}
})
it('can read piped reports', function(done) {
var exec = require('child_process').exec
var childProcess = exec(
'cat test/example.coverage.txt | bin/codecov -l --dump --disable=gcov',
function(err, stdout) {
expect(stdout.toString()).toContain('path=piped')
expect(stdout.toString()).toContain(
'this file is intentionally left blank'
)
childProcess.kill()
done()
}
)
})
it('should have the correct version number', function() {
var version = require('../package.json').version
expect(codecov.version).toBe('v' + version)
})
it('Should use codecov.yml via env variable', function() {
var CWD = process.cwd()
expect(
codecov.upload({ options: { dump: true, disable: 'detect' } }).query.yaml
).toBe(CWD + '/codecov.yml')
mockFs({
'foo.yml': '',
})
process.env.codecov_yml = 'foo.yml'
expect(
codecov.upload({ options: { dump: true, disable: 'detect' } }).query.yaml
).toBe(CWD + '/foo.yml')
mockFs.restore()
delete process.env.codecov_yml
mockFs({
'FOO.yml': '',
})
process.env.CODECOV_YML = 'FOO.yml'
expect(
codecov.upload({ options: { dump: true, disable: 'detect' } }).query.yaml
).toBe(CWD + '/FOO.yml')
mockFs.restore()
delete process.env.CODECOV_YML
})
it('can get config from cli args', function() {
mockFs({
'foo.yml': '',
})
var res = codecov.upload({
options: { dump: true, yml: 'foo.yml', disable: 'detect' },
})
expect(res.query.yaml).toBe(process.cwd() + '/foo.yml')
mockFs.restore()
})
})