Files
yarn/__tests__/commands/outdated.js
Simon Vocella 25890c8cf9 add prettier and prettying everything (#3401)
* add prettier and prettying everything

* fix scripts and run yarn prettier

* fix scripts again and run yarn prettier

* use eslint-plugin-prettify instead of custom scripts
2017-05-16 19:12:03 +01:00

133 lines
4.2 KiB
JavaScript

/* @flow */
import {run as buildRun} from './_helpers.js';
import {run as outdated} from '../../src/cli/commands/outdated.js';
import {ConsoleReporter, JSONReporter} from '../../src/reporters/index.js';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 90000;
const semver = require('semver');
const stream = require('stream');
const path = require('path');
const fixturesLoc = path.join(__dirname, '..', 'fixtures', 'outdated');
const runOutdated = buildRun.bind(
null,
// silence stderr
class extends JSONReporter {
constructor(opts: Object) {
super({
...opts,
stderr: new stream.Writable({
write() {},
}),
});
}
},
fixturesLoc,
async (args, flags, config, reporter, lockfile, getStdout): Promise<string> => {
await outdated(config, reporter, flags, args);
return getStdout();
},
);
test.concurrent('throws if lockfile is out of date', (): Promise<void> => {
const reporter = new ConsoleReporter({});
return new Promise(async resolve => {
try {
await runOutdated([], {}, 'lockfile-outdated');
} catch (err) {
expect(err.message).toContain(reporter.lang('lockfileOutdated'));
} finally {
resolve();
}
});
});
test.concurrent('no output when current matches latest', (): Promise<void> => {
return runOutdated([], {}, 'current-is-latest', (config, reporter, out): ?Promise<void> => {
expect(out).toBe('');
});
});
test.concurrent('works with no arguments', (): Promise<void> => {
return runOutdated([], {}, 'no-args', (config, reporter, out): ?Promise<void> => {
const json: Object = JSON.parse(out);
expect(json.data.body.length).toBe(1);
});
});
test.concurrent('works with single argument', (): Promise<void> => {
return runOutdated(['max-safe-integer'], {}, 'single-package', (config, reporter, out): ?Promise<void> => {
const json: Object = JSON.parse(out);
expect(json.data.body.length).toBe(1);
expect(json.data.body[0][0]).toBe('max-safe-integer');
});
});
test.concurrent('works with multiple arguments', (): Promise<void> => {
return runOutdated(['left-pad', 'max-safe-integer'], {}, 'multiple-packages', (config, reporter, out): ?Promise<
void,
> => {
const json: Object = JSON.parse(out);
expect(json.data.body.length).toBe(2);
expect(json.data.body[0][0]).toBe('left-pad');
expect(json.data.body[1][0]).toBe('max-safe-integer');
});
});
test.concurrent('works with exotic resolvers', (): Promise<void> => {
return runOutdated([], {}, 'exotic-resolvers', (config, reporter, out): ?Promise<void> => {
const json: Object = JSON.parse(out);
const first = [
'max-safe-integer',
'1.0.1',
'exotic',
'exotic',
'dependencies',
'https://github.com/sindresorhus/max-safe-integer.git',
];
const second = ['yarn', '0.16.2', 'exotic', 'exotic', 'dependencies', 'yarnpkg/yarn'];
expect(json.data.body.length).toBe(2);
expect(json.data.body[0]).toEqual(first);
expect(json.data.body[1]).toEqual(second);
});
});
test.concurrent('hides when current > latest (next, beta tag)', (): Promise<void> => {
return runOutdated([], {}, 'current-newer-than-latest', (config, reporter, out): ?Promise<void> => {
expect(out).toBe('');
});
});
test.concurrent('shows when wanted > current and current > latest', (): Promise<void> => {
return runOutdated([], {}, 'wanted-newer-than-current', (config, reporter, out): ?Promise<void> => {
const json: Object = JSON.parse(out);
expect(json.data.body.length).toBe(1);
expect(json.data.body[0][0]).toBe('webpack');
expect(semver.lt(json.data.body[0][1], json.data.body[0][2])).toBe(true);
});
});
test.concurrent('displays correct dependency types', (): Promise<void> => {
return runOutdated([], {}, 'display-dependency-type', (config, reporter, out): ?Promise<void> => {
const json: Object = JSON.parse(out);
const {body} = json.data;
// peerDependencies aren't included in the output
expect(json.data.body.length).toBe(3);
expect(body[0][0]).toBe('is-online');
expect(body[0][4]).toBe('optionalDependencies');
expect(body[1][0]).toBe('left-pad');
expect(body[1][4]).toBe('dependencies');
expect(body[2][0]).toBe('max-safe-integer');
expect(body[2][4]).toBe('devDependencies');
});
});