adr
Version:
轻量级架构记录工具 - Command-line tools for working with Architecture Decision Records
219 lines (203 loc) • 16.7 kB
JavaScript
let sinon = require('sinon');
let fs = require('fs');
let walkSync = require('walk-sync');
import test from 'ava';
import ADR from '../index';
let Config = ADR.Config;
let mdTemplateCn = `# 1. 更友好的 CLI
日期: 2017-11-23
## 状态
列表:提议/通过/完成/已弃用/已取代
2017-11-23 提议
`;
test('ADR: init in chinese', t => {
let ADRGetSavePathSpy = sinon.stub(Config, 'getSavePath').returns('./');
let fsWriteSpy = sinon.stub(fs, 'writeFileSync');
let consoleSpy = sinon.stub(console, 'log');
let renameSpy = sinon.stub(fs, 'renameSync');
let entriesSpy = sinon.stub(walkSync, 'entries').returns([
{
relativePath: '001-DAF编写完整的单元测试.md',
basePath: '/Users/fdhuang/learing/adr/docs/adr/',
mode: 33188,
size: 246,
mtime: 1511435254653
},
{
relativePath: '0000-tests.md',
basePath: '/Users/fdhuang/learing/adr/docs/adr/',
mode: 33188,
size: 246,
mtime: 1511435254653
}
]);
let fsReadSpy = sinon.stub(fs, 'readFileSync');
fsReadSpy
.onCall(0).returns(mdTemplateCn)
.onCall(2).returns(mdTemplateCn)
.onCall(3).returns('{}')
.onCall(1).returns(JSON.stringify({
path: 'some'
}));
ADR.update();
t.deepEqual(fsWriteSpy.callCount, 2);
t.deepEqual(fsReadSpy.callCount, 2);
t.deepEqual(renameSpy.callCount, 1);
t.deepEqual(consoleSpy.calledWith('001-DAF编写完整的单元测试.md -> 0001-更友好的-cli.md'), true);
fsWriteSpy.restore();
fsReadSpy.restore();
entriesSpy.restore();
consoleSpy.restore();
renameSpy.restore();
ADRGetSavePathSpy.restore();
});
let mdTemplateJp = `# 1. Foo は Bar ではなく Baz で管理する
年月日: 2017-11-23
## ステータス
リスト:提案中/承認済/完了/非推奨/更新済
2017-11-23 提案中
`;
test('ADR: init in japanese', t => {
let getForceNfcStub = sinon.stub(Config, 'getForceNfc').returns(true);
let ADRGetSavePathSpy = sinon.stub(Config, 'getSavePath').returns('./');
let fsWriteSpy = sinon.stub(fs, 'writeFileSync');
let consoleSpy = sinon.stub(console, 'log');
let renameSpy = sinon.stub(fs, 'renameSync');
let entriesSpy = sinon.stub(walkSync, 'entries').returns([
{
relativePath: '001-foo-は-bar-ではなく-baz-で管理する.md',
basePath: '/Users/fdhuang/learing/adr/docs/adr/',
mode: 33188,
size: 246,
mtime: 1511435254653
},
{
relativePath: '0000-tests.md',
basePath: '/Users/fdhuang/learing/adr/docs/adr/',
mode: 33188,
size: 246,
mtime: 1511435254653
}
]);
let fsReadSpy = sinon.stub(fs, 'readFileSync');
fsReadSpy
.onCall(0).returns(mdTemplateJp)
.onCall(2).returns(mdTemplateJp)
.onCall(3).returns('{}')
.onCall(1).returns(JSON.stringify({
path: 'some'
}));
ADR.update();
t.deepEqual(fsWriteSpy.callCount, 2);
t.deepEqual(fsReadSpy.callCount, 2);
t.deepEqual(renameSpy.callCount, 1);
t.deepEqual(consoleSpy.calledWith('001-foo-は-bar-ではなく-baz-で管理する.md -> 0001-foo-は-bar-ではなく-baz-で管理する.md'), true);
fsWriteSpy.restore();
fsReadSpy.restore();
entriesSpy.restore();
consoleSpy.restore();
renameSpy.restore();
ADRGetSavePathSpy.restore();
getForceNfcStub.restore();
});
let asciidocTemplateCn = `= 1. 更友好的 CLI
日期: 2017-11-23
== 状态
列表:提议/通过/完成/已弃用/已取代
2017-11-23 提议
`;
test('ADR: init in chinese with Asciidoc', t => {
let ADRGetSavePathSpy = sinon.stub(Config, 'getSavePath').returns('./');
let fsWriteSpy = sinon.stub(fs, 'writeFileSync');
let consoleSpy = sinon.stub(console, 'log');
let renameSpy = sinon.stub(fs, 'renameSync');
let entriesSpy = sinon.stub(walkSync, 'entries').returns([
{
relativePath: '001-DAF编写完整的单元测试.adoc',
basePath: '/Users/fdhuang/learing/adr/docs/adr/',
mode: 33188,
size: 246,
mtime: 1511435254653
},
{
relativePath: '0000-tests.adoc',
basePath: '/Users/fdhuang/learing/adr/docs/adr/',
mode: 33188,
size: 246,
mtime: 1511435254653
}
]);
let ADRGetDocExtensionSpy = sinon.stub(Config, 'getDocExtension').returns('adoc');
let fsReadSpy = sinon.stub(fs, 'readFileSync');
fsReadSpy
.onCall(0).returns(asciidocTemplateCn)
.onCall(2).returns(asciidocTemplateCn)
.onCall(3).returns('{}')
.onCall(1).returns(JSON.stringify({
path: 'some'
}));
ADR.update();
t.deepEqual(fsWriteSpy.callCount, 2);
t.deepEqual(fsReadSpy.callCount, 2);
t.deepEqual(renameSpy.callCount, 1);
t.deepEqual(consoleSpy.calledWith('001-DAF编写完整的单元测试.adoc -> 0001-更友好的-cli.adoc'), true);
fsWriteSpy.restore();
fsReadSpy.restore();
entriesSpy.restore();
consoleSpy.restore();
renameSpy.restore();
ADRGetSavePathSpy.restore();
ADRGetDocExtensionSpy.restore();
});
let asciidocTemplateJp = `= 1. Foo は Bar ではなく Baz で管理する
年月日: 2017-11-23
== ステータス
リスト:提案中/承認済/完了/非推奨/更新済
2017-11-23 提案中
`;
test('ADR: init in japanese with Asciidoc', t => {
let getForceNfcStub = sinon.stub(Config, 'getForceNfc').returns(true);
let ADRGetSavePathSpy = sinon.stub(Config, 'getSavePath').returns('./');
let fsWriteSpy = sinon.stub(fs, 'writeFileSync');
let consoleSpy = sinon.stub(console, 'log');
let renameSpy = sinon.stub(fs, 'renameSync');
let entriesSpy = sinon.stub(walkSync, 'entries').returns([
{
relativePath: '001-foo-は-bar-ではなく-baz-で管理する.adoc',
basePath: '/Users/fdhuang/learing/adr/docs/adr/',
mode: 33188,
size: 246,
mtime: 1511435254653
},
{
relativePath: '0000-tests.adoc',
basePath: '/Users/fdhuang/learing/adr/docs/adr/',
mode: 33188,
size: 246,
mtime: 1511435254653
}
]);
let ADRGetDocExtensionSpy = sinon.stub(Config, 'getDocExtension').returns('adoc');
let fsReadSpy = sinon.stub(fs, 'readFileSync');
fsReadSpy
.onCall(0).returns(asciidocTemplateJp)
.onCall(2).returns(asciidocTemplateJp)
.onCall(3).returns('{}')
.onCall(1).returns(JSON.stringify({
path: 'some'
}));
ADR.update();
t.deepEqual(fsWriteSpy.callCount, 2);
t.deepEqual(fsReadSpy.callCount, 2);
t.deepEqual(renameSpy.callCount, 1);
t.deepEqual(consoleSpy.calledWith('001-foo-は-bar-ではなく-baz-で管理する.adoc -> 0001-foo-は-bar-ではなく-baz-で管理する.adoc'), true);
fsWriteSpy.restore();
fsReadSpy.restore();
entriesSpy.restore();
consoleSpy.restore();
renameSpy.restore();
ADRGetSavePathSpy.restore();
getForceNfcStub.restore();
ADRGetDocExtensionSpy.restore();
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdHMvdXBkYXRlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQzVCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN0QixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7QUFFbkMsT0FBTyxJQUFJLE1BQU0sS0FBSyxDQUFBO0FBRXRCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUUxQixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO0FBRXZCLElBQUksWUFBWSxHQUFHOzs7Ozs7Ozs7Q0FTbEIsQ0FBQTtBQUVELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUMvQixJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2RSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQTtJQUNoRCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUMzQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUM1QyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkQ7WUFDRSxZQUFZLEVBQUUscUJBQXFCO1lBQ25DLFFBQVEsRUFBRSxzQ0FBc0M7WUFDaEQsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUs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