@zendesk/zcli-themes
Version:
zcli theme commands live here
87 lines (86 loc) • 4.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const sinon = require("sinon");
const fs = require("fs");
const test_1 = require("@oclif/test");
const rewriteManifest_1 = require("./rewriteManifest");
describe('rewriteManifest', () => {
beforeEach(() => {
sinon.restore();
});
it('updates the api_version in manifest.json', () => {
const readFileSyncStub = sinon.stub(fs, 'readFileSync');
const writeFileSyncStub = sinon.stub(fs, 'writeFileSync');
const manifestContent = JSON.stringify({
name: 'Copenhagen theme',
author: 'Jane Doe',
version: '1.0.1',
api_version: 1,
settings: []
}, null, 2);
readFileSyncStub
.withArgs('theme/path/manifest.json', 'utf8')
.returns(manifestContent);
(0, rewriteManifest_1.default)('theme/path', 2);
(0, test_1.expect)(writeFileSyncStub.calledOnce).to.equal(true);
(0, test_1.expect)(writeFileSyncStub.firstCall.args[0]).to.equal('theme/path/manifest.json');
const writtenContent = writeFileSyncStub.firstCall.args[1];
const parsedContent = JSON.parse(writtenContent);
(0, test_1.expect)(parsedContent.api_version).to.equal(2);
});
it('preserves formatting when updating api_version', () => {
const readFileSyncStub = sinon.stub(fs, 'readFileSync');
const writeFileSyncStub = sinon.stub(fs, 'writeFileSync');
const manifestContent = '{\n "name": "Copenhagen",\n "api_version": 1,\n "version": "1.0.0"\n}';
readFileSyncStub
.withArgs('theme/path/manifest.json', 'utf8')
.returns(manifestContent);
(0, rewriteManifest_1.default)('theme/path', 3);
const writtenContent = writeFileSyncStub.firstCall.args[1];
(0, test_1.expect)(writtenContent).to.equal('{\n "name": "Copenhagen",\n "api_version": 3,\n "version": "1.0.0"\n}');
});
it('handles api_version with different spacing', () => {
const readFileSyncStub = sinon.stub(fs, 'readFileSync');
const writeFileSyncStub = sinon.stub(fs, 'writeFileSync');
const manifestContent = '{"name": "Theme", "api_version" : 1, "version": "1.0"}';
readFileSyncStub
.withArgs('theme/path/manifest.json', 'utf8')
.returns(manifestContent);
(0, rewriteManifest_1.default)('theme/path', 5);
const writtenContent = writeFileSyncStub.firstCall.args[1];
(0, test_1.expect)(writtenContent).to.include('"api_version": 5');
(0, test_1.expect)(writtenContent).to.include('"name": "Theme"');
});
it('throws an error when file cannot be read', () => {
const readFileSyncStub = sinon.stub(fs, 'readFileSync');
readFileSyncStub
.withArgs('theme/path/manifest.json', 'utf8')
.throws(new Error('ENOENT: no such file or directory'));
(0, test_1.expect)(() => {
(0, rewriteManifest_1.default)('theme/path', 2);
}).to.throw('Failed to read or write manifest file: theme/path/manifest.json');
});
it('throws an error when JSON is malformed', () => {
const readFileSyncStub = sinon.stub(fs, 'readFileSync');
readFileSyncStub
.withArgs('theme/path/manifest.json', 'utf8')
.returns('{"name": "Theme",,,}');
(0, test_1.expect)(() => {
(0, rewriteManifest_1.default)('theme/path', 2);
}).to.throw('Failed to read or write manifest file: theme/path/manifest.json');
});
it('throws an error when file cannot be written', () => {
const readFileSyncStub = sinon.stub(fs, 'readFileSync');
const writeFileSyncStub = sinon.stub(fs, 'writeFileSync');
const manifestContent = '{"name": "Theme", "api_version": 1}';
readFileSyncStub
.withArgs('theme/path/manifest.json', 'utf8')
.returns(manifestContent);
writeFileSyncStub
.withArgs('theme/path/manifest.json')
.throws(new Error('EACCES: permission denied'));
(0, test_1.expect)(() => {
(0, rewriteManifest_1.default)('theme/path', 2);
}).to.throw('Failed to read or write manifest file: theme/path/manifest.json');
});
});