@digipolis/start-ui
Version:
136 lines (121 loc) • 5.36 kB
JavaScript
import '../../globals';
import sinon from 'sinon';
import * as mockFs from 'mock-fs';
import * as fs from 'fs';
import * as path from 'path';
import HandlebarsTemplateGenerator from '../../utils/template-generator';
import { setUpMockDir } from './helpers/mock-directory';
import angular from './angular';
describe('Angular Generator', () => {
let generator; let mockConfiguration; let mockExecPromise; let templateGenerator; let
spyOnGenerate;
beforeEach(() => {
console.log(''); // Do not remove this line! We have to register the stdout before mocking the file system
mockExecPromise = sinon.stub();
mockFs.default({});
mockConfiguration = {
name: 'Test App',
branding: {
cdn: 'some-cdn',
version: '1.0.0',
scss: ['@import "one"'],
type: 'core',
npm: ['branding.npm'],
},
routing: {
add: false,
npm: ['routing.npm'],
},
};
templateGenerator = sinon.createStubInstance(HandlebarsTemplateGenerator);
spyOnGenerate = templateGenerator.generate;
generator = new angular.AngularAppGenerator(mockConfiguration, mockExecPromise, templateGenerator);
});
afterEach(() => {
mockFs.restore();
});
describe('Construct', () => {
it('should construct the generator', () => {
expect(generator).toBeDefined();
expect(generator.generator).toBe(templateGenerator);
});
});
describe('Start Process', () => {
it('should be calling all hooks for setting up an angular application', async () => {
sinon.stub(generator, 'prepareDirectory').returns(Promise.resolve());
const spyOnInstallAngular = sinon.stub(generator, 'installAngular').returns(Promise.resolve());
const spyOnInstallAntwerpUI = sinon.stub(generator, 'installAntwerpUI').returns(Promise.resolve());
const spyOnStarterTemplate = sinon.stub(generator, 'createStarterTemplate').returns(Promise.resolve());
await generator.start();
expect(spyOnInstallAngular.calledOnce).toBe(true);
expect(spyOnInstallAntwerpUI.calledOnce).toBe(true);
expect(spyOnStarterTemplate.calledOnce).toBe(true);
});
it('should create a frontend directory', async () => {
expect(fs.existsSync(__frontenddir)).toBe(false);
await generator.prepareDirectory();
expect(fs.existsSync(__frontenddir)).toBe(true);
});
});
describe('Install Angular', () => {
it('should install angular using command line', async () => {
await generator.installAngular(mockConfiguration);
expect(mockExecPromise.calledOnce).toBe(true);
// Check first command line argument
expect(mockExecPromise.firstCall.args).toEqual(['npx', ['-p', '@angular/cli', 'ng', 'new', 'frontend', '--skip-git=false', '--style=scss', '--routing=false', '--strict=false']]);
});
});
describe('Installing Antwerp UI', () => {
it('should install Antwerp UI', async () => {
await generator.installAntwerpUI(mockConfiguration);
expect(mockExecPromise.calledOnce).toBe(true);
expect(mockExecPromise.firstCall.args).toEqual(['npm', ['install', '--save', '@acpaas-ui/ngx-layout', '@acpaas-ui/ngx-logo', 'branding.npm', 'routing.npm'], { cwd: path.resolve(__frontenddir) }]);
});
});
describe('Creating templates', () => {
it('should generate appropriate template files (with auth & routing)', async () => {
setUpMockDir();
await generator.createStarterTemplate({
...mockConfiguration,
auth: true,
routing: {
...mockConfiguration.routing,
add: true,
},
});
// index.html
expect(spyOnGenerate.getCalls()[0].args).toContainEqual({
fromTemplate: path.resolve(__frontenddir, 'src/index.html.template.hbs'),
to: path.resolve(__frontenddir, 'src/index.html'),
});
// styles.scss
expect(spyOnGenerate.getCalls()[1].args).toContainEqual({
fromTemplate: path.resolve(__frontenddir, 'src/styles.scss.template.hbs'),
to: path.resolve(__frontenddir, 'src/styles.scss'),
});
// app.module.ts
expect(spyOnGenerate.getCalls()[2].args).toContainEqual({
fromTemplate: path.resolve(__frontenddir, 'src/app/app.module.ts.template.hbs'),
to: path.resolve(__frontenddir, 'src/app/app.module.ts'),
});
// app.component.html
expect(spyOnGenerate.getCalls()[3].args).toContainEqual({
fromTemplate: path.resolve(__frontenddir, 'src/app/app.component.html.template.hbs'),
to: path.resolve(__frontenddir, 'src/app/app.component.html'),
});
// app.component.ts
expect(spyOnGenerate.getCalls()[4].args).toContainEqual({
fromTemplate: path.resolve(__frontenddir, 'src/app/app.component.ts.template.hbs'),
to: path.resolve(__frontenddir, 'src/app/app.component.ts'),
});
expect(spyOnGenerate.getCalls()[5].args).toContainEqual({
fromTemplate: path.resolve(__frontenddir, 'src/app/aui/aui.imports.ts.template.hbs'),
to: path.resolve(__frontenddir, 'src/app/aui/aui.imports.ts'),
});
expect(spyOnGenerate.getCalls()[6].args).toContainEqual({
fromTemplate: path.resolve(__frontenddir, 'src/app/pages/index.ts.template.hbs'),
to: path.resolve(__frontenddir, 'src/app/pages/index.ts'),
});
});
});
});