208 lines
7.1 KiB
JavaScript
208 lines
7.1 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
var libDir = '../../../../generators/app/lib';
|
|
|
|
var gitignore = require(libDir + '/component/gitignore');
|
|
var projectBuilder = require(libDir + '/project_builder');
|
|
var mocks = require('../../../helpers/mocks');
|
|
var mockGenerator;
|
|
|
|
describe('generator-openstack:lib/component/gitignore', function () {
|
|
|
|
beforeEach(function () {
|
|
mockGenerator = mocks.buildGenerator();
|
|
projectBuilder.clear();
|
|
});
|
|
|
|
it('should define init, prompt, and configure',
|
|
function () {
|
|
expect(typeof gitignore.init).toBe('function');
|
|
expect(typeof gitignore.prompt).toBe('function');
|
|
expect(typeof gitignore.configure).toBe('function');
|
|
});
|
|
|
|
describe('init()', function () {
|
|
it('should return a generator',
|
|
function () {
|
|
var outputGenerator = gitignore.init(mockGenerator);
|
|
expect(outputGenerator).toEqual(mockGenerator);
|
|
});
|
|
|
|
it('should not interact with config',
|
|
function () {
|
|
var spy = spyOn(mockGenerator.config, 'defaults');
|
|
gitignore.init(mockGenerator);
|
|
expect(spy.calls.any()).toBeFalsy();
|
|
});
|
|
});
|
|
|
|
describe('prompt()', function () {
|
|
it('should return a generator',
|
|
function () {
|
|
var outputGenerator = gitignore.prompt(mockGenerator);
|
|
expect(outputGenerator).toEqual(mockGenerator);
|
|
});
|
|
|
|
it('should do nothing',
|
|
function () {
|
|
var spy = spyOn(mockGenerator, 'prompt');
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
expect(spy.calls.any()).toBeFalsy();
|
|
});
|
|
});
|
|
|
|
describe('configure()', function () {
|
|
it('should return a generator',
|
|
function () {
|
|
var outputGenerator = gitignore.configure(mockGenerator);
|
|
expect(outputGenerator).toEqual(mockGenerator);
|
|
});
|
|
|
|
it('should add gitignore to the project files.',
|
|
function () {
|
|
mockGenerator.fs.write('.gitignore', ['one', 'two'].join('\n'));
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
gitignore.configure(mockGenerator);
|
|
|
|
var files = projectBuilder.getIncludedFiles();
|
|
expect(files.length).toBe(1);
|
|
expect(files[0].to).toBe('.gitignore');
|
|
});
|
|
});
|
|
|
|
describe('.gitignore management', function () {
|
|
|
|
it('should echo back existing .gitignore',
|
|
function () {
|
|
mockGenerator.fs.write('.gitignore', ['one', 'two'].join('\n'));
|
|
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
gitignore.configure(mockGenerator);
|
|
|
|
var files = projectBuilder.getIncludedFiles();
|
|
var ignoreRef = files[0];
|
|
var ignoreContent = ignoreRef.content().split('\n');
|
|
expect(ignoreContent.length).toBe(2);
|
|
|
|
expect(ignoreContent[0]).toEqual('one');
|
|
expect(ignoreContent[1]).toEqual('two');
|
|
});
|
|
|
|
it('should include any files flagged as ignored in the project builder.',
|
|
function () {
|
|
mockGenerator.fs.write('.gitignore', '');
|
|
projectBuilder.ignoreFile('foo/bar.json');
|
|
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
gitignore.configure(mockGenerator);
|
|
|
|
var files = projectBuilder.getIncludedFiles();
|
|
var ignoreRef = files[0]; // There should only be one file.
|
|
var ignoreContent = ignoreRef.content().split('\n');
|
|
expect(ignoreContent.length).toBe(1);
|
|
|
|
expect(ignoreContent[0]).toBe('foo/bar.json');
|
|
});
|
|
|
|
it('should de-duplicate file paths from multiple locations.',
|
|
function () {
|
|
// include 'node_modules' from both an existing file and from the project builder.
|
|
mockGenerator.fs.write('.gitignore', ['node_modules'].join('\n'));
|
|
projectBuilder.ignoreFile('node_modules');
|
|
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
gitignore.configure(mockGenerator);
|
|
|
|
var files = projectBuilder.getIncludedFiles();
|
|
var ignoreRef = files[0]; // There should only be one file.
|
|
var ignoreContent = ignoreRef.content().split('\n');
|
|
expect(ignoreContent.length).toBe(1);
|
|
|
|
expect(ignoreContent[0]).toBe('node_modules');
|
|
});
|
|
|
|
it('should sort the ignored files.',
|
|
function () {
|
|
mockGenerator.fs.write('.gitignore', ['b_line', 'a_line'].join('\n'));
|
|
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
gitignore.configure(mockGenerator);
|
|
|
|
var files = projectBuilder.getIncludedFiles();
|
|
var ignoreRef = files[0];
|
|
var ignoreContent = ignoreRef.content().split('\n');
|
|
expect(ignoreContent.length).toBe(2);
|
|
expect(ignoreContent[0]).toBe('a_line');
|
|
expect(ignoreContent[1]).toBe('b_line');
|
|
});
|
|
|
|
it('should remove any whitespace from the existing .gitignore',
|
|
function () {
|
|
mockGenerator.fs.write('.gitignore', ['1_one', '', '2_two', ''].join('\n'));
|
|
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
gitignore.configure(mockGenerator);
|
|
|
|
var files = projectBuilder.getIncludedFiles();
|
|
var ignoreRef = files[0];
|
|
var ignoreContent = ignoreRef.content().split('\n');
|
|
expect(ignoreContent.length).toBe(2);
|
|
expect(ignoreContent[0]).toBe('1_one');
|
|
expect(ignoreContent[1]).toBe('2_two');
|
|
});
|
|
|
|
it('should remove any comments from the existing .gitignore',
|
|
function () {
|
|
mockGenerator.fs.write('.gitignore', ['1_one', '# comment', ' #comment'].join('\n'));
|
|
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
gitignore.configure(mockGenerator);
|
|
|
|
var files = projectBuilder.getIncludedFiles();
|
|
var ignoreRef = files[0];
|
|
var ignoreContent = ignoreRef.content().split('\n');
|
|
expect(ignoreContent.length).toBe(1);
|
|
expect(ignoreContent[0]).toBe('1_one');
|
|
});
|
|
|
|
it('should deduplicate content',
|
|
function () {
|
|
mockGenerator.fs.write('.gitignore', ['1_one', '1_one'].join('\n'));
|
|
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
gitignore.configure(mockGenerator);
|
|
|
|
var files = projectBuilder.getIncludedFiles();
|
|
var ignoreRef = files[0];
|
|
var ignoreContent = ignoreRef.content().split('\n');
|
|
expect(ignoreContent.length).toBe(1);
|
|
expect(ignoreContent[0]).toBe('1_one');
|
|
});
|
|
|
|
it('should delete the file if there\'s nothing to ignore', function () {
|
|
mockGenerator.fs.write('.gitignore', '');
|
|
|
|
gitignore.init(mockGenerator);
|
|
gitignore.prompt(mockGenerator);
|
|
gitignore.configure(mockGenerator);
|
|
|
|
var files = projectBuilder.getIncludedFiles();
|
|
expect(files.length).toBe(0);
|
|
|
|
var rmFiles = projectBuilder.getExcludedFiles();
|
|
expect(rmFiles.length).toBe(1);
|
|
expect(rmFiles[0]).toBe('.gitignore');
|
|
});
|
|
});
|
|
});
|
|
})();
|