Skip to content

Commit 2a42d1f

Browse files
author
Simon Tsvilik
committed
tests: add support for union/enum types for @formfield()
1 parent 07c67b5 commit 2a42d1f

File tree

3 files changed

+31
-11
lines changed

3 files changed

+31
-11
lines changed

tests/fixtures/controllers/parameterController.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Body, BodyProp, Get, Header, Path, Post, Query, Request, Route, Res, TsoaResponse, Deprecated, Queries, RequestProp, FormField } from '@tsoa/runtime';
2-
import { Gender, ParameterTestModel } from '../testModel';
2+
import { EnumNumberValue, FormTestModel, Gender, ParameterTestModel } from '../testModel';
33

44
@Route('ParameterTest')
55
export class ParameterController {
@@ -308,13 +308,17 @@ export class ParameterController {
308308
});
309309
}
310310

311-
@Get('ParameterHeaderStringType')
312-
public async headerStringType(@Header() header: string): Promise<void> {
313-
//
311+
@Get('FormData')
312+
public async formData(@FormField() data: string, @FormField() indexes: EnumNumberValue, @FormField() gender: Gender): Promise<FormTestModel> {
313+
return Promise.resolve<FormTestModel>({
314+
data,
315+
indexes,
316+
gender,
317+
});
314318
}
315319

316-
@Get('FormDataStringType')
317-
public async formData(@FormField() data: string): Promise<void> {
320+
@Get('ParameterHeaderStringType')
321+
public async headerStringType(@Header() header: string): Promise<void> {
318322
//
319323
}
320324

tests/fixtures/testModel.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,12 @@ export class ParameterTestModel {
828828
public nicknames?: string[];
829829
}
830830

831+
export class FormTestModel {
832+
public data!: string;
833+
public indexes!: EnumNumberValue;
834+
public gender!: Gender;
835+
}
836+
831837
export class ValidateCustomErrorModel {}
832838

833839
export class ValidateModel {

tests/unit/swagger/schemaDetails.spec.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,11 +1004,21 @@ describe('Schema details generation', () => {
10041004
const metadata = new MetadataGenerator('./fixtures/controllers/parameterController.ts').Generate();
10051005
const spec = new SpecGenerator2(metadata, getDefaultExtendedOptions()).GetSpec();
10061006

1007-
const method = spec.paths['/ParameterTest/FormDataStringType'].get?.parameters ?? [];
1008-
1009-
expect(method).to.have.lengthOf(1);
1010-
const queryParam = method[0];
1011-
expect(queryParam.in).to.equal('formData');
1007+
const method = spec.paths['/ParameterTest/FormData'].get?.parameters ?? [];
1008+
1009+
expect(method).to.have.lengthOf(3);
1010+
const [data, indexes, gender] = method;
1011+
1012+
expect(data.in).to.equal('formData');
1013+
expect(data.type).to.equal('string');
1014+
// Can process numeric enum
1015+
expect(indexes.in).to.equal('formData');
1016+
expect(indexes.type).to.equal('number');
1017+
expect(indexes.enum).to.deep.equal([0, 2, 5]);
1018+
// Can process string enum
1019+
expect(gender.in).to.equal('formData');
1020+
expect(gender.type).to.equal('string');
1021+
expect(gender.enum).to.deep.equal(['MALE', 'FEMALE']);
10121022
});
10131023
});
10141024

0 commit comments

Comments
 (0)