mirror of
https://github.com/ferdikoomen/openapi-typescript-codegen.git
synced 2025-12-08 20:16:21 +00:00
- E2E test working, failing on node, but support will be build soon
This commit is contained in:
parent
75c9ef321e
commit
a5cd62f3e9
@ -16,11 +16,11 @@ module.exports = {
|
||||
testEnvironment: 'node',
|
||||
testMatch: [
|
||||
'<rootDir>/test/e2e/v2.fetch.spec.js',
|
||||
// '<rootDir>/test/e2e/v2.xhr.spec.js',
|
||||
// '<rootDir>/test/e2e/v2.node.spec.js',
|
||||
// '<rootDir>/test/e2e/v3.fetch.spec.js',
|
||||
// '<rootDir>/test/e2e/v3.xhr.spec.js',
|
||||
// '<rootDir>/test/e2e/v3.node.spec.js',
|
||||
'<rootDir>/test/e2e/v2.xhr.spec.js',
|
||||
'<rootDir>/test/e2e/v2.node.spec.js',
|
||||
'<rootDir>/test/e2e/v3.fetch.spec.js',
|
||||
'<rootDir>/test/e2e/v3.xhr.spec.js',
|
||||
'<rootDir>/test/e2e/v3.node.spec.js',
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
@ -39,8 +39,7 @@
|
||||
},
|
||||
"files": [
|
||||
"bin/index.js",
|
||||
"dist/index.js",
|
||||
"src/templates/**/*.ts"
|
||||
"dist/index.js"
|
||||
],
|
||||
"scripts": {
|
||||
"clean": "rimraf ./dist ./test/generated ./test/e2e/generated ./samples/generated ./coverage ./node_modules/.cache",
|
||||
@ -61,7 +60,7 @@
|
||||
"prettier:fix": "prettier \"./src/**/*.ts\" \"./bin/index.js\" --write",
|
||||
"prepublish": "yarn run clean && yarn run release",
|
||||
"codecov": "codecov --token=66c30c23-8954-4892-bef9-fbaed0a2e42b",
|
||||
"aap": "node ./test/e2e/index.js"
|
||||
"aap": "node test/e2e/index.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"camelcase": "6.0.0",
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
import('./index.js').then(module => {
|
||||
window.test = module;
|
||||
window.api = module;
|
||||
});
|
||||
@ -1,4 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
const server = require('./scripts/server');
|
||||
server.start('v2', 'fetch');
|
||||
@ -6,6 +6,9 @@ let browser;
|
||||
let page
|
||||
|
||||
async function start() {
|
||||
// This starts the a new puppeteer browser (Chrome)
|
||||
// and load the localhost page, this page will load the
|
||||
// javascript modules (see server.js for more info)
|
||||
browser = await puppeteer.launch();
|
||||
page = await browser.newPage();
|
||||
await page.goto(`http://localhost:3000/`, {
|
||||
|
||||
@ -5,7 +5,7 @@ const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
function compile(version, client) {
|
||||
const baseDir = `./test/e2e/generated/${version}/${client}/js/api/`;
|
||||
const baseDir = `./test/e2e/generated/${version}/${client}/`;
|
||||
const tsconfig = {
|
||||
compilerOptions: {
|
||||
target: 'es6',
|
||||
@ -14,11 +14,15 @@ function compile(version, client) {
|
||||
},
|
||||
include: ['./index.ts'],
|
||||
};
|
||||
|
||||
// Compile files to JavaScript (ES6 modules)
|
||||
const configFile = ts.parseConfigFileTextToJson('tsconfig.json', JSON.stringify(tsconfig));
|
||||
const configFileResult = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.resolve(process.cwd(), baseDir), undefined, 'tsconfig.json');
|
||||
const compilerHost = ts.createCompilerHost(configFileResult.options);
|
||||
const compiler = ts.createProgram(configFileResult.fileNames, configFileResult.options, compilerHost);
|
||||
const result = compiler.emit();
|
||||
|
||||
// Show errors or warnings (if any)
|
||||
const diagnostics = ts.getPreEmitDiagnostics(compiler).concat(result.diagnostics);
|
||||
if (diagnostics.length) {
|
||||
console.log(ts.formatDiagnosticsWithColorAndContext(diagnostics, {
|
||||
|
||||
@ -1,19 +1,12 @@
|
||||
'use strict';
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const glob = require('glob');
|
||||
|
||||
async function copy(version, client) {
|
||||
const input = path.resolve('./test/e2e/test/');
|
||||
const output = path.resolve(`./test/e2e/generated/${version}/${client}/js`);
|
||||
const files = glob.sync('*.js', { cwd: input });
|
||||
for (let file of files) {
|
||||
fs.copyFileSync(
|
||||
path.resolve(input, file),
|
||||
path.resolve(output, file)
|
||||
);
|
||||
}
|
||||
fs.copyFileSync(
|
||||
'./test/e2e/assets/script.js',
|
||||
`./test/e2e/generated/${version}/${client}/script.js`,
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = copy;
|
||||
|
||||
@ -5,7 +5,7 @@ const OpenAPI = require('../../../dist');
|
||||
async function generate(version, client) {
|
||||
await OpenAPI.generate({
|
||||
input: `./test/spec/${version}.json`,
|
||||
output: `./test/e2e/generated/${version}/${client}/js/api/`,
|
||||
output: `./test/e2e/generated/${version}/${client}/`,
|
||||
httpClient: client,
|
||||
useOptions: false,
|
||||
useUnionTypes: false,
|
||||
|
||||
@ -9,17 +9,34 @@ async function start(version, client) {
|
||||
return new Promise(resolve => {
|
||||
app = express();
|
||||
|
||||
app.use(express.static(`./test/e2e/generated/${version}/${client}`, {
|
||||
// Serve the JavaScript files from the specific folder, since we are using browser
|
||||
// based ES6 modules, this also means that we can just request the js/index.js file
|
||||
// and all other relative paths are resolved from that file.
|
||||
app.use('/js', express.static(`./test/e2e/generated/${version}/${client}/`, {
|
||||
extensions: ['', 'js'],
|
||||
index: 'index.js'
|
||||
}));
|
||||
|
||||
// When we request the index then we can just return the script loader.
|
||||
// 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('<script src="public/script.js"></script>');
|
||||
res.send('<script src="js/script.js"></script>');
|
||||
});
|
||||
|
||||
const aap = (obj) => {
|
||||
const a = {};
|
||||
for (const key in obj) {
|
||||
a[key] = obj[key];
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
||||
// Register an 'echo' server that just returns all data from the API calls.
|
||||
// Although this might not be a 'correct' response, we can use this to test
|
||||
// the majority of API calls.
|
||||
app.all('/base/api/*', (req, res) => {
|
||||
res.send({
|
||||
res.json({
|
||||
method: req.method,
|
||||
protocol: req.protocol,
|
||||
hostname: req.hostname,
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
import * as complexService from './testComplexService';
|
||||
import * as defaultsService from './testDefaultsService';
|
||||
import * as headerService from './testHeaderService';
|
||||
import * as parametersService from './testParametersService';
|
||||
import * as responseService from './testResponseService';
|
||||
import * as simpleService from './testSimpleService';
|
||||
import * as typesService from './testTypesService';
|
||||
|
||||
export {
|
||||
complexService,
|
||||
defaultsService,
|
||||
headerService,
|
||||
parametersService,
|
||||
responseService,
|
||||
simpleService,
|
||||
typesService
|
||||
};
|
||||
@ -1,13 +0,0 @@
|
||||
import { ComplexService } from './api';
|
||||
|
||||
export async function complexTypes() {
|
||||
return await ComplexService.complexTypes({
|
||||
first: {
|
||||
second: {
|
||||
third: 'Hello World!',
|
||||
},
|
||||
},
|
||||
}, {
|
||||
prop: 'Hello World!',
|
||||
});
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
import { DefaultsService } from './api';
|
||||
|
||||
export async function callWithDefaultParameters() {
|
||||
return await DefaultsService.callWithDefaultParameters();
|
||||
}
|
||||
|
||||
export async function callWithDefaultOptionalParameters() {
|
||||
return await DefaultsService.callWithDefaultOptionalParameters();
|
||||
}
|
||||
|
||||
export async function callToTestOrderOfParams() {
|
||||
return await DefaultsService.callToTestOrderOfParams(
|
||||
'parameterStringWithNoDefault',
|
||||
'parameterOptionalStringWithDefault',
|
||||
'parameterOptionalStringWithEmptyDefault',
|
||||
'parameterOptionalStringWithNoDefault',
|
||||
'parameterStringWithDefault',
|
||||
'parameterStringWithEmptyDefault'
|
||||
);
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
import { HeaderService } from './api';
|
||||
|
||||
export async function callWithResultFromHeader() {
|
||||
return await HeaderService.callWithResultFromHeader();
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
import { ParametersService } from './api';
|
||||
|
||||
export async function callWithParameters() {
|
||||
return await ParametersService.callWithParameters(
|
||||
'parameterHeader',
|
||||
'parameterQuery',
|
||||
'parameterForm',
|
||||
'parameterBody',
|
||||
'parameterPath'
|
||||
);
|
||||
}
|
||||
|
||||
export async function callWithWeirdParameterNames() {
|
||||
return await ParametersService.callWithWeirdParameterNames(
|
||||
'parameterHeader',
|
||||
'parameterQuery',
|
||||
'parameterForm',
|
||||
'parameterBody',
|
||||
'parameterPath1',
|
||||
'parameterPath2',
|
||||
'parameterPath3'
|
||||
);
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
import { ResponseService } from './api';
|
||||
|
||||
export async function callWithResponse() {
|
||||
return await ResponseService.callWithResponse();
|
||||
}
|
||||
|
||||
export async function callWithResponses() {
|
||||
return await ResponseService.callWithResponses();
|
||||
}
|
||||
|
||||
export async function callWithDuplicateResponses() {
|
||||
return await ResponseService.callWithDuplicateResponses();
|
||||
}
|
||||
@ -1,29 +0,0 @@
|
||||
import { SimpleService } from './api';
|
||||
|
||||
export async function getCallWithoutParametersAndResponse() {
|
||||
return await SimpleService.getCallWithoutParametersAndResponse();
|
||||
}
|
||||
|
||||
export async function putCallWithoutParametersAndResponse() {
|
||||
return await SimpleService.putCallWithoutParametersAndResponse();
|
||||
}
|
||||
|
||||
export async function postCallWithoutParametersAndResponse() {
|
||||
return await SimpleService.postCallWithoutParametersAndResponse();
|
||||
}
|
||||
|
||||
export async function deleteCallWithoutParametersAndResponse() {
|
||||
return await SimpleService.deleteCallWithoutParametersAndResponse();
|
||||
}
|
||||
|
||||
export async function optionsCallWithoutParametersAndResponse() {
|
||||
return await SimpleService.optionsCallWithoutParametersAndResponse();
|
||||
}
|
||||
|
||||
export async function headCallWithoutParametersAndResponse() {
|
||||
return await SimpleService.headCallWithoutParametersAndResponse();
|
||||
}
|
||||
|
||||
export async function patchCallWithoutParametersAndResponse() {
|
||||
return await SimpleService.patchCallWithoutParametersAndResponse();
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
import { TypesService } from './api';
|
||||
|
||||
export async function types() {
|
||||
return await TypesService.types(
|
||||
['foo', 'bar'],
|
||||
{ foo: 'bar' },
|
||||
'Success',
|
||||
123,
|
||||
'Hello World!',
|
||||
true,
|
||||
{ foo: 'bar' }
|
||||
);
|
||||
}
|
||||
@ -22,7 +22,15 @@ describe('v2.fetch', () => {
|
||||
});
|
||||
|
||||
it('complexService', async () => {
|
||||
const result = await browser.evaluate(async () => await window.test.complexService.complexTypes());
|
||||
expect(result).toBe('');
|
||||
const result = await browser.evaluate(async () => {
|
||||
return await window.api.ComplexService.complexTypes({
|
||||
first: {
|
||||
second: {
|
||||
third: 'Hello World!'
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
expect(result.url).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
@ -5,78 +5,29 @@ const copy = require('./scripts/copy');
|
||||
const compile = require('./scripts/compile');
|
||||
const server = require('./scripts/server');
|
||||
|
||||
let tests;
|
||||
|
||||
describe('v2.node', () => {
|
||||
|
||||
beforeAll(async () => {
|
||||
await generate('v2', 'node');
|
||||
await copy('v2', 'node');
|
||||
await compile('v2', 'fetch');
|
||||
await server.start('v2', 'fetch');
|
||||
tests = require('./generated/v2/node/js/index.js');
|
||||
await compile('v2', 'node');
|
||||
await server.start('v2', 'node');
|
||||
}, 30000);
|
||||
|
||||
afterAll(async () => {
|
||||
await server.stop();
|
||||
tests = null;
|
||||
});
|
||||
|
||||
it('complexService', async () => {
|
||||
const result = await tests.complexService.complexTypes();
|
||||
expect(result).toBeTruthy();
|
||||
});
|
||||
|
||||
it('defaultsService', async () => {
|
||||
const result1 = await tests.defaultsService.callWithDefaultParameters();
|
||||
const result2 = await tests.defaultsService.callWithDefaultOptionalParameters();
|
||||
const result3 = await tests.defaultsService.callToTestOrderOfParams();
|
||||
expect(result1).toBeTruthy();
|
||||
expect(result2).toBeTruthy();
|
||||
expect(result3).toBeTruthy();
|
||||
});
|
||||
|
||||
it('headerService', async () => {
|
||||
const result = await tests.headerService.callWithResultFromHeader();
|
||||
expect(result).toBeTruthy();
|
||||
});
|
||||
|
||||
it('parametersService', async () => {
|
||||
const result1 = await tests.parametersService.callWithParameters();
|
||||
const result2 = await tests.parametersService.callWithWeirdParameterNames();
|
||||
expect(result1).toBeTruthy();
|
||||
expect(result2).toBeTruthy();
|
||||
});
|
||||
|
||||
it('responseService', async () => {
|
||||
const result1 = await tests.responseService.callWithResponse();
|
||||
const result2 = await tests.responseService.callWithResponses();
|
||||
const result3 = await tests.responseService.callWithDuplicateResponses();
|
||||
expect(result1).toBeTruthy();
|
||||
expect(result2).toBeTruthy();
|
||||
expect(result3).toBeTruthy();
|
||||
});
|
||||
|
||||
it('simpleService', async () => {
|
||||
const result1 = await tests.simpleService.getCallWithoutParametersAndResponse();
|
||||
const result2 = await tests.simpleService.putCallWithoutParametersAndResponse();
|
||||
const result3 = await tests.simpleService.postCallWithoutParametersAndResponse();
|
||||
const result4 = await tests.simpleService.deleteCallWithoutParametersAndResponse();
|
||||
const result5 = await tests.simpleService.optionsCallWithoutParametersAndResponse();
|
||||
const result6 = await tests.simpleService.headCallWithoutParametersAndResponse();
|
||||
const result7 = await tests.simpleService.patchCallWithoutParametersAndResponse();
|
||||
expect(result1).toBeTruthy();
|
||||
expect(result2).toBeTruthy();
|
||||
expect(result3).toBeTruthy();
|
||||
expect(result4).toBeTruthy();
|
||||
expect(result5).toBeTruthy();
|
||||
expect(result6).toBeTruthy();
|
||||
expect(result7).toBeTruthy();
|
||||
});
|
||||
|
||||
it('typesService', async () => {
|
||||
const result = await tests.typesService.types();
|
||||
expect(result).toBeTruthy();
|
||||
const { ComplexService } = require('./generated/v2/node/index.js');
|
||||
const result = await ComplexService.complexTypes({
|
||||
first: {
|
||||
second: {
|
||||
third: 'Hello World!'
|
||||
}
|
||||
}
|
||||
});
|
||||
expect(result).toBeDefined();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@ -21,7 +21,16 @@ describe('v2.xhr', () => {
|
||||
await browser.stop();
|
||||
});
|
||||
|
||||
it('runs', async () => {
|
||||
expect(true).toBeTruthy();
|
||||
it('complexService', async () => {
|
||||
const result = await browser.evaluate(async () => {
|
||||
return await window.api.ComplexService.complexTypes({
|
||||
first: {
|
||||
second: {
|
||||
third: 'Hello World!'
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
expect(result).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
@ -25,4 +25,16 @@ describe('v3.fetch', () => {
|
||||
expect(true).toBeTruthy();
|
||||
});
|
||||
|
||||
it('complexService', async () => {
|
||||
const result = await browser.evaluate(async () => {
|
||||
return await window.api.ComplexService.complexTypes({
|
||||
first: {
|
||||
second: {
|
||||
third: 'Hello World!'
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
expect(result).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
@ -5,8 +5,6 @@ const copy = require('./scripts/copy');
|
||||
const compile = require('./scripts/compile');
|
||||
const server = require('./scripts/server');
|
||||
|
||||
let tests;
|
||||
|
||||
describe('v3.node', () => {
|
||||
|
||||
beforeAll(async () => {
|
||||
@ -14,17 +12,22 @@ describe('v3.node', () => {
|
||||
await copy('v3', 'node');
|
||||
await compile('v3', 'node');
|
||||
await server.start('v3', 'node');
|
||||
tests = require('./generated/v3/node/index.js');
|
||||
}, 30000);
|
||||
|
||||
afterAll(async () => {
|
||||
await server.stop();
|
||||
tests = null;
|
||||
});
|
||||
|
||||
it('runs', async () => {
|
||||
console.log(app);
|
||||
expect(true).toBeTruthy();
|
||||
it('complexService', async () => {
|
||||
const { ComplexService } = require('./generated/v3/node/index.js');
|
||||
const result = await ComplexService.complexTypes({
|
||||
first: {
|
||||
second: {
|
||||
third: 'Hello World!'
|
||||
}
|
||||
}
|
||||
});
|
||||
expect(result).toBeDefined();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@ -21,7 +21,16 @@ describe('v3.xhr', () => {
|
||||
await browser.stop();
|
||||
});
|
||||
|
||||
it('runs', async () => {
|
||||
expect(true).toBeTruthy();
|
||||
it('complexService', async () => {
|
||||
const result = await browser.evaluate(async () => {
|
||||
return await window.api.ComplexService.complexTypes({
|
||||
first: {
|
||||
second: {
|
||||
third: 'Hello World!'
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
expect(result).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user