UNPKG

adr

Version:

轻量级架构记录工具 - Command-line tools for working with Architecture Decision Records

189 lines 15.9 kB
import { __awaiter } from "tslib"; let sinon = require('sinon'); let fs = require('fs'); let walkSync = require('walk-sync'); let LRU = require('lru-cache'); let OpenInEditor = require('open-in-editor'); import test from 'ava'; import ADR from '../index'; let Utils = ADR.Utils; let Config = ADR.Config; test('generateFileName: test for Chinese utf-8', t => { let str = Utils.generateFileName('你無可奈何asd fsadf'); t.deepEqual(str, '你無可奈何asd-fsadf'); }); test('generateFileName: test for newline', t => { let str = Utils.generateFileName('adr new fdsa \n ADR'); t.deepEqual(str, 'adr-new-fdsa-adr'); }); test('getSavePath: when no exist config file', t => { let fsExistSpy = sinon.stub(fs, 'existsSync').returns(false); let fsReadSpy = sinon.stub(fs, 'readFileSync').returns(JSON.stringify({ path: 'some' })); let dir = Config.getSavePath(); t.deepEqual(dir.includes('docs/adr/'), true); fsExistSpy.restore(); fsReadSpy.restore(); }); test('getSavePath: when exist config file', t => { let fsExistSpy = sinon.stub(fs, 'existsSync').returns(true); let cacheSpy = sinon.stub(LRU.prototype, 'get').returns({ path: 'some-path' }); let fsReadSpy = sinon.stub(fs, 'readFileSync').returns(JSON.stringify({ path: 'some-path' })); let dir = Config.getSavePath(); t.deepEqual(dir.indexOf('some-path') !== -1, true); fsExistSpy.restore(); fsReadSpy.restore(); cacheSpy.restore(); }); test('createIndexByNumber: should return correct pad 1', t => { let str = Utils.createIndexByNumber(1); t.deepEqual(str, '0001'); }); test('createIndexByNumber: should return correct pad 11', t => { let str = Utils.createIndexByNumber(11); t.deepEqual(str, '0011'); }); test('createIndexByNumber: should return correct pad 999', t => { let str = Utils.createIndexByNumber(999); t.deepEqual(str, '0999'); }); test('getLatestIndex: when exist config file', t => { let entriesSpy = sinon.stub(walkSync, 'entries').returns([ { relativePath: '001-编写完整的单元测试.md', basePath: '/Users/fdhuang/learing/adr/docs/adr/', mode: 33188, size: 246, mtime: 1511435254653 }, { relativePath: 'README.md', basePath: '/Users/fdhuang/learing/adr/docs/adr/', mode: 33188, size: 246, mtime: 1511435254653 } ]); let lastNumber = Utils.getLatestIndex(); t.deepEqual(1, lastNumber); entriesSpy.restore(); }); test('getLatestIndex: when exist config file with asciidoc', t => { let ADRGetDocExtensionSpy = sinon.stub(ADR.Config, 'getDocExtension').returns('adoc'); let entriesSpy = sinon.stub(walkSync, 'entries').returns([ { relativePath: '001-编写完整的单元测试.adoc', basePath: '/Users/fdhuang/learing/adr/docs/adr/', mode: 33188, size: 246, mtime: 1511435254653 }, { relativePath: 'README.adoc', basePath: '/Users/fdhuang/learing/adr/docs/adr/', mode: 33188, size: 246, mtime: 1511435254653 } ]); let lastNumber = Utils.getLatestIndex(); t.deepEqual(1, lastNumber); entriesSpy.restore(); ADRGetDocExtensionSpy.restore(); }); test('getNewNumber: when exist last number', t => { let entriesSpy = sinon.stub(walkSync, 'entries').returns([ { relativePath: '001-编写完整的单元测试.md', basePath: '/Users/fdhuang/learing/adr/docs/adr/', mode: 33188, size: 246, mtime: 1511435254653 }, { relativePath: 'README.md', basePath: '/Users/fdhuang/learing/adr/docs/adr/', mode: 33188, size: 246, mtime: 1511435254653 } ]); let newIndexString = Utils.getNewIndexString(); t.deepEqual('0002', newIndexString); entriesSpy.restore(); }); test('getNewNumber: when exist last number with asciidoc', t => { let ADRGetDocExtensionSpy = sinon.stub(ADR.Config, 'getDocExtension').returns('adoc'); let entriesSpy = sinon.stub(walkSync, 'entries').returns([ { relativePath: '001-编写完整的单元测试.adoc', basePath: '/Users/fdhuang/learing/adr/docs/adr/', mode: 33188, size: 246, mtime: 1511435254653 }, { relativePath: 'README.adoc', basePath: '/Users/fdhuang/learing/adr/docs/adr/', mode: 33188, size: 246, mtime: 1511435254653 } ]); let newIndexString = Utils.getNewIndexString(); t.deepEqual('0002', newIndexString); entriesSpy.restore(); ADRGetDocExtensionSpy.restore(); }); test('getNewNumber: when exist last number 001', t => { let entriesSpy = sinon.stub(walkSync, 'entries').returns([]); let newIndexString = Utils.getNewIndexString(); t.deepEqual('0001', newIndexString); entriesSpy.restore(); }); test('getLanguage: should enable get language', t => { let fsExistSpy = sinon.stub(fs, 'existsSync').returns(true); let cacheSpy = sinon.stub(LRU.prototype, 'get').returns({ path: 'some', language: 'test' }); let fsReadSpy = sinon.stub(fs, 'readFileSync').returns(JSON.stringify({ path: 'some', language: 'test' })); let language = Config.getLanguage() ? Config.getLanguage() : ''; if (!language) language = ''; t.deepEqual(language, 'test'); fsExistSpy.restore(); fsReadSpy.restore(); cacheSpy.restore(); }); test('createDateString: should return correct date string', t => { let clock = sinon.useFakeTimers(new Date(2099, 0, 1)); let language = Utils.createDateString(); t.deepEqual(language, '2099-01-01'); clock.restore(); }); test('openInEditor: should open in editor successfully', t => { let filename = 'test-open-in-editor.md'; let openInEditorSpy = sinon.stub(OpenInEditor, 'configure').returns({ open: (filePath) => __awaiter(void 0, void 0, void 0, function* () { t.is(filePath, filename); }) }); Utils.openInEditor(filename); openInEditorSpy.restore(); }); test('openInEditor: should open in editor successfully with asciidoc', t => { let filename = 'test-open-in-editor.adoc'; let openInEditorSpy = sinon.stub(OpenInEditor, 'configure').returns({ open: (filePath) => __awaiter(void 0, void 0, void 0, function* () { t.is(filePath, filename); }) }); Utils.openInEditor(filename); openInEditorSpy.restore(); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0cy91dGlscy5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDNUIsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3RCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUNuQyxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDOUIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFFNUMsT0FBTyxJQUFJLE1BQU0sS0FBSyxDQUFBO0FBQ3RCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUUxQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFBO0FBQ3JCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7QUFFdkIsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ25ELElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ2xELENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUE7QUFDcEMsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDN0MsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDdkQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtBQUN0QyxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNqRCxJ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