UNPKG

@interaktiv/dia-scripts

Version:

CLI toolbox with common scripts for most sort of projects at DIA

150 lines (121 loc) 4.44 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _path = _interopRequireDefault(require("path")); var _fsExtra = _interopRequireDefault(require("fs-extra")); var _tempy = _interopRequireDefault(require("tempy")); var _serializers = require("./__tests__/helpers/serializers"); expect.addSnapshotSerializer(_serializers.unquoteSerializer); expect.addSnapshotSerializer(_serializers.winPathSerializer); jest.mock('read-pkg-up', () => ({ sync: jest.fn(() => ({ package: { name: 'dia-scripts-test' }, path: '/blah/package.json' })) })); jest.mock('is-ci', () => false); let originalArgv, originalEnv, originalExit, crossSpawnSyncMock, originalConsoleLog, readPkgUpSyncMock, testDirectory, consoleLogMock; describe('run git', () => { beforeEach(() => { ({ sync: crossSpawnSyncMock } = require('cross-spawn')); readPkgUpSyncMock = require('read-pkg-up').sync; originalConsoleLog = console.log; originalEnv = process.env; originalArgv = process.argv; originalExit = process.exit; console.log = jest.fn(); process.exit = jest.fn(); consoleLogMock = console.log; testDirectory = _tempy.default.directory(); process.env.INIT_CWD = testDirectory; }); afterEach(() => { console.log = originalConsoleLog; process.exit = originalExit; process.env = originalEnv; process.argv = originalArgv; if (testDirectory != null) { _fsExtra.default.removeSync(testDirectory); testDirectory = null; } jest.resetModules(); }); function mockPkg({ pkg = { name: 'dia-scripts-test' }, pkgPath = '/blah/package.json' }) { readPkgUpSyncMock.mockImplementationOnce(() => ({ package: pkg, path: pkgPath })); } const fromHere = (...p) => _path.default.join(__dirname, ...p); const createFromTemplate = (template, dest) => _fsExtra.default.copySync(fromHere(`./__tests__/fixtures/init/${template}`), dest); it('should do nothing if running by self', () => { createFromTemplate('self', testDirectory); const pkgPath = _path.default.resolve(testDirectory, 'package.json'); mockPkg({ pkg: { name: '@interaktiv/dia-scripts' }, pkgPath }); process.argv = ['node', './git', ...[]]; require('./git'); const [, logCall] = consoleLogMock.mock.calls; const [log] = logCall; expect(log).toEqual(expect.stringMatching(/skipping/)); }); it('should init a git repo', () => { createFromTemplate('default', testDirectory); const pkgPath = _path.default.resolve(testDirectory, 'package.json'); mockPkg({ pkgPath }); crossSpawnSyncMock.mockReturnValueOnce({ status: 0 }); crossSpawnSyncMock.mockReturnValueOnce({ status: 1 }); process.argv = ['node', './git', ...[]]; require('./git'); crossSpawnSyncMock.mock.calls.map(([script, calledArgs]) => [script, ...calledArgs].join(' ')).forEach(c => expect(c).toMatchSnapshot()); const [lastCall] = crossSpawnSyncMock.mock.calls.slice(-1); const [script, calledArgs] = lastCall; expect([script, ...calledArgs].join(' ')).toEqual(expect.stringMatching(/init/)); }); it('should NOT init a git repo if one already exists', () => { createFromTemplate('default', testDirectory); const pkgPath = _path.default.resolve(testDirectory, 'package.json'); mockPkg({ pkgPath }); process.argv = ['node', './git', ...[]]; require('./git'); crossSpawnSyncMock.mock.calls.map(([script, calledArgs]) => [script, ...calledArgs].join(' ')).forEach(c => expect(c).toMatchSnapshot()); const [lastCall] = crossSpawnSyncMock.mock.calls.slice(-1); const [script, calledArgs] = lastCall; expect([script, ...calledArgs].join(' ')).toEqual(expect.not.stringMatching(/init/)); }); it('should not run on CI', () => { createFromTemplate('default', testDirectory); const pkgPath = _path.default.resolve(testDirectory, 'package.json'); mockPkg({ pkgPath }); jest.mock('is-ci', () => true); process.argv = ['node', './git', ...[]]; require('./git'); expect(consoleLogMock).toHaveBeenCalledTimes(2); const [, logCall] = consoleLogMock.mock.calls; const [log] = logCall; expect(log).toEqual(expect.stringMatching(/skipping/)); expect(crossSpawnSyncMock).toBeCalledTimes(0); }); });