@tsed/platform-test-sdk 7.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/PlatformTestSdk.js +31 -0
- package/lib/cjs/components/PlatformTestSdk.js.map +1 -0
- package/lib/cjs/data/swagger.json +32 -0
- package/lib/cjs/errors/CustomBadRequest.js +18 -0
- package/lib/cjs/errors/CustomBadRequest.js.map +1 -0
- package/lib/cjs/errors/CustomInternalError.js +18 -0
- package/lib/cjs/errors/CustomInternalError.js.map +1 -0
- package/lib/cjs/index.js +42 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/interfaces/PlatformTestingSdkOpts.js +3 -0
- package/lib/cjs/interfaces/PlatformTestingSdkOpts.js.map +1 -0
- package/lib/cjs/interfaces/index.js +8 -0
- package/lib/cjs/interfaces/index.js.map +1 -0
- package/lib/cjs/modules/feature/FeatureModule.js +17 -0
- package/lib/cjs/modules/feature/FeatureModule.js.map +1 -0
- package/lib/cjs/modules/feature/controllers/FeatureController.js +23 -0
- package/lib/cjs/modules/feature/controllers/FeatureController.js.map +1 -0
- package/lib/cjs/package.json +3 -0
- package/lib/cjs/tests/exports.js +66 -0
- package/lib/cjs/tests/exports.js.map +1 -0
- package/lib/cjs/tests/testAcceptMime.js +103 -0
- package/lib/cjs/tests/testAcceptMime.js.map +1 -0
- package/lib/cjs/tests/testAuth.js +343 -0
- package/lib/cjs/tests/testAuth.js.map +1 -0
- package/lib/cjs/tests/testBodyParams.js +526 -0
- package/lib/cjs/tests/testBodyParams.js.map +1 -0
- package/lib/cjs/tests/testCache.js +292 -0
- package/lib/cjs/tests/testCache.js.map +1 -0
- package/lib/cjs/tests/testChildrenControllers.js +64 -0
- package/lib/cjs/tests/testChildrenControllers.js.map +1 -0
- package/lib/cjs/tests/testCookies.js +45 -0
- package/lib/cjs/tests/testCookies.js.map +1 -0
- package/lib/cjs/tests/testCtrlInheritance.js +161 -0
- package/lib/cjs/tests/testCtrlInheritance.js.map +1 -0
- package/lib/cjs/tests/testCustom404.js +32 -0
- package/lib/cjs/tests/testCustom404.js.map +1 -0
- package/lib/cjs/tests/testErrors.js +252 -0
- package/lib/cjs/tests/testErrors.js.map +1 -0
- package/lib/cjs/tests/testHandlers.js +110 -0
- package/lib/cjs/tests/testHandlers.js.map +1 -0
- package/lib/cjs/tests/testHeaderParams.js +166 -0
- package/lib/cjs/tests/testHeaderParams.js.map +1 -0
- package/lib/cjs/tests/testHeaders.js +101 -0
- package/lib/cjs/tests/testHeaders.js.map +1 -0
- package/lib/cjs/tests/testInheritanceController.js +173 -0
- package/lib/cjs/tests/testInheritanceController.js.map +1 -0
- package/lib/cjs/tests/testLocals.js +63 -0
- package/lib/cjs/tests/testLocals.js.map +1 -0
- package/lib/cjs/tests/testLocation.js +42 -0
- package/lib/cjs/tests/testLocation.js.map +1 -0
- package/lib/cjs/tests/testMiddlewares.js +210 -0
- package/lib/cjs/tests/testMiddlewares.js.map +1 -0
- package/lib/cjs/tests/testModule.js +49 -0
- package/lib/cjs/tests/testModule.js.map +1 -0
- package/lib/cjs/tests/testMulter.js +162 -0
- package/lib/cjs/tests/testMulter.js.map +1 -0
- package/lib/cjs/tests/testPathParams.js +142 -0
- package/lib/cjs/tests/testPathParams.js.map +1 -0
- package/lib/cjs/tests/testQueryParams.js +354 -0
- package/lib/cjs/tests/testQueryParams.js.map +1 -0
- package/lib/cjs/tests/testRedirect.js +143 -0
- package/lib/cjs/tests/testRedirect.js.map +1 -0
- package/lib/cjs/tests/testResponse.js +622 -0
- package/lib/cjs/tests/testResponse.js.map +1 -0
- package/lib/cjs/tests/testResponseFilter.js +107 -0
- package/lib/cjs/tests/testResponseFilter.js.map +1 -0
- package/lib/cjs/tests/testRouting.js +75 -0
- package/lib/cjs/tests/testRouting.js.map +1 -0
- package/lib/cjs/tests/testScopeRequest.js +116 -0
- package/lib/cjs/tests/testScopeRequest.js.map +1 -0
- package/lib/cjs/tests/testSession.js +128 -0
- package/lib/cjs/tests/testSession.js.map +1 -0
- package/lib/cjs/tests/testStatics.js +58 -0
- package/lib/cjs/tests/testStatics.js.map +1 -0
- package/lib/cjs/tests/testView.js +83 -0
- package/lib/cjs/tests/testView.js.map +1 -0
- package/lib/esm/components/PlatformTestSdk.js +27 -0
- package/lib/esm/components/PlatformTestSdk.js.map +1 -0
- package/lib/esm/data/swagger.json +32 -0
- package/lib/esm/errors/CustomBadRequest.js +14 -0
- package/lib/esm/errors/CustomBadRequest.js.map +1 -0
- package/lib/esm/errors/CustomInternalError.js +14 -0
- package/lib/esm/errors/CustomInternalError.js.map +1 -0
- package/lib/esm/index.js +39 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/interfaces/PlatformTestingSdkOpts.js +2 -0
- package/lib/esm/interfaces/PlatformTestingSdkOpts.js.map +1 -0
- package/lib/esm/interfaces/index.js +5 -0
- package/lib/esm/interfaces/index.js.map +1 -0
- package/lib/esm/modules/feature/FeatureModule.js +14 -0
- package/lib/esm/modules/feature/FeatureModule.js.map +1 -0
- package/lib/esm/modules/feature/controllers/FeatureController.js +20 -0
- package/lib/esm/modules/feature/controllers/FeatureController.js.map +1 -0
- package/lib/esm/package.json +3 -0
- package/lib/esm/tests/exports.js +63 -0
- package/lib/esm/tests/exports.js.map +1 -0
- package/lib/esm/tests/testAcceptMime.js +99 -0
- package/lib/esm/tests/testAcceptMime.js.map +1 -0
- package/lib/esm/tests/testAuth.js +338 -0
- package/lib/esm/tests/testAuth.js.map +1 -0
- package/lib/esm/tests/testBodyParams.js +522 -0
- package/lib/esm/tests/testBodyParams.js.map +1 -0
- package/lib/esm/tests/testCache.js +288 -0
- package/lib/esm/tests/testCache.js.map +1 -0
- package/lib/esm/tests/testChildrenControllers.js +60 -0
- package/lib/esm/tests/testChildrenControllers.js.map +1 -0
- package/lib/esm/tests/testCookies.js +41 -0
- package/lib/esm/tests/testCookies.js.map +1 -0
- package/lib/esm/tests/testCtrlInheritance.js +156 -0
- package/lib/esm/tests/testCtrlInheritance.js.map +1 -0
- package/lib/esm/tests/testCustom404.js +27 -0
- package/lib/esm/tests/testCustom404.js.map +1 -0
- package/lib/esm/tests/testErrors.js +248 -0
- package/lib/esm/tests/testErrors.js.map +1 -0
- package/lib/esm/tests/testHandlers.js +105 -0
- package/lib/esm/tests/testHandlers.js.map +1 -0
- package/lib/esm/tests/testHeaderParams.js +162 -0
- package/lib/esm/tests/testHeaderParams.js.map +1 -0
- package/lib/esm/tests/testHeaders.js +97 -0
- package/lib/esm/tests/testHeaders.js.map +1 -0
- package/lib/esm/tests/testInheritanceController.js +167 -0
- package/lib/esm/tests/testInheritanceController.js.map +1 -0
- package/lib/esm/tests/testLocals.js +59 -0
- package/lib/esm/tests/testLocals.js.map +1 -0
- package/lib/esm/tests/testLocation.js +38 -0
- package/lib/esm/tests/testLocation.js.map +1 -0
- package/lib/esm/tests/testMiddlewares.js +206 -0
- package/lib/esm/tests/testMiddlewares.js.map +1 -0
- package/lib/esm/tests/testModule.js +45 -0
- package/lib/esm/tests/testModule.js.map +1 -0
- package/lib/esm/tests/testMulter.js +156 -0
- package/lib/esm/tests/testMulter.js.map +1 -0
- package/lib/esm/tests/testPathParams.js +138 -0
- package/lib/esm/tests/testPathParams.js.map +1 -0
- package/lib/esm/tests/testQueryParams.js +349 -0
- package/lib/esm/tests/testQueryParams.js.map +1 -0
- package/lib/esm/tests/testRedirect.js +139 -0
- package/lib/esm/tests/testRedirect.js.map +1 -0
- package/lib/esm/tests/testResponse.js +615 -0
- package/lib/esm/tests/testResponse.js.map +1 -0
- package/lib/esm/tests/testResponseFilter.js +103 -0
- package/lib/esm/tests/testResponseFilter.js.map +1 -0
- package/lib/esm/tests/testRouting.js +71 -0
- package/lib/esm/tests/testRouting.js.map +1 -0
- package/lib/esm/tests/testScopeRequest.js +112 -0
- package/lib/esm/tests/testScopeRequest.js.map +1 -0
- package/lib/esm/tests/testSession.js +122 -0
- package/lib/esm/tests/testSession.js.map +1 -0
- package/lib/esm/tests/testStatics.js +54 -0
- package/lib/esm/tests/testStatics.js.map +1 -0
- package/lib/esm/tests/testView.js +79 -0
- package/lib/esm/tests/testView.js.map +1 -0
- package/lib/types/components/PlatformTestSdk.d.ts +9 -0
- package/lib/types/errors/CustomBadRequest.d.ts +8 -0
- package/lib/types/errors/CustomInternalError.d.ts +8 -0
- package/lib/types/index.d.ts +38 -0
- package/lib/types/interfaces/PlatformTestingSdkOpts.d.ts +8 -0
- package/lib/types/interfaces/index.d.ts +4 -0
- package/lib/types/modules/feature/FeatureModule.d.ts +2 -0
- package/lib/types/modules/feature/controllers/FeatureController.d.ts +3 -0
- package/lib/types/tests/exports.d.ts +2 -0
- package/lib/types/tests/testAcceptMime.d.ts +2 -0
- package/lib/types/tests/testAuth.d.ts +8 -0
- package/lib/types/tests/testBodyParams.d.ts +3 -0
- package/lib/types/tests/testCache.d.ts +2 -0
- package/lib/types/tests/testChildrenControllers.d.ts +2 -0
- package/lib/types/tests/testCookies.d.ts +11 -0
- package/lib/types/tests/testCtrlInheritance.d.ts +18 -0
- package/lib/types/tests/testCustom404.d.ts +2 -0
- package/lib/types/tests/testErrors.d.ts +19 -0
- package/lib/types/tests/testHandlers.d.ts +12 -0
- package/lib/types/tests/testHeaderParams.d.ts +16 -0
- package/lib/types/tests/testHeaders.d.ts +8 -0
- package/lib/types/tests/testInheritanceController.d.ts +28 -0
- package/lib/types/tests/testLocals.d.ts +2 -0
- package/lib/types/tests/testLocation.d.ts +2 -0
- package/lib/types/tests/testMiddlewares.d.ts +8 -0
- package/lib/types/tests/testModule.d.ts +2 -0
- package/lib/types/tests/testMulter.d.ts +21 -0
- package/lib/types/tests/testPathParams.d.ts +2 -0
- package/lib/types/tests/testQueryParams.d.ts +6 -0
- package/lib/types/tests/testRedirect.d.ts +2 -0
- package/lib/types/tests/testResponse.d.ts +16 -0
- package/lib/types/tests/testResponseFilter.d.ts +2 -0
- package/lib/types/tests/testRouting.d.ts +7 -0
- package/lib/types/tests/testScopeRequest.d.ts +12 -0
- package/lib/types/tests/testSession.d.ts +16 -0
- package/lib/types/tests/testStatics.d.ts +2 -0
- package/lib/types/tests/testView.d.ts +2 -0
- package/package.json +44 -0
- package/src/components/PlatformTestSdk.ts +29 -0
- package/src/data/file.txt +1 -0
- package/src/data/response.data.json +3 -0
- package/src/data/swagger.json +32 -0
- package/src/errors/CustomBadRequest.ts +16 -0
- package/src/errors/CustomInternalError.ts +16 -0
- package/src/index.ts +39 -0
- package/src/interfaces/PlatformTestingSdkOpts.ts +10 -0
- package/src/interfaces/index.ts +5 -0
- package/src/modules/feature/FeatureModule.ts +9 -0
- package/src/modules/feature/controllers/FeatureController.ts +11 -0
- package/src/tests/exports.ts +69 -0
- package/src/tests/testAcceptMime.ts +95 -0
- package/src/tests/testAuth.ts +339 -0
- package/src/tests/testBodyParams.ts +455 -0
- package/src/tests/testCache.ts +270 -0
- package/src/tests/testChildrenControllers.ts +55 -0
- package/src/tests/testCookies.ts +36 -0
- package/src/tests/testCtrlInheritance.ts +140 -0
- package/src/tests/testCustom404.ts +33 -0
- package/src/tests/testErrors.ts +223 -0
- package/src/tests/testHandlers.ts +92 -0
- package/src/tests/testHeaderParams.ts +149 -0
- package/src/tests/testHeaders.ts +91 -0
- package/src/tests/testInheritanceController.ts +156 -0
- package/src/tests/testLocals.ts +46 -0
- package/src/tests/testLocation.ts +37 -0
- package/src/tests/testMiddlewares.ts +159 -0
- package/src/tests/testModule.ts +46 -0
- package/src/tests/testMulter.ts +140 -0
- package/src/tests/testPathParams.ts +122 -0
- package/src/tests/testQueryParams.ts +323 -0
- package/src/tests/testRedirect.ts +124 -0
- package/src/tests/testResponse.ts +558 -0
- package/src/tests/testResponseFilter.ts +101 -0
- package/src/tests/testRouting.ts +65 -0
- package/src/tests/testScopeRequest.ts +111 -0
- package/src/tests/testSession.ts +104 -0
- package/src/tests/testStatics.ts +61 -0
- package/src/tests/testView.ts +68 -0
- package/tsconfig.compile.esm.json +12 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testResponse.js","sourceRoot":"","sources":["../../../src/tests/testResponse.ts"],"names":[],"mappings":"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","sourcesContent":["import {Context, Controller, Get, getContext, PathParams, PlatformResponse, PlatformTest, Post, Res} from \"@tsed/common\";\nimport {CollectionOf, ContentType, Enum, ForwardGroups, Groups, Ignore, Name, Property, Required, Returns, Status} from \"@tsed/schema\";\nimport axios from \"axios\";\nimport {createReadStream} from \"fs\";\nimport {join} from \"path\";\nimport {of} from \"rxjs\";\nimport {agent, SuperAgentStatic} from \"superagent\";\nimport SuperTest from \"supertest\";\nimport {PlatformTestingSdkOpts} from \"../interfaces\";\n\nclass Base {\n @Ignore()\n ignoreMeBase: string;\n\n @Property()\n fooBase: string;\n}\n\nclass MyModel extends Base {\n @Property()\n foo: string;\n\n @Ignore()\n ignoreMe: string;\n\n @Ignore((value, ctx) => ctx.endpoint)\n ignoreMe2: string;\n}\n\nclass EmptyModel {\n raw: any;\n affected?: number | null;\n}\n\nexport enum EnumValue {\n One = \"one\",\n Two = \"two\"\n}\n\nexport class NestedEnum {\n @Required()\n @Enum(EnumValue)\n value: EnumValue;\n}\n\nexport class TestNestedEnum {\n @Property()\n nested: NestedEnum;\n}\n\nexport class ModelGroup {\n @Property()\n id: string;\n\n @Groups(\"!creation\")\n groups: string;\n}\n\nclass TeamModel {\n @Required()\n @Name(\"teamName\")\n name: string;\n}\n\nclass TeamsModel {\n @Required()\n @CollectionOf(TeamModel)\n @ForwardGroups()\n teams: TeamModel[];\n}\n\nclass AllowedModel {\n @Property()\n id: string;\n\n @Property()\n description: string;\n\n @Groups(\"summary\")\n prop1: string; // not display by default\n\n @Groups(\"details\")\n prop2: string; // not display by default\n\n @Groups(\"admin\")\n sensitiveProp: string; // not displayed because it's a sensitive props\n}\n\n@Controller(\"/response\")\nclass TestResponseParamsCtrl {\n @Get(\"/scenario1/:id\")\n public testScenario1Get(@PathParams(\"id\") id: number) {\n return `hello-${id}`;\n }\n\n @Post(\"/scenario3/:id?\")\n @Status(204)\n public testScenario3EmptyResponse(@PathParams(\"id\") id: number, @Context() ctx: Context) {\n if (id) {\n return;\n }\n\n ctx.response.status(201);\n\n return {\n id: 1\n };\n }\n\n @Get(\"/scenario5\")\n async testScenario5Promise() {\n await new Promise((resolve) => {\n resolve(undefined);\n });\n\n return {\n id: 1\n };\n }\n\n @Get(\"/scenario6\")\n testScenario6Observable() {\n return of({id: 1});\n }\n\n @Get(\"/scenario6b\")\n async testScenario6bObservable() {\n return of({id: 1});\n }\n\n @Get(\"/scenario7\")\n @ContentType(\"application/json\")\n testScenario7Stream() {\n return createReadStream(join(__dirname, \"../data/response.data.json\"));\n }\n\n @Get(\"/scenario7b\")\n @ContentType(\"application/json\")\n async testScenario7bStream() {\n return createReadStream(join(__dirname, \"../data/response.data.json\"));\n }\n\n @Get(\"/scenario9/static\")\n public testScenario9Get(): string {\n return \"value\";\n }\n\n @Get(\"/scenario9/:id\")\n public testScenario9WithDynamicParam(@PathParams(\"id\") id: number): string {\n return \"value\" + id;\n }\n\n @Get(\"/scenario10\")\n public testScenario10() {\n const model = new MyModel();\n model.foo = \"foo\";\n model.ignoreMe = \"ignoreMe\";\n model.ignoreMe2 = \"ignoreMe2\";\n model.fooBase = \"fooBase\";\n model.ignoreMeBase = \"ignoreMeBase\";\n\n return model;\n }\n\n @Get(\"/scenario11\")\n testScenario11() {\n const t = new EmptyModel();\n\n t.raw = 1;\n t.affected = 1;\n\n return t;\n }\n\n @Get(\"/scenario12\")\n testScenario12(@Res() res: PlatformResponse) {\n res.attachment(\"filename\");\n\n return Buffer.from(\"Hello\");\n }\n\n @Get(\"/scenario13\")\n async testScenario13(@Res() res: PlatformResponse) {\n const http: SuperAgentStatic = agent();\n\n const image_res = await http.get(\"https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png\");\n\n res.setHeader(\"Content-Disposition\", \"inline;filename=googlelogo_color_272x92dp.png;\");\n res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n res.setHeader(\"Content-Type\", \"image/png\");\n\n return image_res.body;\n }\n\n @Get(\"/scenario14\")\n public scenario14() {\n return {\n jsonexample: 1\n };\n }\n\n @Get(\"/scenario15a\")\n testScenario15a() {\n return axios.get(`https://tsed.io/api.json`, {\n responseType: \"json\"\n });\n }\n\n @Get(\"/scenario15b\")\n async testScenario15b() {\n return axios.get(`https://api.tsed.io/rest/github/typed/test`, {\n responseType: \"json\"\n });\n }\n\n @Get(\"/scenario16\")\n async testScenario16(): Promise<TestNestedEnum> {\n const test = new TestNestedEnum();\n const nested = new NestedEnum();\n nested.value = EnumValue.One;\n test.nested = nested;\n return test;\n }\n\n @Get(\"/scenario17\")\n @Returns(201, ModelGroup).Groups(\"creation\")\n async testScenario17(): Promise<ModelGroup> {\n const model = new ModelGroup();\n model.id = \"id\";\n model.groups = \"groups\";\n\n return model;\n }\n\n @Get(\"/scenario18\")\n @Returns(200, TeamsModel)\n testScenario18() {\n const data = new TeamsModel();\n const team: any = {};\n team.name = \"name\";\n data.teams = [team];\n\n return data;\n }\n\n @Get(\"/scenario19\")\n @Returns(200, AllowedModel).Groups(\"!admin\").AllowedGroups(\"summary\", \"details\")\n async testScenario19(): Promise<AllowedModel> {\n const model = new AllowedModel();\n model.id = \"id\";\n model.prop1 = \"prop1\";\n model.description = \"description\";\n model.prop2 = \"prop2\";\n model.sensitiveProp = \"sensitiveProp\";\n\n return model;\n }\n\n @Get(\"/scenario20\")\n async testScenario20() {\n const $ctx = getContext();\n\n return {id: $ctx?.request.query.id};\n }\n}\n\nexport function testResponse(options: PlatformTestingSdkOpts) {\n let request: SuperTest.SuperTest<SuperTest.Test>;\n\n beforeAll(\n PlatformTest.bootstrap(options.server, {\n ...options,\n mount: {\n \"/rest\": [TestResponseParamsCtrl]\n }\n })\n );\n beforeAll(() => {\n request = SuperTest(PlatformTest.callback());\n });\n afterAll(PlatformTest.reset);\n\n describe(\"Scenario1: return the id (classic)\", () => {\n describe(\"GET /rest/response/scenario1/:id\", () => {\n it(\"should return the id + test\", async () => {\n const response = await request.get(\"/rest/response/scenario1/10\").expect(200);\n\n expect(response.text).toEqual(\"hello-10\");\n });\n });\n });\n\n describe(\"Scenario3: when response is empty or created\", () => {\n describe(\"GET /rest/response/scenario3/:id?\", () => {\n it(\"should return nothing with a 204 status\", async () => {\n const response = await request.post(\"/rest/response/scenario3/10\").expect(204);\n\n expect(response.text).toEqual(\"\");\n });\n\n it(\"should return a body\", async () => {\n const response = await request.post(\"/rest/response/scenario3\").expect(201);\n\n expect(response.body).toEqual({id: 1});\n });\n });\n });\n\n describe(\"Scenario5: when endpoint response from promise\", () => {\n describe(\"GET /rest/response/scenario5\", () => {\n it(\"should return a body\", async () => {\n const response = await request.get(\"/rest/response/scenario5\");\n\n expect(response.body).toEqual({id: 1});\n });\n });\n });\n\n describe(\"Scenario6: when endpoint return an observable\", () => {\n describe(\"GET /rest/response/scenario6\", () => {\n it(\"should return a body\", async () => {\n const response = await request.get(\"/rest/response/scenario6\");\n\n expect(response.body).toEqual({id: 1});\n });\n });\n\n describe(\"GET /rest/response/scenario6b\", () => {\n it(\"should return a body\", async () => {\n const response = await request.get(\"/rest/response/scenario6b\");\n\n expect(response.body).toEqual({id: 1});\n });\n });\n });\n\n describe(\"Scenario7: when endpoint return a stream\", () => {\n describe(\"GET /rest/response/scenario7\", () => {\n it(\"should return a body\", async () => {\n const response = await request.get(\"/rest/response/scenario7\");\n\n expect(response.body).toEqual({id: \"1\"});\n });\n });\n\n describe(\"GET /rest/response/scenario7b\", () => {\n it(\"should return a body\", async () => {\n const response = await request.get(\"/rest/response/scenario7b\");\n\n expect(response.body).toEqual({id: \"1\"});\n });\n });\n });\n\n describe(\"Scenario9: routes without parameters must be defined first\", () => {\n describe(\"GET /rest/response/scenario9/static\", () => {\n it(\"should return the test\", async () => {\n const response = await request.get(\"/rest/response/scenario9/static\").expect(200);\n\n expect(response.text).toEqual(\"value\");\n });\n });\n\n describe(\"GET /rest/response/scenario9/:dynamic\", () => {\n it(\"should return the test + id\", async () => {\n const response = await request.get(\"/rest/response/scenario9/10\").expect(200);\n\n expect(response.text).toEqual(\"value10\");\n });\n });\n\n describe(\"GET /rest/response/scenario9/:dynamic\", () => {\n it(\"should throw a badRequest when path params isn't set as number\", async () => {\n const response = await request.get(\"/rest/response/scenario9/kkk\").expect(400);\n\n expect(response.body).toEqual({\n errors: [\n {\n data: \"kkk\",\n dataPath: \"\",\n instancePath: \"\",\n keyword: \"type\",\n message: \"must be number\",\n params: {\n type: \"number\"\n },\n schemaPath: \"#/type\"\n }\n ],\n message: 'Bad request on parameter \"request.path.id\".\\nValue must be number. Given value: \"kkk\"',\n name: \"AJV_VALIDATION_ERROR\",\n status: 400\n });\n });\n });\n });\n\n describe(\"Scenario10: return a model with ignored props\", () => {\n it(\"should return a body\", async () => {\n const response = await request.get(\"/rest/response/scenario10\");\n\n expect(response.body).toEqual({\n foo: \"foo\",\n fooBase: \"fooBase\"\n });\n });\n });\n\n describe(\"Scenario11: return models without props\", () => {\n it(\"should return a body\", async () => {\n const response = await request.get(\"/rest/response/scenario11\");\n\n expect(response.body).toEqual({\n affected: 1,\n raw: 1\n });\n });\n });\n\n describe(\"Scenario12: Return buffer\", () => {\n it(\"should return a body\", async () => {\n const response = await request.get(\"/rest/response/scenario12\");\n\n expect(response.headers[\"content-disposition\"]).toEqual('attachment; filename=\"filename\"');\n expect(response.headers[\"content-type\"]).toContain(\"application/octet-stream\");\n expect(response.headers[\"content-length\"]).toEqual(\"5\");\n expect(response.body.toString()).toEqual(\"Hello\");\n });\n });\n\n describe(\"Scenario13: Return buffer\", () => {\n it(\"should return image\", async () => {\n const response = await request.get(\"/rest/response/scenario13\");\n\n expect(response.headers[\"content-disposition\"]).toEqual(\"inline;filename=googlelogo_color_272x92dp.png;\");\n expect(response.headers[\"content-type\"]).toContain(\"image/png\");\n expect(response.headers[\"content-length\"]).toEqual(\"5969\");\n });\n });\n\n describe(\"Scenario14: Return application/json when Accept is */*\", () => {\n it(\"should return a */* content-type\", async () => {\n const response = await request\n .get(\"/rest/response/scenario14\")\n .set(\"Accept\", \"*/*\")\n .set(\"Content-Type\", \"application/json\")\n .expect(200);\n\n expect(response.headers[\"content-type\"]).toEqual(\"application/json; charset=utf-8\");\n expect(response.body).toEqual({\n jsonexample: 1\n });\n });\n });\n describe(\"Scenario15: Use axios as proxy\", () => {\n it(\"should return the response (200)\", async () => {\n const response = await request.get(\"/rest/response/scenario15a\").expect(200);\n\n expect(response.headers[\"content-type\"]).toEqual(\"application/json; charset=utf-8\");\n });\n\n it(\"should return the response (401)\", async () => {\n const response = await request.get(\"/rest/response/scenario15b\").expect(401);\n\n expect(response.headers[\"content-type\"]).toEqual(\"application/json; charset=utf-8\");\n });\n });\n\n describe(\"Scenario16: Return response with nested enum\", () => {\n it(\"should return the response (200)\", async () => {\n const response = await request.get(\"/rest/response/scenario16\").expect(200);\n\n expect(response.body).toEqual({nested: {value: \"one\"}});\n });\n });\n\n describe(\"Scenario17: Return response with groups on 201\", () => {\n it(\"should return the response (200)\", async () => {\n const response = await request.get(\"/rest/response/scenario17\").expect(201);\n\n expect(response.body).toEqual({id: \"id\"});\n });\n });\n\n describe(\"Scenario18: Return data with alias\", () => {\n it(\"should return the response (200)\", async () => {\n const response = await request.get(\"/rest/response/scenario18\").expect(200);\n\n expect(response.body).toEqual({\n teams: [\n {\n teamName: \"name\"\n }\n ]\n });\n });\n });\n\n describe(\"Scenario19: includes options\", () => {\n it(\"should return the response (200)\", async () => {\n const response = await request.get(\"/rest/response/scenario19\").expect(200);\n\n expect(response.body).toEqual({\n description: \"description\",\n id: \"id\",\n prop1: \"prop1\",\n prop2: \"prop2\"\n });\n });\n it(\"should return the response (200 + [summary])\", async () => {\n const response = await request.get(\"/rest/response/scenario19?includes=summary\").expect(200);\n\n expect(response.body).toEqual({\n description: \"description\",\n id: \"id\",\n prop1: \"prop1\"\n });\n });\n it(\"should return the response (200 + [summary, details])\", async () => {\n const response = await request.get(\"/rest/response/scenario19?includes=summary&includes=details\").expect(200);\n\n expect(response.body).toEqual({\n description: \"description\",\n id: \"id\",\n prop2: \"prop2\",\n prop1: \"prop1\"\n });\n });\n it(\"should return the response (200 + [summary, details, admin])\", async () => {\n const response = await request.get(\"/rest/response/scenario19?includes=summary&includes=details&includes=admin\").expect(200);\n\n expect(response.body).toEqual({\n description: \"description\",\n id: \"id\",\n prop2: \"prop2\",\n prop1: \"prop1\"\n });\n });\n it(\"should return the response (200 + 'summary,details,admin')\", async () => {\n const response = await request.get(\"/rest/response/scenario19?includes=summary,details,admin\").expect(200);\n\n expect(response.body).toEqual({\n description: \"description\",\n id: \"id\",\n prop2: \"prop2\",\n prop1: \"prop1\"\n });\n });\n });\n\n describe(\"Scenario20: should return query data from Context\", () => {\n it(\"should return the response (200)\", async () => {\n const response = await request.get(\"/rest/response/scenario20?id=id\").expect(200);\n\n expect(response.body).toEqual({id: \"id\"});\n });\n });\n}\n"]}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Controller, Get, PlatformTest, ResponseFilter } from "@tsed/common";
|
|
3
|
+
import { Property, Returns } from "@tsed/schema";
|
|
4
|
+
import SuperTest from "supertest";
|
|
5
|
+
class ResponseFilterModel {
|
|
6
|
+
id;
|
|
7
|
+
}
|
|
8
|
+
__decorate([
|
|
9
|
+
Property(),
|
|
10
|
+
__metadata("design:type", String)
|
|
11
|
+
], ResponseFilterModel.prototype, "id", void 0);
|
|
12
|
+
let TestResponseFilterCtrl = class TestResponseFilterCtrl {
|
|
13
|
+
testScenario1() {
|
|
14
|
+
return { id: "id" };
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
__decorate([
|
|
18
|
+
Get("/scenario1/:id"),
|
|
19
|
+
Returns(200, ResponseFilterModel).Description("description"),
|
|
20
|
+
Returns(200, String).ContentType("text/xml"),
|
|
21
|
+
__metadata("design:type", Function),
|
|
22
|
+
__metadata("design:paramtypes", []),
|
|
23
|
+
__metadata("design:returntype", void 0)
|
|
24
|
+
], TestResponseFilterCtrl.prototype, "testScenario1", null);
|
|
25
|
+
TestResponseFilterCtrl = __decorate([
|
|
26
|
+
Controller("/response-filter")
|
|
27
|
+
], TestResponseFilterCtrl);
|
|
28
|
+
let XmlResponseFilter = class XmlResponseFilter {
|
|
29
|
+
transform(data, ctx) {
|
|
30
|
+
return "<xml>test</xml>";
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
XmlResponseFilter = __decorate([
|
|
34
|
+
ResponseFilter("text/xml")
|
|
35
|
+
], XmlResponseFilter);
|
|
36
|
+
let AnyResponseFilter = class AnyResponseFilter {
|
|
37
|
+
transform(data, ctx) {
|
|
38
|
+
return { data, errors: [] };
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
AnyResponseFilter = __decorate([
|
|
42
|
+
ResponseFilter("*/*")
|
|
43
|
+
], AnyResponseFilter);
|
|
44
|
+
export function testResponseFilter(options) {
|
|
45
|
+
let request;
|
|
46
|
+
beforeAll(PlatformTest.bootstrap(options.server, {
|
|
47
|
+
...options,
|
|
48
|
+
mount: {
|
|
49
|
+
"/rest": [TestResponseFilterCtrl]
|
|
50
|
+
},
|
|
51
|
+
responseFilters: [XmlResponseFilter, AnyResponseFilter]
|
|
52
|
+
}));
|
|
53
|
+
beforeAll(() => {
|
|
54
|
+
request = SuperTest(PlatformTest.callback());
|
|
55
|
+
});
|
|
56
|
+
afterAll(PlatformTest.reset);
|
|
57
|
+
describe("Scenario1: when have multiple contentType", () => {
|
|
58
|
+
describe("GET /rest/response/scenario1/:id", () => {
|
|
59
|
+
it("should return the xml format", async () => {
|
|
60
|
+
const response = await request
|
|
61
|
+
.get("/rest/response-filter/scenario1/10")
|
|
62
|
+
.set({
|
|
63
|
+
Accept: "text/xml"
|
|
64
|
+
})
|
|
65
|
+
.expect(200);
|
|
66
|
+
expect(response.text).toEqual("<xml>test</xml>");
|
|
67
|
+
});
|
|
68
|
+
it("should return the xml format when Accept text/xml and application/json", async () => {
|
|
69
|
+
const response = await request
|
|
70
|
+
.get("/rest/response-filter/scenario1/10")
|
|
71
|
+
.set({
|
|
72
|
+
Accept: "text/xml, application/json"
|
|
73
|
+
})
|
|
74
|
+
.expect(200);
|
|
75
|
+
expect(response.text).toEqual("<xml>test</xml>");
|
|
76
|
+
});
|
|
77
|
+
it("should return the json format", async () => {
|
|
78
|
+
const response = await request
|
|
79
|
+
.get("/rest/response-filter/scenario1/10")
|
|
80
|
+
.set({
|
|
81
|
+
Accept: "application/json"
|
|
82
|
+
})
|
|
83
|
+
.expect(200);
|
|
84
|
+
expect(response.body).toEqual({
|
|
85
|
+
data: {
|
|
86
|
+
id: "id"
|
|
87
|
+
},
|
|
88
|
+
errors: []
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
it("should return the json format by default", async () => {
|
|
92
|
+
const response = await request.get("/rest/response-filter/scenario1/10").expect(200);
|
|
93
|
+
expect(response.body).toEqual({
|
|
94
|
+
data: {
|
|
95
|
+
id: "id"
|
|
96
|
+
},
|
|
97
|
+
errors: []
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=testResponseFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testResponseFilter.js","sourceRoot":"","sources":["../../../src/tests/testResponseFilter.ts"],"names":[],"mappings":"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","sourcesContent":["import {Controller, Get, PlatformContext, PlatformTest, ResponseFilter, ResponseFilterMethods} from \"@tsed/common\";\nimport {Property, Returns} from \"@tsed/schema\";\nimport SuperTest from \"supertest\";\nimport {PlatformTestingSdkOpts} from \"../interfaces\";\n\nclass ResponseFilterModel {\n @Property()\n id: string;\n}\n\n@Controller(\"/response-filter\")\nclass TestResponseFilterCtrl {\n @Get(\"/scenario1/:id\")\n @Returns(200, ResponseFilterModel).Description(\"description\")\n @Returns(200, String).ContentType(\"text/xml\")\n public testScenario1() {\n return {id: \"id\"};\n }\n}\n\n@ResponseFilter(\"text/xml\")\nclass XmlResponseFilter implements ResponseFilterMethods {\n transform(data: unknown, ctx: PlatformContext) {\n return \"<xml>test</xml>\";\n }\n}\n\n@ResponseFilter(\"*/*\")\nclass AnyResponseFilter implements ResponseFilterMethods {\n transform(data: unknown, ctx: PlatformContext) {\n return {data, errors: []};\n }\n}\n\nexport function testResponseFilter(options: PlatformTestingSdkOpts) {\n let request: SuperTest.SuperTest<SuperTest.Test>;\n\n beforeAll(\n PlatformTest.bootstrap(options.server, {\n ...options,\n mount: {\n \"/rest\": [TestResponseFilterCtrl]\n },\n responseFilters: [XmlResponseFilter, AnyResponseFilter]\n })\n );\n beforeAll(() => {\n request = SuperTest(PlatformTest.callback());\n });\n afterAll(PlatformTest.reset);\n\n describe(\"Scenario1: when have multiple contentType\", () => {\n describe(\"GET /rest/response/scenario1/:id\", () => {\n it(\"should return the xml format\", async () => {\n const response = await request\n .get(\"/rest/response-filter/scenario1/10\")\n .set({\n Accept: \"text/xml\"\n })\n .expect(200);\n\n expect(response.text).toEqual(\"<xml>test</xml>\");\n });\n it(\"should return the xml format when Accept text/xml and application/json\", async () => {\n const response = await request\n .get(\"/rest/response-filter/scenario1/10\")\n .set({\n Accept: \"text/xml, application/json\"\n })\n .expect(200);\n\n expect(response.text).toEqual(\"<xml>test</xml>\");\n });\n it(\"should return the json format\", async () => {\n const response = await request\n .get(\"/rest/response-filter/scenario1/10\")\n .set({\n Accept: \"application/json\"\n })\n .expect(200);\n\n expect(response.body).toEqual({\n data: {\n id: \"id\"\n },\n errors: []\n });\n });\n it(\"should return the json format by default\", async () => {\n const response = await request.get(\"/rest/response-filter/scenario1/10\").expect(200);\n\n expect(response.body).toEqual({\n data: {\n id: \"id\"\n },\n errors: []\n });\n });\n });\n });\n}\n"]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Controller, Get, PlatformTest, Put } from "@tsed/common";
|
|
3
|
+
import SuperTest from "supertest";
|
|
4
|
+
const stub = jest.fn();
|
|
5
|
+
let TestRoutingController = class TestRoutingController {
|
|
6
|
+
scenario1() {
|
|
7
|
+
stub("scenario1");
|
|
8
|
+
return "test1";
|
|
9
|
+
}
|
|
10
|
+
scenario2() {
|
|
11
|
+
stub("scenario2");
|
|
12
|
+
return "shouldNotRun";
|
|
13
|
+
}
|
|
14
|
+
scenario3() {
|
|
15
|
+
stub("scenario3");
|
|
16
|
+
return "test3";
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
__decorate([
|
|
20
|
+
Get("/1"),
|
|
21
|
+
__metadata("design:type", Function),
|
|
22
|
+
__metadata("design:paramtypes", []),
|
|
23
|
+
__metadata("design:returntype", void 0)
|
|
24
|
+
], TestRoutingController.prototype, "scenario1", null);
|
|
25
|
+
__decorate([
|
|
26
|
+
Put("") // empty string has an effect on the calls orders
|
|
27
|
+
,
|
|
28
|
+
__metadata("design:type", Function),
|
|
29
|
+
__metadata("design:paramtypes", []),
|
|
30
|
+
__metadata("design:returntype", void 0)
|
|
31
|
+
], TestRoutingController.prototype, "scenario2", null);
|
|
32
|
+
__decorate([
|
|
33
|
+
Get("/3"),
|
|
34
|
+
__metadata("design:type", Function),
|
|
35
|
+
__metadata("design:paramtypes", []),
|
|
36
|
+
__metadata("design:returntype", void 0)
|
|
37
|
+
], TestRoutingController.prototype, "scenario3", null);
|
|
38
|
+
TestRoutingController = __decorate([
|
|
39
|
+
Controller("/routing")
|
|
40
|
+
], TestRoutingController);
|
|
41
|
+
export { TestRoutingController };
|
|
42
|
+
export function testRouting(options) {
|
|
43
|
+
let request;
|
|
44
|
+
beforeAll(PlatformTest.bootstrap(options.server, {
|
|
45
|
+
...options,
|
|
46
|
+
mount: {
|
|
47
|
+
"/rest": [TestRoutingController]
|
|
48
|
+
}
|
|
49
|
+
}));
|
|
50
|
+
beforeAll(() => {
|
|
51
|
+
request = SuperTest(PlatformTest.callback());
|
|
52
|
+
});
|
|
53
|
+
afterAll(PlatformTest.reset);
|
|
54
|
+
afterEach(() => jest.resetAllMocks());
|
|
55
|
+
it("Scenario1: should call scenario1 only", async () => {
|
|
56
|
+
const { text } = await request.get("/rest/routing/1").expect(200);
|
|
57
|
+
expect(text).toEqual("test1");
|
|
58
|
+
expect(stub).toHaveBeenCalledWith("scenario1");
|
|
59
|
+
});
|
|
60
|
+
it("Scenario2: should call scenario2 only", async () => {
|
|
61
|
+
const { text } = await request.put("/rest/routing/").expect(200);
|
|
62
|
+
expect(text).toEqual("shouldNotRun");
|
|
63
|
+
expect(stub).toHaveBeenCalledWith("scenario2");
|
|
64
|
+
});
|
|
65
|
+
it("Scenario3: should call scenario3 only", async () => {
|
|
66
|
+
const { text } = await request.get("/rest/routing/3").expect(200);
|
|
67
|
+
expect(text).toEqual("test3");
|
|
68
|
+
expect(stub).toHaveBeenCalledWith("scenario3");
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=testRouting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testRouting.js","sourceRoot":"","sources":["../../../src/tests/testRouting.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAC,MAAM,cAAc,CAAC;AAChE,OAAO,SAAS,MAAM,WAAW,CAAC;AAGlC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAGvB,IAAa,qBAAqB,GAAlC,MAAa,qBAAqB;IAEhC,SAAS;QACP,IAAI,CAAC,WAAW,CAAC,CAAC;QAElB,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,SAAS;QACP,IAAI,CAAC,WAAW,CAAC,CAAC;QAElB,OAAO,cAAc,CAAC;IACxB,CAAC;IAGD,SAAS;QACP,IAAI,CAAC,WAAW,CAAC,CAAC;QAElB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAA;AAnBC;IADC,GAAG,CAAC,IAAI,CAAC;;;;sDAKT;AAGD;IADC,GAAG,CAAC,EAAE,CAAC,CAAC,iDAAiD;;;;;sDAKzD;AAGD;IADC,GAAG,CAAC,IAAI,CAAC;;;;sDAKT;AApBU,qBAAqB;IADjC,UAAU,CAAC,UAAU,CAAC;GACV,qBAAqB,CAqBjC;SArBY,qBAAqB;AAuBlC,MAAM,UAAU,WAAW,CAAC,OAA+B;IACzD,IAAI,OAA4C,CAAC;IAEjD,SAAS,CACP,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;QACrC,GAAG,OAAO;QACV,KAAK,EAAE;YACL,OAAO,EAAE,CAAC,qBAAqB,CAAC;SACjC;KACF,CAAC,CACH,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7B,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAEtC,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {Controller, Get, PlatformTest, Put} from \"@tsed/common\";\nimport SuperTest from \"supertest\";\nimport {PlatformTestingSdkOpts} from \"../interfaces\";\n\nconst stub = jest.fn();\n\n@Controller(\"/routing\")\nexport class TestRoutingController {\n @Get(\"/1\")\n scenario1() {\n stub(\"scenario1\");\n\n return \"test1\";\n }\n\n @Put(\"\") // empty string has an effect on the calls orders\n scenario2() {\n stub(\"scenario2\");\n\n return \"shouldNotRun\";\n }\n\n @Get(\"/3\")\n scenario3() {\n stub(\"scenario3\");\n\n return \"test3\";\n }\n}\n\nexport function testRouting(options: PlatformTestingSdkOpts) {\n let request: SuperTest.SuperTest<SuperTest.Test>;\n\n beforeAll(\n PlatformTest.bootstrap(options.server, {\n ...options,\n mount: {\n \"/rest\": [TestRoutingController]\n }\n })\n );\n beforeAll(() => {\n request = SuperTest(PlatformTest.callback());\n });\n afterAll(PlatformTest.reset);\n afterEach(() => jest.resetAllMocks());\n\n it(\"Scenario1: should call scenario1 only\", async () => {\n const {text} = await request.get(\"/rest/routing/1\").expect(200);\n expect(text).toEqual(\"test1\");\n expect(stub).toHaveBeenCalledWith(\"scenario1\");\n });\n\n it(\"Scenario2: should call scenario2 only\", async () => {\n const {text} = await request.put(\"/rest/routing/\").expect(200);\n expect(text).toEqual(\"shouldNotRun\");\n expect(stub).toHaveBeenCalledWith(\"scenario2\");\n });\n\n it(\"Scenario3: should call scenario3 only\", async () => {\n const {text} = await request.get(\"/rest/routing/3\").expect(200);\n expect(text).toEqual(\"test3\");\n expect(stub).toHaveBeenCalledWith(\"scenario3\");\n });\n}\n"]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { Controller, Get, PathParams, PlatformTest, ProviderScope, Scope, Service } from "@tsed/common";
|
|
3
|
+
import SuperTest from "supertest";
|
|
4
|
+
let ScopeRequestService = class ScopeRequestService {
|
|
5
|
+
user;
|
|
6
|
+
};
|
|
7
|
+
ScopeRequestService = __decorate([
|
|
8
|
+
Service(),
|
|
9
|
+
Scope(ProviderScope.REQUEST)
|
|
10
|
+
], ScopeRequestService);
|
|
11
|
+
export { ScopeRequestService };
|
|
12
|
+
let ScopeRequestCtrl = class ScopeRequestCtrl {
|
|
13
|
+
scopeRequestService;
|
|
14
|
+
userId;
|
|
15
|
+
constructor(scopeRequestService) {
|
|
16
|
+
this.scopeRequestService = scopeRequestService;
|
|
17
|
+
}
|
|
18
|
+
$onDestroy() {
|
|
19
|
+
this.userId = null;
|
|
20
|
+
}
|
|
21
|
+
async testPerRequest(userId) {
|
|
22
|
+
this.scopeRequestService.user = userId;
|
|
23
|
+
this.userId = userId;
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
if (userId === "0") {
|
|
26
|
+
setTimeout(() => {
|
|
27
|
+
resolve({ userId, idSrv: this.scopeRequestService.user, idCtrl: this.userId });
|
|
28
|
+
}, 500);
|
|
29
|
+
}
|
|
30
|
+
if (userId === "1") {
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
resolve({ userId, idSrv: this.scopeRequestService.user, idCtrl: this.userId });
|
|
33
|
+
}, 300);
|
|
34
|
+
}
|
|
35
|
+
if (userId === "2") {
|
|
36
|
+
setTimeout(() => {
|
|
37
|
+
resolve({ userId, idSrv: this.scopeRequestService.user, idCtrl: this.userId });
|
|
38
|
+
}, 150);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
__decorate([
|
|
44
|
+
Get("/:id"),
|
|
45
|
+
__param(0, PathParams("id")),
|
|
46
|
+
__metadata("design:type", Function),
|
|
47
|
+
__metadata("design:paramtypes", [String]),
|
|
48
|
+
__metadata("design:returntype", Promise)
|
|
49
|
+
], ScopeRequestCtrl.prototype, "testPerRequest", null);
|
|
50
|
+
ScopeRequestCtrl = __decorate([
|
|
51
|
+
Controller("/scopes-request"),
|
|
52
|
+
Scope(ProviderScope.REQUEST),
|
|
53
|
+
__metadata("design:paramtypes", [ScopeRequestService])
|
|
54
|
+
], ScopeRequestCtrl);
|
|
55
|
+
export { ScopeRequestCtrl };
|
|
56
|
+
export function testScopeRequest(options) {
|
|
57
|
+
let request;
|
|
58
|
+
beforeAll(PlatformTest.bootstrap(options.server, {
|
|
59
|
+
...options,
|
|
60
|
+
mount: {
|
|
61
|
+
"/rest": [ScopeRequestCtrl]
|
|
62
|
+
}
|
|
63
|
+
}));
|
|
64
|
+
beforeAll(() => {
|
|
65
|
+
request = SuperTest(PlatformTest.callback());
|
|
66
|
+
});
|
|
67
|
+
afterAll(PlatformTest.reset);
|
|
68
|
+
describe("GET /rest/scopes-request/:id", () => {
|
|
69
|
+
const send = (id) => new Promise((resolve, reject) => {
|
|
70
|
+
request
|
|
71
|
+
.get(`/rest/scopes-request/${id}`)
|
|
72
|
+
.expect(200)
|
|
73
|
+
.end((err, response) => {
|
|
74
|
+
if (err) {
|
|
75
|
+
reject(err);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
resolve({ id, ...JSON.parse(response.text) });
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
it("should respond with the right userId per request", () => {
|
|
83
|
+
const promises = [];
|
|
84
|
+
promises.push(send("0"));
|
|
85
|
+
promises.push(send("1"));
|
|
86
|
+
promises.push(send("2"));
|
|
87
|
+
return Promise.all(promises).then((responses) => {
|
|
88
|
+
expect(responses).toEqual([
|
|
89
|
+
{
|
|
90
|
+
id: "0",
|
|
91
|
+
idCtrl: "0",
|
|
92
|
+
idSrv: "0",
|
|
93
|
+
userId: "0"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: "1",
|
|
97
|
+
idCtrl: "1",
|
|
98
|
+
idSrv: "1",
|
|
99
|
+
userId: "1"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: "2",
|
|
103
|
+
idCtrl: "2",
|
|
104
|
+
idSrv: "2",
|
|
105
|
+
userId: "2"
|
|
106
|
+
}
|
|
107
|
+
]);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=testScopeRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testScopeRequest.js","sourceRoot":"","sources":["../../../src/tests/testScopeRequest.ts"],"names":[],"mappings":"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","sourcesContent":["import {Controller, Get, PathParams, PlatformTest, ProviderScope, Scope, Service} from \"@tsed/common\";\nimport SuperTest from \"supertest\";\nimport {PlatformTestingSdkOpts} from \"../interfaces\";\n\n@Service()\n@Scope(ProviderScope.REQUEST)\nexport class ScopeRequestService {\n user: string;\n}\n\n@Controller(\"/scopes-request\")\n@Scope(ProviderScope.REQUEST)\nexport class ScopeRequestCtrl {\n userId: string | null;\n\n constructor(public scopeRequestService: ScopeRequestService) {}\n\n $onDestroy() {\n this.userId = null;\n }\n\n @Get(\"/:id\")\n async testPerRequest(@PathParams(\"id\") userId: string): Promise<any> {\n this.scopeRequestService.user = userId;\n this.userId = userId;\n\n return new Promise((resolve, reject) => {\n if (userId === \"0\") {\n setTimeout(() => {\n resolve({userId, idSrv: this.scopeRequestService.user, idCtrl: this.userId});\n }, 500);\n }\n\n if (userId === \"1\") {\n setTimeout(() => {\n resolve({userId, idSrv: this.scopeRequestService.user, idCtrl: this.userId});\n }, 300);\n }\n\n if (userId === \"2\") {\n setTimeout(() => {\n resolve({userId, idSrv: this.scopeRequestService.user, idCtrl: this.userId});\n }, 150);\n }\n });\n }\n}\n\nexport function testScopeRequest(options: PlatformTestingSdkOpts) {\n let request: SuperTest.SuperTest<SuperTest.Test>;\n\n beforeAll(\n PlatformTest.bootstrap(options.server, {\n ...options,\n mount: {\n \"/rest\": [ScopeRequestCtrl]\n }\n })\n );\n beforeAll(() => {\n request = SuperTest(PlatformTest.callback());\n });\n afterAll(PlatformTest.reset);\n\n describe(\"GET /rest/scopes-request/:id\", () => {\n const send = (id: string) =>\n new Promise((resolve, reject) => {\n request\n .get(`/rest/scopes-request/${id}`)\n .expect(200)\n .end((err: any, response: any) => {\n if (err) {\n reject(err);\n } else {\n resolve({id, ...JSON.parse(response.text)});\n }\n });\n });\n\n it(\"should respond with the right userId per request\", () => {\n const promises = [];\n\n promises.push(send(\"0\"));\n promises.push(send(\"1\"));\n promises.push(send(\"2\"));\n\n return Promise.all(promises).then((responses) => {\n expect(responses).toEqual([\n {\n id: \"0\",\n idCtrl: \"0\",\n idSrv: \"0\",\n userId: \"0\"\n },\n {\n id: \"1\",\n idCtrl: \"1\",\n idSrv: \"1\",\n userId: \"1\"\n },\n {\n id: \"2\",\n idCtrl: \"2\",\n idSrv: \"2\",\n userId: \"2\"\n }\n ]);\n });\n });\n });\n}\n"]}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { BodyParams, Constant, Controller, Get, PlatformTest, Post, Req, Session } from "@tsed/common";
|
|
3
|
+
import { NotFound } from "@tsed/exceptions";
|
|
4
|
+
import { Indexed, Unique } from "@tsed/mongoose";
|
|
5
|
+
import { Allow, Email, Ignore, MinLength, Property, Required, Returns } from "@tsed/schema";
|
|
6
|
+
import SuperTest from "supertest";
|
|
7
|
+
import { promisify } from "util";
|
|
8
|
+
export class UserCreation {
|
|
9
|
+
name;
|
|
10
|
+
email;
|
|
11
|
+
password;
|
|
12
|
+
}
|
|
13
|
+
__decorate([
|
|
14
|
+
Property(),
|
|
15
|
+
__metadata("design:type", String)
|
|
16
|
+
], UserCreation.prototype, "name", void 0);
|
|
17
|
+
__decorate([
|
|
18
|
+
Indexed(),
|
|
19
|
+
Required(),
|
|
20
|
+
Email(),
|
|
21
|
+
Unique(),
|
|
22
|
+
Allow(null),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], UserCreation.prototype, "email", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
Required(),
|
|
27
|
+
MinLength(6),
|
|
28
|
+
Allow(null),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], UserCreation.prototype, "password", void 0);
|
|
31
|
+
export class User extends UserCreation {
|
|
32
|
+
}
|
|
33
|
+
__decorate([
|
|
34
|
+
Ignore(),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], User.prototype, "password", void 0);
|
|
37
|
+
let SessionCtrl = class SessionCtrl {
|
|
38
|
+
platformName;
|
|
39
|
+
async connect(session, user) {
|
|
40
|
+
session.user = user;
|
|
41
|
+
return user;
|
|
42
|
+
}
|
|
43
|
+
async userInfo(user) {
|
|
44
|
+
if (!user) {
|
|
45
|
+
throw new NotFound("User not found");
|
|
46
|
+
}
|
|
47
|
+
return user;
|
|
48
|
+
}
|
|
49
|
+
async logout(req) {
|
|
50
|
+
switch (this.platformName) {
|
|
51
|
+
case "koa":
|
|
52
|
+
return (req.ctx.session = null);
|
|
53
|
+
case "express":
|
|
54
|
+
delete req.session.user;
|
|
55
|
+
return promisify(req.session.destroy.bind(req.session))();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
__decorate([
|
|
60
|
+
Constant("PLATFORM_NAME"),
|
|
61
|
+
__metadata("design:type", String)
|
|
62
|
+
], SessionCtrl.prototype, "platformName", void 0);
|
|
63
|
+
__decorate([
|
|
64
|
+
Post("/connect"),
|
|
65
|
+
__param(0, Session()),
|
|
66
|
+
__param(1, BodyParams()),
|
|
67
|
+
__metadata("design:type", Function),
|
|
68
|
+
__metadata("design:paramtypes", [Object, UserCreation]),
|
|
69
|
+
__metadata("design:returntype", Promise)
|
|
70
|
+
], SessionCtrl.prototype, "connect", null);
|
|
71
|
+
__decorate([
|
|
72
|
+
Get("/userinfo"),
|
|
73
|
+
Returns(200, User),
|
|
74
|
+
__param(0, Session("user")),
|
|
75
|
+
__metadata("design:type", Function),
|
|
76
|
+
__metadata("design:paramtypes", [User]),
|
|
77
|
+
__metadata("design:returntype", Promise)
|
|
78
|
+
], SessionCtrl.prototype, "userInfo", null);
|
|
79
|
+
__decorate([
|
|
80
|
+
Get("/logout"),
|
|
81
|
+
Returns(204),
|
|
82
|
+
__param(0, Req()),
|
|
83
|
+
__metadata("design:type", Function),
|
|
84
|
+
__metadata("design:paramtypes", [Object]),
|
|
85
|
+
__metadata("design:returntype", Promise)
|
|
86
|
+
], SessionCtrl.prototype, "logout", null);
|
|
87
|
+
SessionCtrl = __decorate([
|
|
88
|
+
Controller("/session")
|
|
89
|
+
], SessionCtrl);
|
|
90
|
+
export { SessionCtrl };
|
|
91
|
+
export function testSession(options) {
|
|
92
|
+
let request;
|
|
93
|
+
beforeAll(PlatformTest.bootstrap(options.server, {
|
|
94
|
+
...options,
|
|
95
|
+
mount: {
|
|
96
|
+
"/rest": [SessionCtrl]
|
|
97
|
+
}
|
|
98
|
+
}));
|
|
99
|
+
beforeAll(() => {
|
|
100
|
+
request = SuperTest.agent(PlatformTest.callback());
|
|
101
|
+
});
|
|
102
|
+
afterAll(PlatformTest.reset);
|
|
103
|
+
describe("Scenario1: POST /rest/session/connected", () => {
|
|
104
|
+
it("should keep connected user in session and destroy session", async () => {
|
|
105
|
+
await request.get("/rest/session/userinfo").expect(404);
|
|
106
|
+
await request.post("/rest/session/connect").send({
|
|
107
|
+
name: "name",
|
|
108
|
+
email: "test@test.fr",
|
|
109
|
+
password: "password1234"
|
|
110
|
+
});
|
|
111
|
+
// @ts-ignore
|
|
112
|
+
const response = await request.get("/rest/session/userinfo").expect(200);
|
|
113
|
+
expect(response.body).toEqual({
|
|
114
|
+
email: "test@test.fr",
|
|
115
|
+
name: "name"
|
|
116
|
+
});
|
|
117
|
+
await request.get("/rest/session/logout").expect(204);
|
|
118
|
+
await request.get("/rest/session/userinfo").expect(404);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=testSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testSession.js","sourceRoot":"","sources":["../../../src/tests/testSession.ts"],"names":[],"mappings":"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","sourcesContent":["import {BodyParams, Constant, Controller, Get, PlatformTest, Post, Req, Session} from \"@tsed/common\";\nimport {NotFound} from \"@tsed/exceptions\";\nimport {Indexed, Unique} from \"@tsed/mongoose\";\nimport {Allow, Email, Ignore, MinLength, Property, Required, Returns} from \"@tsed/schema\";\nimport SuperTest from \"supertest\";\nimport {promisify} from \"util\";\nimport {PlatformTestingSdkOpts} from \"../interfaces\";\n\nexport class UserCreation {\n @Property()\n name: string;\n\n @Indexed()\n @Required()\n @Email()\n @Unique()\n @Allow(null)\n email: string;\n\n @Required()\n @MinLength(6)\n @Allow(null)\n password: string;\n}\n\nexport class User extends UserCreation {\n @Ignore()\n declare password: string;\n}\n\n@Controller(\"/session\")\nexport class SessionCtrl {\n @Constant(\"PLATFORM_NAME\")\n platformName: string;\n\n @Post(\"/connect\")\n async connect(@Session() session: any, @BodyParams() user: UserCreation) {\n session.user = user;\n\n return user;\n }\n\n @Get(\"/userinfo\")\n @Returns(200, User)\n async userInfo(@Session(\"user\") user: User): Promise<User> {\n if (!user) {\n throw new NotFound(\"User not found\");\n }\n\n return user;\n }\n\n @Get(\"/logout\")\n @Returns(204)\n async logout(@Req() req: any) {\n switch (this.platformName) {\n case \"koa\":\n return (req.ctx.session = null);\n case \"express\":\n delete req.session.user;\n\n return promisify(req.session.destroy.bind(req.session))();\n }\n }\n}\n\nexport function testSession(options: PlatformTestingSdkOpts) {\n let request: SuperTest.SuperTest<SuperTest.Test>;\n beforeAll(\n PlatformTest.bootstrap(options.server, {\n ...options,\n mount: {\n \"/rest\": [SessionCtrl]\n }\n })\n );\n beforeAll(() => {\n request = SuperTest.agent(PlatformTest.callback());\n });\n afterAll(PlatformTest.reset);\n\n describe(\"Scenario1: POST /rest/session/connected\", () => {\n it(\"should keep connected user in session and destroy session\", async () => {\n await request.get(\"/rest/session/userinfo\").expect(404);\n\n await request.post(\"/rest/session/connect\").send({\n name: \"name\",\n email: \"test@test.fr\",\n password: \"password1234\"\n });\n\n // @ts-ignore\n const response = await request.get(\"/rest/session/userinfo\").expect(200);\n\n expect(response.body).toEqual({\n email: \"test@test.fr\",\n name: \"name\"\n });\n\n await request.get(\"/rest/session/logout\").expect(204);\n await request.get(\"/rest/session/userinfo\").expect(404);\n });\n });\n}\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { Controller, PlatformTest } from "@tsed/common";
|
|
3
|
+
import { getValue } from "@tsed/core";
|
|
4
|
+
import { Configuration } from "@tsed/di";
|
|
5
|
+
import { PlatformRouter } from "@tsed/platform-router";
|
|
6
|
+
import { readFileSync } from "fs";
|
|
7
|
+
import SuperTest from "supertest";
|
|
8
|
+
let CustomStaticsCtrl = class CustomStaticsCtrl {
|
|
9
|
+
constructor(router, config) {
|
|
10
|
+
router.statics("/", {
|
|
11
|
+
root: String(getValue(config, "statics./"))
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
CustomStaticsCtrl = __decorate([
|
|
16
|
+
Controller("/statics"),
|
|
17
|
+
__param(1, Configuration()),
|
|
18
|
+
__metadata("design:paramtypes", [PlatformRouter, Object])
|
|
19
|
+
], CustomStaticsCtrl);
|
|
20
|
+
export function testStatics(options) {
|
|
21
|
+
let request;
|
|
22
|
+
beforeEach(PlatformTest.bootstrap(options.server, {
|
|
23
|
+
...options,
|
|
24
|
+
mount: {
|
|
25
|
+
"/rest": [CustomStaticsCtrl]
|
|
26
|
+
}
|
|
27
|
+
}));
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
request = SuperTest(PlatformTest.callback());
|
|
30
|
+
});
|
|
31
|
+
afterEach(PlatformTest.reset);
|
|
32
|
+
it("should return index HTML (1)", async () => {
|
|
33
|
+
const response = await request.get("/").expect(200);
|
|
34
|
+
expect(response.text).toEqual(readFileSync(`${options.rootDir}/public/index.html`, { encoding: "utf8" }));
|
|
35
|
+
});
|
|
36
|
+
it("should return index HTML (2)", async () => {
|
|
37
|
+
const response = await request.get("/index.html").expect(200);
|
|
38
|
+
expect(response.text).toEqual(readFileSync(`${options.rootDir}/public/index.html`, { encoding: "utf8" }));
|
|
39
|
+
});
|
|
40
|
+
it("should return index HTML (3)", async () => {
|
|
41
|
+
const response = await request.get("/rest/statics/index.html").expect(200);
|
|
42
|
+
expect(response.text).toEqual(readFileSync(`${options.rootDir}/public/index.html`, { encoding: "utf8" }));
|
|
43
|
+
});
|
|
44
|
+
it("should return 404", async () => {
|
|
45
|
+
const response = await request.get("/index-te.html").expect(404);
|
|
46
|
+
expect(response.body).toEqual({
|
|
47
|
+
errors: [],
|
|
48
|
+
message: 'Resource "/index-te.html" not found',
|
|
49
|
+
name: "NOT_FOUND",
|
|
50
|
+
status: 404
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=testStatics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testStatics.js","sourceRoot":"","sources":["../../../src/tests/testStatics.ts"],"names":[],"mappings":"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","sourcesContent":["import {Controller, PlatformTest} from \"@tsed/common\";\nimport {getValue} from \"@tsed/core\";\nimport {Configuration} from \"@tsed/di\";\nimport {PlatformRouter} from \"@tsed/platform-router\";\nimport {readFileSync} from \"fs\";\nimport SuperTest from \"supertest\";\nimport {PlatformTestingSdkOpts} from \"../interfaces\";\n\n@Controller(\"/statics\")\nclass CustomStaticsCtrl {\n constructor(router: PlatformRouter, @Configuration() config: Configuration) {\n router.statics(\"/\", {\n root: String(getValue(config, \"statics./\"))\n });\n }\n}\n\nexport function testStatics(options: PlatformTestingSdkOpts) {\n let request: SuperTest.SuperTest<SuperTest.Test>;\n beforeEach(\n PlatformTest.bootstrap(options.server, {\n ...options,\n mount: {\n \"/rest\": [CustomStaticsCtrl]\n }\n })\n );\n beforeEach(() => {\n request = SuperTest(PlatformTest.callback());\n });\n afterEach(PlatformTest.reset);\n\n it(\"should return index HTML (1)\", async () => {\n const response = await request.get(\"/\").expect(200);\n\n expect(response.text).toEqual(readFileSync(`${options.rootDir}/public/index.html`, {encoding: \"utf8\"}));\n });\n\n it(\"should return index HTML (2)\", async () => {\n const response = await request.get(\"/index.html\").expect(200);\n\n expect(response.text).toEqual(readFileSync(`${options.rootDir}/public/index.html`, {encoding: \"utf8\"}));\n });\n\n it(\"should return index HTML (3)\", async () => {\n const response = await request.get(\"/rest/statics/index.html\").expect(200);\n\n expect(response.text).toEqual(readFileSync(`${options.rootDir}/public/index.html`, {encoding: \"utf8\"}));\n });\n\n it(\"should return 404\", async () => {\n const response = await request.get(\"/index-te.html\").expect(404);\n\n expect(response.body).toEqual({\n errors: [],\n message: 'Resource \"/index-te.html\" not found',\n name: \"NOT_FOUND\",\n status: 404\n });\n });\n}\n"]}
|