Skip to content

Commit

Permalink
test(travis-cli): migrate tests from ava to jest (#910)
Browse files Browse the repository at this point in the history
* test(travis-cli): migrate tests from ava to jest

* test(travis-cli): remove redundant tests

* test(travis-cli): fix and enable mocked tests

* test(travis-cli): restore some original code

Co-authored-by: Cedric van Putten <me@bycedric.com>
  • Loading branch information
armano2 and byCedric committed Jan 27, 2020
1 parent 4889cee commit f3af938
Show file tree
Hide file tree
Showing 9 changed files with 110 additions and 220 deletions.
2 changes: 1 addition & 1 deletion @commitlint/cli/src/cli.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {merge} from 'lodash';
import * as sander from 'sander';
import stream from 'string-to-stream';

const bin = path.normalize(path.join(__dirname, '../lib/cli.js'));
const bin = require.resolve('../lib/cli.js');

const cli = (args, options) => {
return (input = '') => {
Expand Down
9 changes: 8 additions & 1 deletion @commitlint/travis-cli/fixtures/commitlint.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,9 @@
#!/usr/bin/env node
console.log(process.argv);

const args = process.argv;
args.shift(); // remove node
console.log(
args.map((item, index) => {
return index === 0 ? 'commitlint' : item;
})
);
9 changes: 8 additions & 1 deletion @commitlint/travis-cli/fixtures/git.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,9 @@
#!/usr/bin/env node
console.log(process.argv);

const args = process.argv;
args.shift(); // remove node
console.log(
args.map((item, index) => {
return index === 0 ? 'git' : item;
})
);
25 changes: 2 additions & 23 deletions @commitlint/travis-cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,8 @@
"deps": "dep-check",
"pkg": "pkg-check --skip-main",
"start": "ava -c 4 --verbose --watch",
"test": "ava -c 4 --verbose",
"watch": "babel src --out-dir lib --watch --source-maps"
},
"ava": {
"files": [
"src/**/*.test.js"
],
"source": [
"lib/**/*.js"
],
"babel": {
"testOptions": {
"presets": [
"babel-preset-commitlint"
]
}
},
"require": [
"@babel/register"
]
},
"babel": {
"presets": [
"babel-preset-commitlint"
Expand Down Expand Up @@ -61,15 +42,13 @@
},
"license": "MIT",
"devDependencies": {
"@babel/core": "7.7.7",
"@babel/cli": "7.7.7",
"@babel/core": "7.7.7",
"@babel/register": "7.7.7",
"@commitlint/test": "8.2.0",
"@commitlint/utils": "^8.3.4",
"ava": "2.4.0",
"babel-preset-commitlint": "^8.2.0",
"cross-env": "6.0.3",
"which": "2.0.1"
"cross-env": "6.0.3"
},
"dependencies": {
"@commitlint/cli": "^8.3.5",
Expand Down
2 changes: 1 addition & 1 deletion @commitlint/travis-cli/src/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ async function lint(args, options) {
}

async function log(hash) {
const result = await execa('git', [
const result = await execa(GIT, [
'log',
'-n',
'1',
Expand Down
252 changes: 74 additions & 178 deletions @commitlint/travis-cli/src/cli.test.js
Original file line number Diff line number Diff line change
@@ -1,218 +1,114 @@
// Disable ftb
// const os = require('os');
// const {git} = require('@commitlint/test');
import test from 'ava';
import execa from 'execa';
// Disable ftb
// const which = require('which');

// Disable ftb
// const NODE_BIN = which.sync('node');
const BIN = require.resolve('../lib/cli.js');

// Disable ftb
// const TRAVIS_COMMITLINT_BIN = require.resolve('../fixtures/commitlint');
// const TRAVIS_COMMITLINT_GIT_BIN = require.resolve('../fixtures/git');
// const TRAVIS_BRANCH = 'TRAVIS_BRANCH';
// const TRAVIS_COMMIT = 'TRAVIS_COMMIT';
import {git} from '@commitlint/test';

const bin = require.resolve('../lib/cli.js');

const TRAVIS_COMMITLINT_BIN = require.resolve('../fixtures/commitlint');
const TRAVIS_COMMITLINT_GIT_BIN = require.resolve('../fixtures/git');

const validBaseEnv = {
TRAVIS: true,
CI: true,
TRAVIS_COMMIT: 'TRAVIS_COMMIT',
TRAVIS_COMMITLINT_BIN: TRAVIS_COMMITLINT_BIN,
TRAVIS_COMMITLINT_GIT_BIN: TRAVIS_COMMITLINT_GIT_BIN,
TRAVIS_COMMIT_RANGE: 'TRAVIS_COMMIT_A.TRAVIS_COMMIT_B',
TRAVIS_EVENT_TYPE: 'TRAVIS_EVENT_TYPE',
TRAVIS_REPO_SLUG: 'TRAVIS_REPO_SLUG',
TRAVIS_PULL_REQUEST_SLUG: 'TRAVIS_PULL_REQUEST_SLUG'
};

const bin = async (config = {}) => {
const cli = async (config = {}) => {
try {
return await execa(BIN, Object.assign({extendEnv: false}, config));
return await execa(bin, [], config);
} catch (err) {
throw new Error([err.stdout, err.stderr].join('\n'));
}
};

test('should throw when not on travis ci', async t => {
test('should throw when not on travis ci', async () => {
const env = {
CI: false,
TRAVIS: false
};

await t.throwsAsync(
bin({env}),
/@commitlint\/travis-cli is intended to be used on Travis CI/
await expect(cli({env})).rejects.toThrow(
'@commitlint/travis-cli is intended to be used on Travis CI'
);
});

/* Test.failing(
'should throw when on travis ci, but env vars are missing',
async t => {
const env = {
TRAVIS: true,
CI: true
};
await t.throwsAsync(bin({env}), /TRAVIS_COMMIT, TRAVIS_BRANCH/);
}
); */

test('should throw when on travis ci, but TRAVIS_COMMIT is missing', async t => {
test('should throw when on travis ci, but env vars are missing', async () => {
const env = {
TRAVIS: true,
CI: true
};

await t.throwsAsync(bin({env}), /TRAVIS_COMMIT/);
await expect(cli({env})).rejects.toThrow(
'TRAVIS_COMMIT, TRAVIS_COMMIT_RANGE, TRAVIS_EVENT_TYPE, TRAVIS_REPO_SLUG, TRAVIS_PULL_REQUEST_SLUG'
);
});

/* Test.failing(
'should throw when on travis ci, but TRAVIS_BRANCH is missing',
async t => {
const env = {
TRAVIS: true,
CI: true
};
test('should call git with expected args', async () => {
const cwd = await git.clone(
'https://github.com/conventional-changelog/commitlint.git',
['--depth=10'],
__dirname,
TRAVIS_COMMITLINT_GIT_BIN
);

await t.throwsAsync(bin({env}), /TRAVIS_BRANCH/);
}
);
const result = await cli({
cwd,
env: validBaseEnv
});
const invocations = await getInvocations(result.stdout);
expect(invocations.length).toBe(3);

test.failing('should call git with expected args on shallow repo', async t => {
if (os.platform() === 'win32') {
t.pass();
return;
}
const [stash, branches, commilint] = invocations;

const cwd = await git.clone('https://github.com/conventional-changelog/commitlint.git', [
'--depth=10'
]);
expect(stash).toEqual(['git', 'stash', '-k', '-u', '--quiet']);
expect(branches).toEqual(['git', 'stash', 'pop', '--quiet']);
expect(commilint).toEqual(['commitlint']);
});

const env = {
TRAVIS: true,
CI: true,
TRAVIS_BRANCH,
TRAVIS_COMMIT,
TRAVIS_COMMITLINT_BIN,
test('should call git with expected args on pull_request', async () => {
const cwd = await git.clone(
'https://github.com/conventional-changelog/commitlint.git',
['--depth=10'],
__dirname,
TRAVIS_COMMITLINT_GIT_BIN
};
);

const result = await bin({cwd, env});
const result = await cli({
cwd,
env: {...validBaseEnv, TRAVIS_EVENT_TYPE: 'pull_request'}
});
const invocations = await getInvocations(result.stdout);
t.is(invocations.length, 7);
const [
stash,
branches,
unshallow,
checkout,
back,
pop,
commilint
] = invocations;
t.deepEqual(stash, [NODE_BIN, TRAVIS_COMMITLINT_GIT_BIN, 'stash']);
t.deepEqual(branches, [
NODE_BIN,
TRAVIS_COMMITLINT_GIT_BIN,
'remote',
'set-branches',
'origin',
TRAVIS_BRANCH
]);
t.deepEqual(unshallow, [
NODE_BIN,
TRAVIS_COMMITLINT_GIT_BIN,
'fetch',
'--unshallow',
'--quiet'
]);
t.deepEqual(checkout, [
NODE_BIN,
TRAVIS_COMMITLINT_GIT_BIN,
'checkout',
TRAVIS_BRANCH,
'--quiet'
]);
t.deepEqual(back, [
NODE_BIN,
TRAVIS_COMMITLINT_GIT_BIN,
'checkout',
'-',
'--quiet'
]);
t.deepEqual(pop, [NODE_BIN, TRAVIS_COMMITLINT_GIT_BIN, 'stash', 'pop']);
t.deepEqual(commilint, [
NODE_BIN,
TRAVIS_COMMITLINT_BIN,
expect(invocations.length).toBe(3);

const [stash, branches, commilint] = invocations;

expect(stash).toEqual(['git', 'stash', '-k', '-u', '--quiet']);
expect(branches).toEqual(['git', 'stash', 'pop', '--quiet']);
expect(commilint).toEqual([
'commitlint',
'--from',
TRAVIS_BRANCH,
'TRAVIS_COMMIT_A',
'--to',
TRAVIS_COMMIT
'TRAVIS_COMMIT_B'
]);
});

test.failing(
'should call git with expected args on unshallow repo',
async t => {
if (os.platform() === 'win32') {
t.pass();
return;
}
const cwd = await git.clone('https://github.com/conventional-changelog/commitlint.git');
const env = {
TRAVIS: true,
CI: true,
TRAVIS_BRANCH,
TRAVIS_COMMIT,
TRAVIS_COMMITLINT_BIN,
TRAVIS_COMMITLINT_GIT_BIN
};
const result = await bin({cwd, env});
const invocations = await getInvocations(result.stdout);
t.is(invocations.length, 6);
const [stash, branches, checkout, back, pop, commilint] = invocations;
t.deepEqual(stash, [NODE_BIN, TRAVIS_COMMITLINT_GIT_BIN, 'stash']);
t.deepEqual(branches, [
NODE_BIN,
TRAVIS_COMMITLINT_GIT_BIN,
'remote',
'set-branches',
'origin',
TRAVIS_BRANCH
]);
t.deepEqual(checkout, [
NODE_BIN,
TRAVIS_COMMITLINT_GIT_BIN,
'checkout',
TRAVIS_BRANCH,
'--quiet'
]);
t.deepEqual(back, [
NODE_BIN,
TRAVIS_COMMITLINT_GIT_BIN,
'checkout',
'-',
'--quiet'
]);
t.deepEqual(pop, [NODE_BIN, TRAVIS_COMMITLINT_GIT_BIN, 'stash', 'pop']);
t.deepEqual(commilint, [
NODE_BIN,
TRAVIS_COMMITLINT_BIN,
'--from',
TRAVIS_BRANCH,
'--to',
TRAVIS_COMMIT
]);
}
);
function getInvocations(stdout) {
const matches = stdout.match(/[^[\]]+/g);
const raw = Array.isArray(matches) ? matches : [];

return raw.filter(invocation => invocation !== '\n').map(invocation =>
invocation
.split(',')
.map(fragment => fragment.trim())
.map(fragment => fragment.substring(1, fragment.length - 1))
.filter(Boolean)
);
return raw
.filter(invocation => invocation !== '\n')
.map(invocation =>
invocation
.split(',')
.map(fragment => fragment.trim())
.map(fragment => fragment.substring(1, fragment.length - 1))
.filter(Boolean)
);
}
*/

0 comments on commit f3af938

Please sign in to comment.