64 lines
1.9 KiB
JavaScript
64 lines
1.9 KiB
JavaScript
const child = require('child_process');
|
|
const Dgeni = require('dgeni');
|
|
const semver = require('semver');
|
|
|
|
const basePackage = require('../index');
|
|
|
|
describe('getPreviousMajorVersions', () => {
|
|
let getPreviousMajorVersions;
|
|
|
|
beforeEach(() => {
|
|
const mockPackage = new Dgeni.Package('mock-package', [basePackage])
|
|
.factory('versionInfo', mockVersionInfo)
|
|
.factory('packageInfo', mockPackageInfo);
|
|
const dgeni = new Dgeni([mockPackage]);
|
|
const injector = dgeni.configureInjector();
|
|
getPreviousMajorVersions = injector.get('getPreviousMajorVersions');
|
|
});
|
|
|
|
it('should spawn a child process to git', () => {
|
|
spyOn(child, 'spawnSync').and.returnValue({status: 0, stdout: ''});
|
|
getPreviousMajorVersions();
|
|
expect(child.spawnSync).toHaveBeenCalledWith('git', ['ls-remote', '--tags', 'SOME_GIT_URL'], {
|
|
encoding: 'utf8'
|
|
});
|
|
});
|
|
|
|
it('should return an empty list for a failed git command', () => {
|
|
spyOn(child, 'spawnSync').and.returnValue({status: 1});
|
|
expect(getPreviousMajorVersions()).toEqual([]);
|
|
});
|
|
|
|
it('should return an empty list for no tags', () => {
|
|
spyOn(child, 'spawnSync').and.returnValue({status: 0, stdout: ''});
|
|
expect(getPreviousMajorVersions()).toEqual([]);
|
|
});
|
|
|
|
it('should return an array of latest major versions with major greater than current', () => {
|
|
spyOn(child, 'spawnSync').and.returnValue({
|
|
status: 0,
|
|
stdout: `
|
|
refs/pull/655
|
|
refs/tags/some-tag
|
|
refs/tags/3.8.1
|
|
refs/tags/4.2.9
|
|
refs/tags/4.2.10
|
|
refs/tags/5.6.1
|
|
refs/tags/6.1.1
|
|
`
|
|
});
|
|
expect(getPreviousMajorVersions()).toEqual([
|
|
semver.parse('4.2.10'),
|
|
semver.parse('3.8.1'),
|
|
]);
|
|
});
|
|
});
|
|
|
|
function mockVersionInfo() {
|
|
return {currentVersion: semver.parse('5.1.0')};
|
|
}
|
|
|
|
function mockPackageInfo() {
|
|
return {repository: {url: 'SOME_GIT_URL'}};
|
|
}
|