Skip to content

Commit 3befbb6

Browse files
authored
Merge pull request #4137 from aryaemami59/codegen-vitest
Migrate Codegen OpenAPI's unit tests to Vitest
2 parents 00ebb5c + 66485e3 commit 3befbb6

22 files changed

+1105
-2173
lines changed

.github/workflows/test-codegen.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131

3232
strategy:
3333
matrix:
34-
node-version: ['16.x']
34+
node-version: ['18.x']
3535

3636
steps:
3737
- uses: actions/checkout@v2

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"prettier": "^3.2.4",
3939
"release-it": "^14.12.5",
4040
"serve": "^14.2.0",
41+
"ts-node": "^10.9.2",
4142
"typescript": "^5.2.2"
4243
},
4344
"resolutions": {
@@ -53,7 +54,6 @@
5354
"react": "npm:18.2.0",
5455
"react-dom": "npm:18.2.0",
5556
"resolve": "1.22.1",
56-
"ts-node": "10.4.0",
5757
"@types/react": "npm:18.0.12",
5858
"@types/react-dom": "npm:18.0.5",
5959
"@types/inquirer": "npm:8.2.1",

packages/rtk-query-codegen-openapi/babel.config.js

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/rtk-query-codegen-openapi/jest.config.js

Lines changed: 0 additions & 18 deletions
This file was deleted.

packages/rtk-query-codegen-openapi/package.json

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
"rtk-query-codegen-openapi": "lib/bin/cli.js"
1818
},
1919
"scripts": {
20-
"build": "tsc && chmod +x lib/bin/cli.js",
21-
"prepare": "npm run build && chmod +x ./lib/bin/cli.js",
20+
"build": "yarn clean && tsc && chmod +x lib/bin/cli.js",
21+
"clean": "rimraf lib",
22+
"prepare": "yarn build && chmod +x lib/bin/cli.js",
2223
"format": "prettier --write \"src/**/*.ts\"",
23-
"test:update": "jest --runInBand --updateSnapshot",
24+
"test:update": "vitest --run --update",
2425
"test:update:enum": "lib/bin/cli.js test/config.example.enum.ts",
25-
"test": "jest --runInBand",
26+
"test": "vitest --run",
27+
"test:watch": "vitest --watch",
2628
"cli": "esr src/bin/cli.ts"
2729
},
2830
"files": [
@@ -36,35 +38,31 @@
3638
"@reduxjs/toolkit": "^1.6.0",
3739
"@types/commander": "^2.12.2",
3840
"@types/glob-to-regexp": "^0.4.0",
39-
"@types/jest": "^27",
4041
"@types/lodash": "^4.14.165",
41-
"@types/node": "^14.14.12",
42-
"@types/node-fetch": "^2.6.11",
43-
"@types/prettier": "^2.1.6",
42+
"@types/node": "^20.11.10",
4443
"@types/semver": "^7.3.9",
45-
"babel-jest": "^26.6.3",
4644
"chalk": "^4.1.0",
4745
"del": "^6.0.0",
4846
"esbuild": "~0.17",
4947
"esbuild-runner": "^2.2.1",
5048
"husky": "^4.3.6",
51-
"jest": "^29",
52-
"msw": "^0.40.2",
53-
"node-fetch": "^2.7.0",
49+
"msw": "^2.1.5",
50+
"node-fetch": "^3.3.2",
5451
"openapi-types": "^9.1.0",
5552
"pretty-quick": "^3.1.0",
56-
"ts-jest": "^29",
57-
"ts-node": "^10.4.0",
53+
"rimraf": "^5.0.5",
54+
"ts-node": "^10.9.2",
55+
"vitest": "^1.2.2",
5856
"yalc": "^1.0.0-pre.47"
5957
},
6058
"dependencies": {
6159
"@apidevtools/swagger-parser": "^10.0.2",
6260
"commander": "^6.2.0",
6361
"oazapfts": "^4.8.0",
64-
"prettier": "^2.2.1",
62+
"prettier": "^3.2.4",
6563
"semver": "^7.3.5",
6664
"swagger2openapi": "^7.0.4",
67-
"typescript": "^5.0.0"
65+
"typescript": "^5.3.3"
6866
},
6967
"husky": {
7068
"hooks": {

packages/rtk-query-codegen-openapi/src/bin/cli.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#!/usr/bin/env node
22

3-
import { dirname, resolve } from 'path';
4-
import { generateEndpoints, parseConfig } from '../';
5-
63
import program from 'commander';
4+
import { dirname, resolve } from 'node:path';
5+
import { generateEndpoints, parseConfig } from '../';
76

87
let ts = false;
98
try {

packages/rtk-query-codegen-openapi/src/generate.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
1-
import * as path from 'path';
2-
1+
import { camelCase } from 'lodash';
2+
import path from 'node:path';
33
import ApiGenerator, {
44
getOperationName as _getOperationName,
55
getReferenceName,
66
isReference,
77
supportDeepObjects,
88
} from 'oazapfts/lib/codegen/generate';
9-
import type { EndpointMatcher, EndpointOverrides, GenerationOptions, OperationDefinition, TextMatcher } from './types';
10-
import { capitalize, getOperationDefinitions, getV3Doc, removeUndefined, isQuery as testIsQuery } from './utils';
119
import {
1210
createPropertyAssignment,
1311
createQuestionToken,
1412
isValidIdentifier,
1513
keywordType,
1614
} from 'oazapfts/lib/codegen/tscodegen';
17-
import { generateCreateApiCall, generateEndpointDefinition, generateImportNode, generateTagTypes } from './codegen';
18-
19-
import type { ObjectPropertyDefinitions } from './codegen';
2015
import type { OpenAPIV3 } from 'openapi-types';
21-
import { camelCase } from 'lodash';
22-
import { factory } from './utils/factory';
23-
import { generateReactHooks } from './generators/react-hooks';
2416
import ts from 'typescript';
17+
import type { ObjectPropertyDefinitions } from './codegen';
18+
import { generateCreateApiCall, generateEndpointDefinition, generateImportNode, generateTagTypes } from './codegen';
19+
import { generateReactHooks } from './generators/react-hooks';
20+
import type { EndpointMatcher, EndpointOverrides, GenerationOptions, OperationDefinition, TextMatcher } from './types';
21+
import { capitalize, getOperationDefinitions, getV3Doc, removeUndefined, isQuery as testIsQuery } from './utils';
22+
import { factory } from './utils/factory';
2523

2624
const generatedApiName = 'injectedRtkApi';
2725

@@ -136,7 +134,7 @@ export async function generateApi(
136134
if (apiFile.startsWith('.')) {
137135
apiFile = path.relative(path.dirname(outputFile), apiFile);
138136
apiFile = apiFile.replace(/\\/g, '/');
139-
if (!apiFile.startsWith('.')) apiFile = './' + apiFile;
137+
if (!apiFile.startsWith('.')) apiFile = `./${apiFile}`;
140138
}
141139
}
142140
apiFile = apiFile.replace(/\.[jt]sx?$/, '');
@@ -191,7 +189,7 @@ export async function generateApi(
191189
);
192190

193191
function extractAllTagTypes({ operationDefinitions }: { operationDefinitions: OperationDefinition[] }) {
194-
let allTagTypes = new Set<string>();
192+
const allTagTypes = new Set<string>();
195193

196194
for (const operationDefinition of operationDefinitions) {
197195
const { verb, pathItem } = operationDefinition;
@@ -280,7 +278,7 @@ export async function generateApi(
280278
}
281279
// if there are still any naming conflicts, prepend with underscore
282280
while (name in queryArg) {
283-
name = '_' + name;
281+
name = `_${name}`;
284282
}
285283
return name;
286284
}

packages/rtk-query-codegen-openapi/src/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import path from 'path';
2-
import fs from 'fs';
1+
import fs from 'node:fs';
2+
import path from 'node:path';
33
import type { CommonOptions, ConfigFile, GenerationOptions, OutputFileOptions } from './types';
44
import { isValidUrl, prettify } from './utils';
55
export type { ConfigFile } from './types';
@@ -11,11 +11,11 @@ export async function generateEndpoints(options: GenerationOptions): Promise<str
1111
? options.schemaFile
1212
: path.resolve(process.cwd(), schemaLocation);
1313

14-
const sourceCode = await enforceOazapftsTsVersion(() => {
15-
const { generateApi } = require('./generate');
14+
const sourceCode = await enforceOazapftsTsVersion(async () => {
15+
const { generateApi } = await import('./generate');
1616
return generateApi(schemaAbsPath, options);
1717
});
18-
const outputFile = options.outputFile;
18+
const { outputFile } = options;
1919
if (outputFile) {
2020
fs.writeFileSync(path.resolve(process.cwd(), outputFile), await prettify(outputFile, sourceCode));
2121
} else {

packages/rtk-query-codegen-openapi/src/utils/getV3Doc.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import SwaggerParser from '@apidevtools/swagger-parser';
2+
import type { OpenAPIV3 } from 'openapi-types';
23
// @ts-ignore
34
import converter from 'swagger2openapi';
45

5-
import type { OpenAPIV3 } from 'openapi-types';
6-
76
export async function getV3Doc(spec: string): Promise<OpenAPIV3.Document> {
87
const doc = await SwaggerParser.bundle(spec);
98
const isOpenApiV3 = 'openapi' in doc && doc.openapi.startsWith('3');

packages/rtk-query-codegen-openapi/src/utils/prettier.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import * as prettier from 'prettier';
2-
import * as path from 'path';
1+
import path from 'node:path';
2+
import prettier from 'prettier';
33

44
const EXTENSION_TO_PARSER: Record<string, string> = {
55
ts: 'typescript',

0 commit comments

Comments
 (0)