@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,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testResponseFilter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@tsed/common");
|
|
6
|
+
const schema_1 = require("@tsed/schema");
|
|
7
|
+
const supertest_1 = tslib_1.__importDefault(require("supertest"));
|
|
8
|
+
class ResponseFilterModel {
|
|
9
|
+
id;
|
|
10
|
+
}
|
|
11
|
+
tslib_1.__decorate([
|
|
12
|
+
(0, schema_1.Property)(),
|
|
13
|
+
tslib_1.__metadata("design:type", String)
|
|
14
|
+
], ResponseFilterModel.prototype, "id", void 0);
|
|
15
|
+
let TestResponseFilterCtrl = class TestResponseFilterCtrl {
|
|
16
|
+
testScenario1() {
|
|
17
|
+
return { id: "id" };
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
tslib_1.__decorate([
|
|
21
|
+
(0, common_1.Get)("/scenario1/:id"),
|
|
22
|
+
(0, schema_1.Returns)(200, ResponseFilterModel).Description("description"),
|
|
23
|
+
(0, schema_1.Returns)(200, String).ContentType("text/xml"),
|
|
24
|
+
tslib_1.__metadata("design:type", Function),
|
|
25
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
26
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
27
|
+
], TestResponseFilterCtrl.prototype, "testScenario1", null);
|
|
28
|
+
TestResponseFilterCtrl = tslib_1.__decorate([
|
|
29
|
+
(0, common_1.Controller)("/response-filter")
|
|
30
|
+
], TestResponseFilterCtrl);
|
|
31
|
+
let XmlResponseFilter = class XmlResponseFilter {
|
|
32
|
+
transform(data, ctx) {
|
|
33
|
+
return "<xml>test</xml>";
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
XmlResponseFilter = tslib_1.__decorate([
|
|
37
|
+
(0, common_1.ResponseFilter)("text/xml")
|
|
38
|
+
], XmlResponseFilter);
|
|
39
|
+
let AnyResponseFilter = class AnyResponseFilter {
|
|
40
|
+
transform(data, ctx) {
|
|
41
|
+
return { data, errors: [] };
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
AnyResponseFilter = tslib_1.__decorate([
|
|
45
|
+
(0, common_1.ResponseFilter)("*/*")
|
|
46
|
+
], AnyResponseFilter);
|
|
47
|
+
function testResponseFilter(options) {
|
|
48
|
+
let request;
|
|
49
|
+
beforeAll(common_1.PlatformTest.bootstrap(options.server, {
|
|
50
|
+
...options,
|
|
51
|
+
mount: {
|
|
52
|
+
"/rest": [TestResponseFilterCtrl]
|
|
53
|
+
},
|
|
54
|
+
responseFilters: [XmlResponseFilter, AnyResponseFilter]
|
|
55
|
+
}));
|
|
56
|
+
beforeAll(() => {
|
|
57
|
+
request = (0, supertest_1.default)(common_1.PlatformTest.callback());
|
|
58
|
+
});
|
|
59
|
+
afterAll(common_1.PlatformTest.reset);
|
|
60
|
+
describe("Scenario1: when have multiple contentType", () => {
|
|
61
|
+
describe("GET /rest/response/scenario1/:id", () => {
|
|
62
|
+
it("should return the xml format", async () => {
|
|
63
|
+
const response = await request
|
|
64
|
+
.get("/rest/response-filter/scenario1/10")
|
|
65
|
+
.set({
|
|
66
|
+
Accept: "text/xml"
|
|
67
|
+
})
|
|
68
|
+
.expect(200);
|
|
69
|
+
expect(response.text).toEqual("<xml>test</xml>");
|
|
70
|
+
});
|
|
71
|
+
it("should return the xml format when Accept text/xml and application/json", async () => {
|
|
72
|
+
const response = await request
|
|
73
|
+
.get("/rest/response-filter/scenario1/10")
|
|
74
|
+
.set({
|
|
75
|
+
Accept: "text/xml, application/json"
|
|
76
|
+
})
|
|
77
|
+
.expect(200);
|
|
78
|
+
expect(response.text).toEqual("<xml>test</xml>");
|
|
79
|
+
});
|
|
80
|
+
it("should return the json format", async () => {
|
|
81
|
+
const response = await request
|
|
82
|
+
.get("/rest/response-filter/scenario1/10")
|
|
83
|
+
.set({
|
|
84
|
+
Accept: "application/json"
|
|
85
|
+
})
|
|
86
|
+
.expect(200);
|
|
87
|
+
expect(response.body).toEqual({
|
|
88
|
+
data: {
|
|
89
|
+
id: "id"
|
|
90
|
+
},
|
|
91
|
+
errors: []
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
it("should return the json format by default", async () => {
|
|
95
|
+
const response = await request.get("/rest/response-filter/scenario1/10").expect(200);
|
|
96
|
+
expect(response.body).toEqual({
|
|
97
|
+
data: {
|
|
98
|
+
id: "id"
|
|
99
|
+
},
|
|
100
|
+
errors: []
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
exports.testResponseFilter = testResponseFilter;
|
|
107
|
+
//# 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,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testRouting = exports.TestRoutingController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@tsed/common");
|
|
6
|
+
const supertest_1 = tslib_1.__importDefault(require("supertest"));
|
|
7
|
+
const stub = jest.fn();
|
|
8
|
+
let TestRoutingController = class TestRoutingController {
|
|
9
|
+
scenario1() {
|
|
10
|
+
stub("scenario1");
|
|
11
|
+
return "test1";
|
|
12
|
+
}
|
|
13
|
+
scenario2() {
|
|
14
|
+
stub("scenario2");
|
|
15
|
+
return "shouldNotRun";
|
|
16
|
+
}
|
|
17
|
+
scenario3() {
|
|
18
|
+
stub("scenario3");
|
|
19
|
+
return "test3";
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
tslib_1.__decorate([
|
|
23
|
+
(0, common_1.Get)("/1"),
|
|
24
|
+
tslib_1.__metadata("design:type", Function),
|
|
25
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
26
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
27
|
+
], TestRoutingController.prototype, "scenario1", null);
|
|
28
|
+
tslib_1.__decorate([
|
|
29
|
+
(0, common_1.Put)("") // empty string has an effect on the calls orders
|
|
30
|
+
,
|
|
31
|
+
tslib_1.__metadata("design:type", Function),
|
|
32
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
33
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
34
|
+
], TestRoutingController.prototype, "scenario2", null);
|
|
35
|
+
tslib_1.__decorate([
|
|
36
|
+
(0, common_1.Get)("/3"),
|
|
37
|
+
tslib_1.__metadata("design:type", Function),
|
|
38
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
39
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
40
|
+
], TestRoutingController.prototype, "scenario3", null);
|
|
41
|
+
TestRoutingController = tslib_1.__decorate([
|
|
42
|
+
(0, common_1.Controller)("/routing")
|
|
43
|
+
], TestRoutingController);
|
|
44
|
+
exports.TestRoutingController = TestRoutingController;
|
|
45
|
+
function testRouting(options) {
|
|
46
|
+
let request;
|
|
47
|
+
beforeAll(common_1.PlatformTest.bootstrap(options.server, {
|
|
48
|
+
...options,
|
|
49
|
+
mount: {
|
|
50
|
+
"/rest": [TestRoutingController]
|
|
51
|
+
}
|
|
52
|
+
}));
|
|
53
|
+
beforeAll(() => {
|
|
54
|
+
request = (0, supertest_1.default)(common_1.PlatformTest.callback());
|
|
55
|
+
});
|
|
56
|
+
afterAll(common_1.PlatformTest.reset);
|
|
57
|
+
afterEach(() => jest.resetAllMocks());
|
|
58
|
+
it("Scenario1: should call scenario1 only", async () => {
|
|
59
|
+
const { text } = await request.get("/rest/routing/1").expect(200);
|
|
60
|
+
expect(text).toEqual("test1");
|
|
61
|
+
expect(stub).toHaveBeenCalledWith("scenario1");
|
|
62
|
+
});
|
|
63
|
+
it("Scenario2: should call scenario2 only", async () => {
|
|
64
|
+
const { text } = await request.put("/rest/routing/").expect(200);
|
|
65
|
+
expect(text).toEqual("shouldNotRun");
|
|
66
|
+
expect(stub).toHaveBeenCalledWith("scenario2");
|
|
67
|
+
});
|
|
68
|
+
it("Scenario3: should call scenario3 only", async () => {
|
|
69
|
+
const { text } = await request.get("/rest/routing/3").expect(200);
|
|
70
|
+
expect(text).toEqual("test3");
|
|
71
|
+
expect(stub).toHaveBeenCalledWith("scenario3");
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
exports.testRouting = testRouting;
|
|
75
|
+
//# sourceMappingURL=testRouting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testRouting.js","sourceRoot":"","sources":["../../../src/tests/testRouting.ts"],"names":[],"mappings":";;;;AAAA,yCAAgE;AAChE,kEAAkC;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,IAAA,YAAG,EAAC,IAAI,CAAC;;;;sDAKT;AAGD;IADC,IAAA,YAAG,EAAC,EAAE,CAAC,CAAC,iDAAiD;;;;;sDAKzD;AAGD;IADC,IAAA,YAAG,EAAC,IAAI,CAAC;;;;sDAKT;AApBU,qBAAqB;IADjC,IAAA,mBAAU,EAAC,UAAU,CAAC;GACV,qBAAqB,CAqBjC;AArBY,sDAAqB;AAuBlC,SAAgB,WAAW,CAAC,OAA+B;IACzD,IAAI,OAA4C,CAAC;IAEjD,SAAS,CACP,qBAAY,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,IAAA,mBAAS,EAAC,qBAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,qBAAY,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;AAlCD,kCAkCC","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,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testScopeRequest = exports.ScopeRequestCtrl = exports.ScopeRequestService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@tsed/common");
|
|
6
|
+
const supertest_1 = tslib_1.__importDefault(require("supertest"));
|
|
7
|
+
let ScopeRequestService = class ScopeRequestService {
|
|
8
|
+
user;
|
|
9
|
+
};
|
|
10
|
+
ScopeRequestService = tslib_1.__decorate([
|
|
11
|
+
(0, common_1.Service)(),
|
|
12
|
+
(0, common_1.Scope)(common_1.ProviderScope.REQUEST)
|
|
13
|
+
], ScopeRequestService);
|
|
14
|
+
exports.ScopeRequestService = ScopeRequestService;
|
|
15
|
+
let ScopeRequestCtrl = class ScopeRequestCtrl {
|
|
16
|
+
scopeRequestService;
|
|
17
|
+
userId;
|
|
18
|
+
constructor(scopeRequestService) {
|
|
19
|
+
this.scopeRequestService = scopeRequestService;
|
|
20
|
+
}
|
|
21
|
+
$onDestroy() {
|
|
22
|
+
this.userId = null;
|
|
23
|
+
}
|
|
24
|
+
async testPerRequest(userId) {
|
|
25
|
+
this.scopeRequestService.user = userId;
|
|
26
|
+
this.userId = userId;
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
if (userId === "0") {
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
resolve({ userId, idSrv: this.scopeRequestService.user, idCtrl: this.userId });
|
|
31
|
+
}, 500);
|
|
32
|
+
}
|
|
33
|
+
if (userId === "1") {
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
resolve({ userId, idSrv: this.scopeRequestService.user, idCtrl: this.userId });
|
|
36
|
+
}, 300);
|
|
37
|
+
}
|
|
38
|
+
if (userId === "2") {
|
|
39
|
+
setTimeout(() => {
|
|
40
|
+
resolve({ userId, idSrv: this.scopeRequestService.user, idCtrl: this.userId });
|
|
41
|
+
}, 150);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
tslib_1.__decorate([
|
|
47
|
+
(0, common_1.Get)("/:id"),
|
|
48
|
+
tslib_1.__param(0, (0, common_1.PathParams)("id")),
|
|
49
|
+
tslib_1.__metadata("design:type", Function),
|
|
50
|
+
tslib_1.__metadata("design:paramtypes", [String]),
|
|
51
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
52
|
+
], ScopeRequestCtrl.prototype, "testPerRequest", null);
|
|
53
|
+
ScopeRequestCtrl = tslib_1.__decorate([
|
|
54
|
+
(0, common_1.Controller)("/scopes-request"),
|
|
55
|
+
(0, common_1.Scope)(common_1.ProviderScope.REQUEST),
|
|
56
|
+
tslib_1.__metadata("design:paramtypes", [ScopeRequestService])
|
|
57
|
+
], ScopeRequestCtrl);
|
|
58
|
+
exports.ScopeRequestCtrl = ScopeRequestCtrl;
|
|
59
|
+
function testScopeRequest(options) {
|
|
60
|
+
let request;
|
|
61
|
+
beforeAll(common_1.PlatformTest.bootstrap(options.server, {
|
|
62
|
+
...options,
|
|
63
|
+
mount: {
|
|
64
|
+
"/rest": [ScopeRequestCtrl]
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
beforeAll(() => {
|
|
68
|
+
request = (0, supertest_1.default)(common_1.PlatformTest.callback());
|
|
69
|
+
});
|
|
70
|
+
afterAll(common_1.PlatformTest.reset);
|
|
71
|
+
describe("GET /rest/scopes-request/:id", () => {
|
|
72
|
+
const send = (id) => new Promise((resolve, reject) => {
|
|
73
|
+
request
|
|
74
|
+
.get(`/rest/scopes-request/${id}`)
|
|
75
|
+
.expect(200)
|
|
76
|
+
.end((err, response) => {
|
|
77
|
+
if (err) {
|
|
78
|
+
reject(err);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
resolve({ id, ...JSON.parse(response.text) });
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
it("should respond with the right userId per request", () => {
|
|
86
|
+
const promises = [];
|
|
87
|
+
promises.push(send("0"));
|
|
88
|
+
promises.push(send("1"));
|
|
89
|
+
promises.push(send("2"));
|
|
90
|
+
return Promise.all(promises).then((responses) => {
|
|
91
|
+
expect(responses).toEqual([
|
|
92
|
+
{
|
|
93
|
+
id: "0",
|
|
94
|
+
idCtrl: "0",
|
|
95
|
+
idSrv: "0",
|
|
96
|
+
userId: "0"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: "1",
|
|
100
|
+
idCtrl: "1",
|
|
101
|
+
idSrv: "1",
|
|
102
|
+
userId: "1"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: "2",
|
|
106
|
+
idCtrl: "2",
|
|
107
|
+
idSrv: "2",
|
|
108
|
+
userId: "2"
|
|
109
|
+
}
|
|
110
|
+
]);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
exports.testScopeRequest = testScopeRequest;
|
|
116
|
+
//# 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,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testSession = exports.SessionCtrl = exports.User = exports.UserCreation = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@tsed/common");
|
|
6
|
+
const exceptions_1 = require("@tsed/exceptions");
|
|
7
|
+
const mongoose_1 = require("@tsed/mongoose");
|
|
8
|
+
const schema_1 = require("@tsed/schema");
|
|
9
|
+
const supertest_1 = tslib_1.__importDefault(require("supertest"));
|
|
10
|
+
const util_1 = require("util");
|
|
11
|
+
class UserCreation {
|
|
12
|
+
name;
|
|
13
|
+
email;
|
|
14
|
+
password;
|
|
15
|
+
}
|
|
16
|
+
tslib_1.__decorate([
|
|
17
|
+
(0, schema_1.Property)(),
|
|
18
|
+
tslib_1.__metadata("design:type", String)
|
|
19
|
+
], UserCreation.prototype, "name", void 0);
|
|
20
|
+
tslib_1.__decorate([
|
|
21
|
+
(0, mongoose_1.Indexed)(),
|
|
22
|
+
(0, schema_1.Required)(),
|
|
23
|
+
(0, schema_1.Email)(),
|
|
24
|
+
(0, mongoose_1.Unique)(),
|
|
25
|
+
(0, schema_1.Allow)(null),
|
|
26
|
+
tslib_1.__metadata("design:type", String)
|
|
27
|
+
], UserCreation.prototype, "email", void 0);
|
|
28
|
+
tslib_1.__decorate([
|
|
29
|
+
(0, schema_1.Required)(),
|
|
30
|
+
(0, schema_1.MinLength)(6),
|
|
31
|
+
(0, schema_1.Allow)(null),
|
|
32
|
+
tslib_1.__metadata("design:type", String)
|
|
33
|
+
], UserCreation.prototype, "password", void 0);
|
|
34
|
+
exports.UserCreation = UserCreation;
|
|
35
|
+
class User extends UserCreation {
|
|
36
|
+
}
|
|
37
|
+
tslib_1.__decorate([
|
|
38
|
+
(0, schema_1.Ignore)(),
|
|
39
|
+
tslib_1.__metadata("design:type", String)
|
|
40
|
+
], User.prototype, "password", void 0);
|
|
41
|
+
exports.User = User;
|
|
42
|
+
let SessionCtrl = class SessionCtrl {
|
|
43
|
+
platformName;
|
|
44
|
+
async connect(session, user) {
|
|
45
|
+
session.user = user;
|
|
46
|
+
return user;
|
|
47
|
+
}
|
|
48
|
+
async userInfo(user) {
|
|
49
|
+
if (!user) {
|
|
50
|
+
throw new exceptions_1.NotFound("User not found");
|
|
51
|
+
}
|
|
52
|
+
return user;
|
|
53
|
+
}
|
|
54
|
+
async logout(req) {
|
|
55
|
+
switch (this.platformName) {
|
|
56
|
+
case "koa":
|
|
57
|
+
return (req.ctx.session = null);
|
|
58
|
+
case "express":
|
|
59
|
+
delete req.session.user;
|
|
60
|
+
return (0, util_1.promisify)(req.session.destroy.bind(req.session))();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
tslib_1.__decorate([
|
|
65
|
+
(0, common_1.Constant)("PLATFORM_NAME"),
|
|
66
|
+
tslib_1.__metadata("design:type", String)
|
|
67
|
+
], SessionCtrl.prototype, "platformName", void 0);
|
|
68
|
+
tslib_1.__decorate([
|
|
69
|
+
(0, common_1.Post)("/connect"),
|
|
70
|
+
tslib_1.__param(0, (0, common_1.Session)()),
|
|
71
|
+
tslib_1.__param(1, (0, common_1.BodyParams)()),
|
|
72
|
+
tslib_1.__metadata("design:type", Function),
|
|
73
|
+
tslib_1.__metadata("design:paramtypes", [Object, UserCreation]),
|
|
74
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
75
|
+
], SessionCtrl.prototype, "connect", null);
|
|
76
|
+
tslib_1.__decorate([
|
|
77
|
+
(0, common_1.Get)("/userinfo"),
|
|
78
|
+
(0, schema_1.Returns)(200, User),
|
|
79
|
+
tslib_1.__param(0, (0, common_1.Session)("user")),
|
|
80
|
+
tslib_1.__metadata("design:type", Function),
|
|
81
|
+
tslib_1.__metadata("design:paramtypes", [User]),
|
|
82
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
83
|
+
], SessionCtrl.prototype, "userInfo", null);
|
|
84
|
+
tslib_1.__decorate([
|
|
85
|
+
(0, common_1.Get)("/logout"),
|
|
86
|
+
(0, schema_1.Returns)(204),
|
|
87
|
+
tslib_1.__param(0, (0, common_1.Req)()),
|
|
88
|
+
tslib_1.__metadata("design:type", Function),
|
|
89
|
+
tslib_1.__metadata("design:paramtypes", [Object]),
|
|
90
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
91
|
+
], SessionCtrl.prototype, "logout", null);
|
|
92
|
+
SessionCtrl = tslib_1.__decorate([
|
|
93
|
+
(0, common_1.Controller)("/session")
|
|
94
|
+
], SessionCtrl);
|
|
95
|
+
exports.SessionCtrl = SessionCtrl;
|
|
96
|
+
function testSession(options) {
|
|
97
|
+
let request;
|
|
98
|
+
beforeAll(common_1.PlatformTest.bootstrap(options.server, {
|
|
99
|
+
...options,
|
|
100
|
+
mount: {
|
|
101
|
+
"/rest": [SessionCtrl]
|
|
102
|
+
}
|
|
103
|
+
}));
|
|
104
|
+
beforeAll(() => {
|
|
105
|
+
request = supertest_1.default.agent(common_1.PlatformTest.callback());
|
|
106
|
+
});
|
|
107
|
+
afterAll(common_1.PlatformTest.reset);
|
|
108
|
+
describe("Scenario1: POST /rest/session/connected", () => {
|
|
109
|
+
it("should keep connected user in session and destroy session", async () => {
|
|
110
|
+
await request.get("/rest/session/userinfo").expect(404);
|
|
111
|
+
await request.post("/rest/session/connect").send({
|
|
112
|
+
name: "name",
|
|
113
|
+
email: "test@test.fr",
|
|
114
|
+
password: "password1234"
|
|
115
|
+
});
|
|
116
|
+
// @ts-ignore
|
|
117
|
+
const response = await request.get("/rest/session/userinfo").expect(200);
|
|
118
|
+
expect(response.body).toEqual({
|
|
119
|
+
email: "test@test.fr",
|
|
120
|
+
name: "name"
|
|
121
|
+
});
|
|
122
|
+
await request.get("/rest/session/logout").expect(204);
|
|
123
|
+
await request.get("/rest/session/userinfo").expect(404);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
exports.testSession = testSession;
|
|
128
|
+
//# 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,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testStatics = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@tsed/common");
|
|
6
|
+
const core_1 = require("@tsed/core");
|
|
7
|
+
const di_1 = require("@tsed/di");
|
|
8
|
+
const platform_router_1 = require("@tsed/platform-router");
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const supertest_1 = tslib_1.__importDefault(require("supertest"));
|
|
11
|
+
let CustomStaticsCtrl = class CustomStaticsCtrl {
|
|
12
|
+
constructor(router, config) {
|
|
13
|
+
router.statics("/", {
|
|
14
|
+
root: String((0, core_1.getValue)(config, "statics./"))
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
CustomStaticsCtrl = tslib_1.__decorate([
|
|
19
|
+
(0, common_1.Controller)("/statics"),
|
|
20
|
+
tslib_1.__param(1, (0, di_1.Configuration)()),
|
|
21
|
+
tslib_1.__metadata("design:paramtypes", [platform_router_1.PlatformRouter, Object])
|
|
22
|
+
], CustomStaticsCtrl);
|
|
23
|
+
function testStatics(options) {
|
|
24
|
+
let request;
|
|
25
|
+
beforeEach(common_1.PlatformTest.bootstrap(options.server, {
|
|
26
|
+
...options,
|
|
27
|
+
mount: {
|
|
28
|
+
"/rest": [CustomStaticsCtrl]
|
|
29
|
+
}
|
|
30
|
+
}));
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
request = (0, supertest_1.default)(common_1.PlatformTest.callback());
|
|
33
|
+
});
|
|
34
|
+
afterEach(common_1.PlatformTest.reset);
|
|
35
|
+
it("should return index HTML (1)", async () => {
|
|
36
|
+
const response = await request.get("/").expect(200);
|
|
37
|
+
expect(response.text).toEqual((0, fs_1.readFileSync)(`${options.rootDir}/public/index.html`, { encoding: "utf8" }));
|
|
38
|
+
});
|
|
39
|
+
it("should return index HTML (2)", async () => {
|
|
40
|
+
const response = await request.get("/index.html").expect(200);
|
|
41
|
+
expect(response.text).toEqual((0, fs_1.readFileSync)(`${options.rootDir}/public/index.html`, { encoding: "utf8" }));
|
|
42
|
+
});
|
|
43
|
+
it("should return index HTML (3)", async () => {
|
|
44
|
+
const response = await request.get("/rest/statics/index.html").expect(200);
|
|
45
|
+
expect(response.text).toEqual((0, fs_1.readFileSync)(`${options.rootDir}/public/index.html`, { encoding: "utf8" }));
|
|
46
|
+
});
|
|
47
|
+
it("should return 404", async () => {
|
|
48
|
+
const response = await request.get("/index-te.html").expect(404);
|
|
49
|
+
expect(response.body).toEqual({
|
|
50
|
+
errors: [],
|
|
51
|
+
message: 'Resource "/index-te.html" not found',
|
|
52
|
+
name: "NOT_FOUND",
|
|
53
|
+
status: 404
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
exports.testStatics = testStatics;
|
|
58
|
+
//# sourceMappingURL=testStatics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testStatics.js","sourceRoot":"","sources":["../../../src/tests/testStatics.ts"],"names":[],"mappings":";;;;AAAA,yCAAsD;AACtD,qCAAoC;AACpC,iCAAuC;AACvC,2DAAqD;AACrD,2BAAgC;AAChC,kEAAkC;AAIlC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACrB,YAAY,MAAsB,EAAmB,MAAqB;QACxE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YAClB,IAAI,EAAE,MAAM,CAAC,IAAA,eAAQ,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AANK,iBAAiB;IADtB,IAAA,mBAAU,EAAC,UAAU,CAAC;IAEgB,mBAAA,IAAA,kBAAa,GAAE,CAAA;6CAAhC,gCAAc;GAD9B,iBAAiB,CAMtB;AAED,SAAgB,WAAW,CAAC,OAA+B;IACzD,IAAI,OAA4C,CAAC;IACjD,UAAU,CACR,qBAAY,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;QACrC,GAAG,OAAO;QACV,KAAK,EAAE;YACL,OAAO,EAAE,CAAC,iBAAiB,CAAC;SAC7B;KACF,CAAC,CACH,CAAC;IACF,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAA,mBAAS,EAAC,qBAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,qBAAY,CAAC,KAAK,CAAC,CAAC;IAE9B,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEpD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAA,iBAAY,EAAC,GAAG,OAAO,CAAC,OAAO,oBAAoB,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE9D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAA,iBAAY,EAAC,GAAG,OAAO,CAAC,OAAO,oBAAoB,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE3E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAA,iBAAY,EAAC,GAAG,OAAO,CAAC,OAAO,oBAAoB,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEjE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAC5B,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,qCAAqC;YAC9C,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AA3CD,kCA2CC","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"]}
|