diff --git a/jest.config.ts b/jest.config.ts index 9c39db93..6752bf02 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -15,21 +15,23 @@ const config: Config.InitialOptions = { displayName: 'E2E', testEnvironment: 'node', testMatch: [ - '/test/e2e/v2.fetch.spec.ts', - '/test/e2e/v2.xhr.spec.ts', - '/test/e2e/v2.node.spec.ts', - '/test/e2e/v2.axios.spec.ts', - '/test/e2e/v2.babel.spec.ts', - '/test/e2e/v3.fetch.spec.ts', - '/test/e2e/v3.xhr.spec.ts', - '/test/e2e/v3.node.spec.ts', - '/test/e2e/v3.axios.spec.ts', - '/test/e2e/v3.babel.spec.ts', - '/test/e2e/client.fetch.spec.ts', - '/test/e2e/client.xhr.spec.ts', - '/test/e2e/client.node.spec.ts', - '/test/e2e/client.axios.spec.ts', - '/test/e2e/client.babel.spec.ts', + // '/test/e2e/v2.fetch.spec.ts', + // '/test/e2e/v2.xhr.spec.ts', + // '/test/e2e/v2.node.spec.ts', + // '/test/e2e/v2.axios.spec.ts', + // '/test/e2e/v2.babel.spec.ts', + '/test/e2e/v2.angular.spec.ts', + // '/test/e2e/v3.fetch.spec.ts', + // '/test/e2e/v3.xhr.spec.ts', + // '/test/e2e/v3.node.spec.ts', + // '/test/e2e/v3.axios.spec.ts', + // '/test/e2e/v3.babel.spec.ts', + '/test/e2e/v3.angular.spec.ts', + // '/test/e2e/client.fetch.spec.ts', + // '/test/e2e/client.xhr.spec.ts', + // '/test/e2e/client.node.spec.ts', + // '/test/e2e/client.axios.spec.ts', + // '/test/e2e/client.babel.spec.ts', ], }, ], diff --git a/package.json b/package.json index fc24a2ec..85e10e9b 100644 --- a/package.json +++ b/package.json @@ -65,8 +65,10 @@ }, "devDependencies": { "@angular/common": "13.1.3", + "@angular/compiler": "13.1.3", "@angular/core": "13.1.3", "@angular/platform-browser": "13.1.3", + "@angular/platform-browser-dynamic": "13.1.3", "@babel/cli": "7.16.8", "@babel/core": "7.16.12", "@babel/preset-env": "7.16.11", diff --git a/src/templates/core/angular/request.hbs b/src/templates/core/angular/request.hbs index bfbba7fb..29d8beed 100644 --- a/src/templates/core/angular/request.hbs +++ b/src/templates/core/angular/request.hbs @@ -1,6 +1,7 @@ {{>header}} -import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import type { HttpResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; import { ApiError } from './ApiError'; diff --git a/test/e2e/assets/angular-openapi-v2.ts b/test/e2e/assets/angular-openapi-v2.ts new file mode 100644 index 00000000..879c9be0 --- /dev/null +++ b/test/e2e/assets/angular-openapi-v2.ts @@ -0,0 +1,52 @@ +import { HttpClientModule } from '@angular/common/http'; +import { Component, NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { CollectionFormatService } from './services/CollectionFormatService'; +import { ComplexService } from './services/ComplexService'; +import { DefaultService } from './services/DefaultService'; +import { DefaultsService } from './services/DefaultsService'; +import { DuplicateService } from './services/DuplicateService'; +import { ErrorService } from './services/ErrorService'; +import { HeaderService } from './services/HeaderService'; +import { MultipleTags1Service } from './services/MultipleTags1Service'; +import { MultipleTags2Service } from './services/MultipleTags2Service'; +import { MultipleTags3Service } from './services/MultipleTags3Service'; +import { NoContentService } from './services/NoContentService'; +import { ParametersService } from './services/ParametersService'; +import { ResponseService } from './services/ResponseService'; +import { SimpleService } from './services/SimpleService'; +import { TypesService } from './services/TypesService'; + +@Component({ + selector: 'app-root', + templateUrl: `
Angular
`, +}) +export class AppComponent {} + +@NgModule({ + imports: [BrowserModule, HttpClientModule], + providers: [ + CollectionFormatService, + ComplexService, + DefaultService, + DefaultsService, + DuplicateService, + ErrorService, + HeaderService, + MultipleTags1Service, + MultipleTags2Service, + MultipleTags3Service, + NoContentService, + ParametersService, + ResponseService, + SimpleService, + TypesService, + ], + declarations: [AppComponent], + bootstrap: [AppComponent], +}) +export class AppModule {} + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/test/e2e/assets/angular-openapi-v3.ts b/test/e2e/assets/angular-openapi-v3.ts new file mode 100644 index 00000000..30b81dc5 --- /dev/null +++ b/test/e2e/assets/angular-openapi-v3.ts @@ -0,0 +1,58 @@ +import { HttpClientModule } from '@angular/common/http'; +import { Component, NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { CollectionFormatService } from './services/CollectionFormatService'; +import { ComplexService } from './services/ComplexService'; +import { DefaultService } from './services/DefaultService'; +import { DefaultsService } from './services/DefaultsService'; +import { DuplicateService } from './services/DuplicateService'; +import { ErrorService } from './services/ErrorService'; +import { FormDataService } from './services/FormDataService'; +import { HeaderService } from './services/HeaderService'; +import { MultipartService } from './services/MultipartService'; +import { MultipleTags1Service } from './services/MultipleTags1Service'; +import { MultipleTags2Service } from './services/MultipleTags2Service'; +import { MultipleTags3Service } from './services/MultipleTags3Service'; +import { NoContentService } from './services/NoContentService'; +import { ParametersService } from './services/ParametersService'; +import { RequestBodyService } from './services/RequestBodyService'; +import { ResponseService } from './services/ResponseService'; +import { SimpleService } from './services/SimpleService'; +import { TypesService } from './services/TypesService'; +import { UploadService } from './services/UploadService'; + +@Component({ + selector: 'app-root', + templateUrl: `
Angular
`, +}) +export class AppComponent {} + +@NgModule({ + imports: [BrowserModule, HttpClientModule], + providers: [ + CollectionFormatService, + ComplexService, + DefaultService, + DefaultsService, + DuplicateService, + ErrorService, + FormDataService, + HeaderService, + MultipartService, + MultipleTags1Service, + MultipleTags2Service, + MultipleTags3Service, + NoContentService, + ParametersService, + RequestBodyService, + ResponseService, + SimpleService, + TypesService, + UploadService, + ], +}) +export class AppModule {} + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/test/e2e/client.babel.spec.ts b/test/e2e/client.babel.spec.ts index 5354f5ec..075f4c0b 100644 --- a/test/e2e/client.babel.spec.ts +++ b/test/e2e/client.babel.spec.ts @@ -7,7 +7,7 @@ import server from './scripts/server'; describe('v3.babel', () => { beforeAll(async () => { await generate('client/babel', 'v3', 'fetch', true, true, 'AppClient'); - await copy('client/babel'); + await copy('script.js', 'client/babel/script.js'); compileWithBabel('client/babel'); await server.start('client/babel'); await browser.start(); diff --git a/test/e2e/client.fetch.spec.ts b/test/e2e/client.fetch.spec.ts index 126030a1..81366029 100644 --- a/test/e2e/client.fetch.spec.ts +++ b/test/e2e/client.fetch.spec.ts @@ -7,7 +7,7 @@ import server from './scripts/server'; describe('v3.fetch', () => { beforeAll(async () => { await generate('client/fetch', 'v3', 'fetch', false, false, 'AppClient'); - await copy('client/fetch'); + await copy('script.js', 'client/fetch/script.js'); compileWithTypescript('client/fetch'); await server.start('client/fetch'); await browser.start(); diff --git a/test/e2e/client.xhr.spec.ts b/test/e2e/client.xhr.spec.ts index 67446c42..4e43baee 100644 --- a/test/e2e/client.xhr.spec.ts +++ b/test/e2e/client.xhr.spec.ts @@ -7,7 +7,7 @@ import server from './scripts/server'; describe('v3.xhr', () => { beforeAll(async () => { await generate('client/xhr', 'v3', 'xhr', false, false, 'AppClient'); - await copy('client/xhr'); + await copy('script.js', 'client/xhr/script.js'); compileWithTypescript('client/xhr'); await server.start('client/xhr'); await browser.start(); diff --git a/test/e2e/scripts/compileWithTypescript.ts b/test/e2e/scripts/compileWithTypescript.ts index 919ca28b..c754e473 100644 --- a/test/e2e/scripts/compileWithTypescript.ts +++ b/test/e2e/scripts/compileWithTypescript.ts @@ -27,8 +27,9 @@ export const compileWithTypescript = (dir: string) => { strict: true, skipLibCheck: true, allowSyntheticDefaultImports: true, + experimentalDecorators: true, }, - include: ['./index.ts'], + include: ['./index.ts', './main.ts'], }; // Compile files to JavaScript (ES6 modules) diff --git a/test/e2e/scripts/copy.ts b/test/e2e/scripts/copy.ts index f1b73f2e..22b300bf 100644 --- a/test/e2e/scripts/copy.ts +++ b/test/e2e/scripts/copy.ts @@ -1,5 +1,5 @@ import { copyFileSync } from 'fs'; -export const copy = (dir: string) => { - copyFileSync('./test/e2e/assets/script.js', `./test/e2e/generated/${dir}/script.js`); +export const copy = (fileNameIn: string, fileNameOut: string) => { + copyFileSync(`./test/e2e/assets/${fileNameIn}`, `./test/e2e/generated/${fileNameOut}`); }; diff --git a/test/e2e/scripts/generate.ts b/test/e2e/scripts/generate.ts index 3e2794fd..f8a9f760 100644 --- a/test/e2e/scripts/generate.ts +++ b/test/e2e/scripts/generate.ts @@ -3,7 +3,7 @@ import { generate as __generate } from '../../../'; export const generate = async ( dir: string, version: string, - client: 'fetch' | 'xhr' | 'node' | 'axios', + client: 'fetch' | 'xhr' | 'node' | 'axios' | 'angular', useOptions: boolean = false, useUnionTypes: boolean = false, clientName?: string diff --git a/test/e2e/scripts/server.ts b/test/e2e/scripts/server.ts index e7a6730f..7e8f560f 100644 --- a/test/e2e/scripts/server.ts +++ b/test/e2e/scripts/server.ts @@ -1,5 +1,6 @@ import express, { Express } from 'express'; import { Server } from 'http'; +import { EOL } from 'os'; let _app: Express; let _server: Server; @@ -23,7 +24,22 @@ const start = async (dir: string) => { // This file is copied from test/e2e/assets/script.js to the output directory // of the specific version and client. _app.get('/', (req, res) => { - res.send(''); + res.send( + [ + '', + '', + '', + '', + 'Test', + '', + '', + '', + '', + '', + '', + '', + ].join(EOL) + ); }); // Register an 'echo' server for testing error codes. This will just grab the diff --git a/test/e2e/v2.angular.spec.ts b/test/e2e/v2.angular.spec.ts new file mode 100644 index 00000000..d1380def --- /dev/null +++ b/test/e2e/v2.angular.spec.ts @@ -0,0 +1,25 @@ +import browser from './scripts/browser'; +import { compileWithTypescript } from './scripts/compileWithTypescript'; +import { copy } from './scripts/copy'; +import { generate } from './scripts/generate'; +import server from './scripts/server'; + +describe('v2.angular', () => { + beforeAll(async () => { + await generate('v2/angular', 'v2', 'angular'); + await copy('script.js', 'v2/angular/script.js'); + await copy('angular-openapi-v2.ts', 'v2/angular/main.ts'); + compileWithTypescript('v2/angular'); + await server.start('v2/angular'); + await browser.start(); + }, 30000); + + afterAll(async () => { + await browser.stop(); + await server.stop(); + }); + + it('requests token', async () => { + expect(true).toBe(true); + }); +}); diff --git a/test/e2e/v2.babel.spec.ts b/test/e2e/v2.babel.spec.ts index 96f14ee4..f6a0e563 100644 --- a/test/e2e/v2.babel.spec.ts +++ b/test/e2e/v2.babel.spec.ts @@ -7,7 +7,7 @@ import server from './scripts/server'; describe('v2.babel', () => { beforeAll(async () => { await generate('v2/babel', 'v2', 'fetch', true, true); - await copy('v2/babel'); + await copy('script.js', 'v2/babel/script.js'); compileWithBabel('v2/babel'); await server.start('v2/babel'); await browser.start(); diff --git a/test/e2e/v2.fetch.spec.ts b/test/e2e/v2.fetch.spec.ts index a3b831f1..0314ad02 100644 --- a/test/e2e/v2.fetch.spec.ts +++ b/test/e2e/v2.fetch.spec.ts @@ -7,7 +7,7 @@ import server from './scripts/server'; describe('v2.fetch', () => { beforeAll(async () => { await generate('v2/fetch', 'v2', 'fetch'); - await copy('v2/fetch'); + await copy('script.js', 'v2/fetch/script.js'); compileWithTypescript('v2/fetch'); await server.start('v2/fetch'); await browser.start(); diff --git a/test/e2e/v2.xhr.spec.ts b/test/e2e/v2.xhr.spec.ts index 16b0c1e2..9b603a56 100644 --- a/test/e2e/v2.xhr.spec.ts +++ b/test/e2e/v2.xhr.spec.ts @@ -7,7 +7,7 @@ import server from './scripts/server'; describe('v2.xhr', () => { beforeAll(async () => { await generate('v2/xhr', 'v2', 'xhr'); - await copy('v2/xhr'); + await copy('script.js', 'v2/xhr/script.js'); compileWithTypescript('v2/xhr'); await server.start('v2/xhr'); await browser.start(); diff --git a/test/e2e/v3.angular.spec.ts b/test/e2e/v3.angular.spec.ts new file mode 100644 index 00000000..a2a8afcf --- /dev/null +++ b/test/e2e/v3.angular.spec.ts @@ -0,0 +1,25 @@ +import browser from './scripts/browser'; +import { compileWithTypescript } from './scripts/compileWithTypescript'; +import { copy } from './scripts/copy'; +import { generate } from './scripts/generate'; +import server from './scripts/server'; + +describe('v3.angular', () => { + beforeAll(async () => { + await generate('v3/angular', 'v3', 'angular'); + await copy('script.js', 'v3/angular/script.js'); + await copy('angular-openapi-v3.ts', 'v3/angular/main.ts'); + compileWithTypescript('v3/angular'); + await server.start('v3/angular'); + await browser.start(); + }, 30000); + + afterAll(async () => { + await browser.stop(); + await server.stop(); + }); + + it('requests token', async () => { + expect(true).toBe(true); + }); +}); diff --git a/test/e2e/v3.babel.spec.ts b/test/e2e/v3.babel.spec.ts index e6cf6aef..a883834c 100644 --- a/test/e2e/v3.babel.spec.ts +++ b/test/e2e/v3.babel.spec.ts @@ -7,7 +7,7 @@ import server from './scripts/server'; describe('v3.babel', () => { beforeAll(async () => { await generate('v3/babel', 'v3', 'fetch', true, true); - await copy('v3/babel'); + await copy('script.js', 'v3/babel/script.js'); compileWithBabel('v3/babel'); await server.start('v3/babel'); await browser.start(); diff --git a/test/e2e/v3.fetch.spec.ts b/test/e2e/v3.fetch.spec.ts index fca7080a..0e48bce9 100644 --- a/test/e2e/v3.fetch.spec.ts +++ b/test/e2e/v3.fetch.spec.ts @@ -7,7 +7,7 @@ import server from './scripts/server'; describe('v3.fetch', () => { beforeAll(async () => { await generate('v3/fetch', 'v3', 'fetch'); - await copy('v3/fetch'); + await copy('script.js', 'v3/fetch/script.js'); compileWithTypescript('v3/fetch'); await server.start('v3/fetch'); await browser.start(); diff --git a/test/e2e/v3.xhr.spec.ts b/test/e2e/v3.xhr.spec.ts index 1062fd05..6ac6b984 100644 --- a/test/e2e/v3.xhr.spec.ts +++ b/test/e2e/v3.xhr.spec.ts @@ -7,7 +7,7 @@ import server from './scripts/server'; describe('v3.xhr', () => { beforeAll(async () => { await generate('v3/xhr', 'v3', 'xhr'); - await copy('v3/xhr'); + await copy('script.js', 'v3/xhr/script.js'); compileWithTypescript('v3/xhr'); await server.start('v3/xhr'); await browser.start(); diff --git a/yarn.lock b/yarn.lock index c1ab4759..0549b348 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,13 @@ dependencies: tslib "^2.3.0" +"@angular/compiler@13.1.3": + version "13.1.3" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-13.1.3.tgz#fc33b06046599ecc943f55049e0a121d5ab46d4f" + integrity sha512-dbHs/Oa+Dn+7i0jKtlVDE0lD0DaUC+lVzAcTK/zS37LrckrTMn1CA+z9bZ4gpHig9RU0wgV3YORxv0wokyiB8A== + dependencies: + tslib "^2.3.0" + "@angular/core@13.1.3": version "13.1.3" resolved "https://registry.yarnpkg.com/@angular/core/-/core-13.1.3.tgz#4afd71f674f9ead1aada81315f84846cdba10fa4" @@ -16,6 +23,13 @@ dependencies: tslib "^2.3.0" +"@angular/platform-browser-dynamic@13.1.3": + version "13.1.3" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.3.tgz#08cbe321e5f39636a08eb77606ff496df478a21e" + integrity sha512-vEWyJ+2gkwh2N6KOJfxUNSdSO51ROlzCqqzCfHrPYQrlOFUfKsYKA1uoiB5UGfFEU0HBtIRWn6xoUy3wzVOZbw== + dependencies: + tslib "^2.3.0" + "@angular/platform-browser@13.1.3": version "13.1.3" resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-13.1.3.tgz#69d90b10e89e11f14f5798d1b6fd788255a6114e"