summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/packages/ng-schematics/test/src/index.spec.ts
diff options
context:
space:
mode:
Diffstat (limited to 'remote/test/puppeteer/packages/ng-schematics/test/src/index.spec.ts')
-rw-r--r--remote/test/puppeteer/packages/ng-schematics/test/src/index.spec.ts212
1 files changed, 212 insertions, 0 deletions
diff --git a/remote/test/puppeteer/packages/ng-schematics/test/src/index.spec.ts b/remote/test/puppeteer/packages/ng-schematics/test/src/index.spec.ts
new file mode 100644
index 0000000000..59636dbb38
--- /dev/null
+++ b/remote/test/puppeteer/packages/ng-schematics/test/src/index.spec.ts
@@ -0,0 +1,212 @@
+import https from 'https';
+import {join} from 'path';
+
+import {JsonObject} from '@angular-devkit/core';
+import {
+ SchematicTestRunner,
+ UnitTestTree,
+} from '@angular-devkit/schematics/testing/schematic-test-runner';
+import expect from 'expect';
+import sinon from 'sinon';
+
+const WORKSPACE_OPTIONS = {
+ name: 'workspace',
+ newProjectRoot: 'projects',
+ version: '14.0.0',
+};
+
+const APPLICATION_OPTIONS = {
+ name: 'sandbox',
+};
+
+function getProjectFile(file: string): string {
+ return `/${WORKSPACE_OPTIONS.newProjectRoot}/${APPLICATION_OPTIONS.name}/${file}`;
+}
+
+function getAngularJsonScripts(
+ tree: UnitTestTree,
+ isDefault = true
+): {
+ builder: string;
+ configurations: Record<string, any>;
+ options: Record<string, any>;
+} {
+ const angularJson = tree.readJson('angular.json') as any;
+ const e2eScript = isDefault ? 'e2e' : 'puppeteer';
+ return angularJson['projects']?.[APPLICATION_OPTIONS.name]?.['architect'][
+ e2eScript
+ ];
+}
+
+function getPackageJson(tree: UnitTestTree): {
+ scripts: Record<string, string>;
+ devDependencies: string[];
+} {
+ const packageJson = tree.readJson('package.json') as JsonObject;
+ return {
+ scripts: packageJson['scripts'] as any,
+ devDependencies: Object.keys(
+ packageJson['devDependencies'] as Record<string, string>
+ ),
+ };
+}
+
+async function buildTestingTree(userOptions?: Record<string, any>) {
+ const runner = new SchematicTestRunner(
+ 'schematics',
+ join(__dirname, '../../lib/schematics/collection.json')
+ );
+ const options = {
+ isDefaultTester: true,
+ exportConfig: false,
+ testingFramework: 'jasmine',
+ ...userOptions,
+ };
+ let workingTree: UnitTestTree;
+
+ // Build workspace
+ workingTree = await runner
+ .runExternalSchematicAsync(
+ '@schematics/angular',
+ 'workspace',
+ WORKSPACE_OPTIONS
+ )
+ .toPromise();
+ // Build dummy application
+ workingTree = await runner
+ .runExternalSchematicAsync(
+ '@schematics/angular',
+ 'application',
+ APPLICATION_OPTIONS,
+ workingTree
+ )
+ .toPromise();
+
+ return await runner
+ .runSchematicAsync('ng-add', options, workingTree)
+ .toPromise();
+}
+
+describe('@puppeteer/ng-schematics: ng-add', () => {
+ // Stop outgoing Request for version fetching
+ before(() => {
+ const httpsGetStub = sinon.stub(https, 'get');
+ httpsGetStub.returns({
+ on: (_: any, callback: () => void) => {
+ callback();
+ },
+ } as any);
+ });
+
+ after(() => {
+ sinon.restore();
+ });
+
+ it('should create base files and update to "package.json"', async () => {
+ const tree = await buildTestingTree();
+ const {devDependencies, scripts} = getPackageJson(tree);
+ const {builder, configurations} = getAngularJsonScripts(tree);
+
+ expect(tree.files).toContain(getProjectFile('e2e/tsconfig.json'));
+ expect(tree.files).toContain(getProjectFile('e2e/tests/app.e2e.ts'));
+ expect(devDependencies).toContain('puppeteer');
+ expect(scripts['e2e']).toBe('ng e2e');
+ expect(builder).toBe('@puppeteer/ng-schematics:puppeteer');
+ expect(configurations).toEqual({
+ production: {
+ devServerTarget: 'sandbox:serve:production',
+ },
+ });
+ });
+
+ it('should update create proper "ng" command for non default tester', async () => {
+ const tree = await buildTestingTree({
+ isDefaultTester: false,
+ });
+ const {scripts} = getPackageJson(tree);
+ const {builder} = getAngularJsonScripts(tree, false);
+
+ expect(scripts['puppeteer']).toBe('ng run sandbox:puppeteer');
+ expect(builder).toBe('@puppeteer/ng-schematics:puppeteer');
+ });
+
+ it('should create Puppeteer config', async () => {
+ const {files} = await buildTestingTree({
+ exportConfig: true,
+ });
+
+ expect(files).toContain(getProjectFile('.puppeteerrc.cjs'));
+ });
+
+ it('should not create Puppeteer config', async () => {
+ const {files} = await buildTestingTree({
+ exportConfig: false,
+ });
+
+ expect(files).not.toContain(getProjectFile('.puppeteerrc.cjs'));
+ });
+
+ it('should create Jasmine files and update "package.json"', async () => {
+ const tree = await buildTestingTree({
+ testingFramework: 'jasmine',
+ });
+ const {devDependencies} = getPackageJson(tree);
+ const {options} = getAngularJsonScripts(tree);
+
+ expect(tree.files).toContain(getProjectFile('e2e/support/jasmine.json'));
+ expect(tree.files).toContain(getProjectFile('e2e/helpers/babel.js'));
+ expect(devDependencies).toContain('jasmine');
+ expect(devDependencies).toContain('@babel/core');
+ expect(devDependencies).toContain('@babel/register');
+ expect(devDependencies).toContain('@babel/preset-typescript');
+ expect(options['commands']).toEqual([
+ [`jasmine`, '--config=./e2e/support/jasmine.json'],
+ ]);
+ });
+
+ it('should create Jest files and update "package.json"', async () => {
+ const tree = await buildTestingTree({
+ testingFramework: 'jest',
+ });
+ const {devDependencies} = getPackageJson(tree);
+ const {options} = getAngularJsonScripts(tree);
+
+ expect(tree.files).toContain(getProjectFile('e2e/jest.config.js'));
+ expect(devDependencies).toContain('jest');
+ expect(devDependencies).toContain('@types/jest');
+ expect(devDependencies).toContain('ts-jest');
+ expect(options['commands']).toEqual([[`jest`, '-c', 'e2e/jest.config.js']]);
+ });
+
+ it('should create Mocha files and update "package.json"', async () => {
+ const tree = await buildTestingTree({
+ testingFramework: 'mocha',
+ });
+ const {devDependencies} = getPackageJson(tree);
+ const {options} = getAngularJsonScripts(tree);
+
+ expect(tree.files).toContain(getProjectFile('e2e/.mocharc.js'));
+ expect(tree.files).toContain(getProjectFile('e2e/babel.js'));
+ expect(devDependencies).toContain('mocha');
+ expect(devDependencies).toContain('@types/mocha');
+ expect(devDependencies).toContain('@babel/core');
+ expect(devDependencies).toContain('@babel/register');
+ expect(devDependencies).toContain('@babel/preset-typescript');
+ expect(options['commands']).toEqual([
+ [`mocha`, '--config=./e2e/.mocharc.js'],
+ ]);
+ });
+
+ it('should create Node files"', async () => {
+ const tree = await buildTestingTree({
+ testingFramework: 'node',
+ });
+ const {options} = getAngularJsonScripts(tree);
+
+ expect(tree.files).toContain(getProjectFile('e2e/.gitignore'));
+ expect(options['commands']).toEqual([
+ [`tsc`, '-p', 'e2e/tsconfig.json'],
+ ['node', '--test', 'e2e/'],
+ ]);
+ });
+});