Skip to content

Commit 00527ea

Browse files
committed
fix: test cases
1 parent 9c011c3 commit 00527ea

File tree

1 file changed

+111
-11
lines changed

1 file changed

+111
-11
lines changed

packages/openapi-code-generator/src/typescript/common/import-builder.spec.ts

Lines changed: 111 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ describe("typescript/common/import-builder", () => {
2020
it("can import individual exports", () => {
2121
const builder = new ImportBuilder({includeFileExtensions: false})
2222

23-
builder.addSingle("Cat", "./models", false)
24-
builder.addSingle("Dog", "./models", false)
23+
builder.addSingle("Cat", "./models.ts", false)
24+
builder.addSingle("Dog", "./models.ts", false)
2525

2626
expect(builder.toString()).toBe("import {Cat, Dog} from './models'")
2727
})
@@ -45,7 +45,7 @@ describe("typescript/common/import-builder", () => {
4545
includeFileExtensions: false,
4646
})
4747

48-
builder.addSingle("Cat", "./foo/models", false)
48+
builder.addSingle("Cat", "./foo/models.ts", false)
4949

5050
expect(builder.toString()).toBe("import {Cat} from './models'")
5151
})
@@ -58,7 +58,7 @@ describe("typescript/common/import-builder", () => {
5858
includeFileExtensions: false,
5959
})
6060

61-
builder.addSingle("Cat", "./models", false)
61+
builder.addSingle("Cat", "./models.ts", false)
6262

6363
expect(builder.toString()).toBe("import {Cat} from '../models'")
6464
})
@@ -71,7 +71,7 @@ describe("typescript/common/import-builder", () => {
7171
includeFileExtensions: false,
7272
})
7373

74-
builder.addSingle("Cat", "./foo/models", false)
74+
builder.addSingle("Cat", "./foo/models.ts", false)
7575

7676
expect(builder.toString()).toBe("import {Cat} from './foo/models'")
7777
})
@@ -84,7 +84,7 @@ describe("typescript/common/import-builder", () => {
8484
includeFileExtensions: false,
8585
})
8686

87-
builder.addSingle("Cat", "./bar/models", false)
87+
builder.addSingle("Cat", "./bar/models.ts", false)
8888

8989
expect(builder.toString()).toBe("import {Cat} from '../bar/models'")
9090
})
@@ -94,8 +94,8 @@ describe("typescript/common/import-builder", () => {
9494
it("can import types", () => {
9595
const builder = new ImportBuilder({includeFileExtensions: false})
9696

97-
builder.addSingle("Cat", "./models", false)
98-
builder.addSingle("Dog", "./models", true)
97+
builder.addSingle("Cat", "./models.ts", false)
98+
builder.addSingle("Dog", "./models.ts", true)
9999

100100
expect(builder.toString()).toBe("import {Cat, type Dog} from './models'")
101101
})
@@ -152,9 +152,9 @@ describe("typescript/common/import-builder", () => {
152152

153153
builder.addModule("_, defaultExport", "ignore-me") // ensure not used
154154
builder.addModule("Lodash", "lodash")
155-
builder.addSingle("Cat", "./models", false)
156-
builder.addSingle("Dog", "./models", true)
157-
builder.addSingle("Unused", "./models", false)
155+
builder.addSingle("Cat", "./models.ts", false)
156+
builder.addSingle("Dog", "./models.ts", true)
157+
builder.addSingle("Unused", "./models.ts", false)
158158

159159
const code = [
160160
"function demo() {",
@@ -251,4 +251,104 @@ describe("typescript/common/import-builder", () => {
251251
)
252252
})
253253
})
254+
255+
describe("includeFileExtensions = true", () => {
256+
it("keeps .ts extensions in named imports", () => {
257+
const builder = new ImportBuilder({includeFileExtensions: true})
258+
builder.addSingle("Cat", "./models.ts", false)
259+
builder.addSingle("Dog", "./models.ts", false)
260+
expect(builder.toString()).toBe("import {Cat, Dog} from './models.ts'")
261+
})
262+
263+
it("keeps .ts extension for default (module) imports from relative files", () => {
264+
const builder = new ImportBuilder({includeFileExtensions: true})
265+
builder.addModule("Util", "./util.ts")
266+
expect(builder.toString()).toBe("import Util from './util.ts'")
267+
})
268+
269+
describe("relative path handling", () => {
270+
it("same directory keeps extension", () => {
271+
const builder = new ImportBuilder({
272+
unit: {
273+
filename: "./foo/example",
274+
},
275+
includeFileExtensions: true,
276+
})
277+
278+
builder.addSingle("Cat", "./foo/models.ts", false)
279+
280+
expect(builder.toString()).toBe("import {Cat} from './models.ts'")
281+
})
282+
283+
it("parent directory keeps extension", () => {
284+
const builder = new ImportBuilder({
285+
unit: {
286+
filename: "./foo/example",
287+
},
288+
includeFileExtensions: true,
289+
})
290+
291+
builder.addSingle("Cat", "./models.ts", false)
292+
293+
expect(builder.toString()).toBe("import {Cat} from '../models.ts'")
294+
})
295+
296+
it("child directory keeps extension", () => {
297+
const builder = new ImportBuilder({
298+
unit: {
299+
filename: "./example",
300+
},
301+
includeFileExtensions: true,
302+
})
303+
304+
builder.addSingle("Cat", "./foo/models.ts", false)
305+
306+
expect(builder.toString()).toBe("import {Cat} from './foo/models.ts'")
307+
})
308+
309+
it("sibling directory keeps extension", () => {
310+
const builder = new ImportBuilder({
311+
unit: {
312+
filename: "./foo/example",
313+
},
314+
includeFileExtensions: true,
315+
})
316+
317+
builder.addSingle("Cat", "./bar/models.ts", false)
318+
319+
expect(builder.toString()).toBe("import {Cat} from '../bar/models.ts'")
320+
})
321+
})
322+
323+
it("supports types with extensions", () => {
324+
const builder = new ImportBuilder({includeFileExtensions: true})
325+
builder.addSingle("Cat", "./models.ts", false)
326+
builder.addSingle("Dog", "./models.ts", true)
327+
expect(builder.toString()).toBe(
328+
"import {Cat, type Dog} from './models.ts'",
329+
)
330+
})
331+
332+
it("usage-based pruning still works with extensions", () => {
333+
const builder = new ImportBuilder({includeFileExtensions: true})
334+
builder.addModule("Lodash", "lodash")
335+
builder.addSingle("Cat", "./models.ts", false)
336+
builder.addSingle("Dog", "./models.ts", true)
337+
builder.addSingle("Unused", "./models.ts", false)
338+
339+
const code = [
340+
"function demo() {",
341+
" const x: Dog = {} as any;",
342+
" console.log(Lodash, Cat)",
343+
"}",
344+
].join("\n")
345+
346+
expect(builder.toString(code)).toBe(
347+
[
348+
"import Lodash from 'lodash'",
349+
"import {Cat, type Dog} from './models.ts'",
350+
].join("\n"),
351+
)
352+
})
353+
})
254354
})

0 commit comments

Comments
 (0)