particle-commands
Version:
Library of UX-neutral commands that provide key functionality for developer tools
71 lines (60 loc) • 2.09 kB
JavaScript
import { expect } from '../test-setup';
import fs from 'fs';
import ProjectProperties from '../../src/cmd/project_properties';
import getProjectFixture from '../fixtures/projects';
describe('ProjectProperties', () => {
describe('exists', () => {
it('returns true when project properties exists', () => {
const dir = getProjectFixture('simple');
const sut = new ProjectProperties(dir);
return sut.exists().then(result => {
expect(result).to.be.true;
});
});
it("returns false when project properties doesn't exist", () => {
const dir = getProjectFixture('blank');
const sut = new ProjectProperties(dir);
return sut.exists().then(result => {
expect(result).to.be.false;
});
});
});
describe('load', () => {
it('load the fields', () => {
const dir = getProjectFixture('simple');
const sut = new ProjectProperties(dir);
return sut.load().then(() => {
const expectedProperties = JSON.parse(fs.readFileSync(`${dir}/expectedProperties.json`));
expect(sut.fields).to.eql(expectedProperties);
});
});
});
describe('save', () => {
it('saves the same content', () => {
const dir = getProjectFixture('simple');
const sut = new ProjectProperties(dir);
const propsFile = `${dir}/project.properties`;
const originalProperties = fs.readFileSync(propsFile, 'utf8');
return sut.load().then(() => {
fs.unlinkSync(propsFile);
return sut.save();
}).then(() => {
const savedProperties = fs.readFileSync(propsFile, 'utf8');
expect(savedProperties).to.equal(originalProperties);
});
});
it('saves new content', () => {
const dir = getProjectFixture('blank');
const sut = new ProjectProperties(dir);
Object.assign(sut.fields, {
name: 'my project',
'dependencies.assettracker': '1.0.0'
});
return sut.save().then(() => {
const savedProperties = fs.readFileSync(`${dir}/project.properties`, 'utf8');
const expectedProperties = 'name=my project\ndependencies.assettracker=1.0.0\n';
expect(savedProperties).to.equal(expectedProperties);
});
});
});
});