From 1e65e054b878eceffde4cdacef92b8d021e7f001 Mon Sep 17 00:00:00 2001 From: Sichan Yoo Date: Thu, 15 Aug 2024 10:22:37 -0700 Subject: [PATCH] Update endpoint param and endpoint middleware codegen tests & test smithy model. --- .../codegen/EndpointParamsGeneratorTests.kt | 18 +++++++- ...perationEndpointResolverMiddlewareTests.kt | 24 +++++++++- .../endpoints.smithy | 45 +++++++++++++++++++ 3 files changed, 85 insertions(+), 2 deletions(-) diff --git a/codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/EndpointParamsGeneratorTests.kt b/codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/EndpointParamsGeneratorTests.kt index 8a48315e210..a5510fe6ece 100644 --- a/codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/EndpointParamsGeneratorTests.kt +++ b/codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/EndpointParamsGeneratorTests.kt @@ -30,33 +30,45 @@ public struct EndpointParams { public let boolBaz: Swift.String? public let boolFoo: Swift.Bool public let endpoint: Swift.String? + public let flattenedArray: Swift.Array? + public let keysFunctionArray: Swift.Array? public let region: Swift.String public let stringArrayBar: Swift.Array? public let stringBar: Swift.String? public let stringBaz: Swift.String? public let stringFoo: Swift.String? + public let subfield: Swift.String? + public let wildcardProjectionArray: Swift.Array? public init( boolBar: Swift.Bool? = nil, boolBaz: Swift.String? = nil, boolFoo: Swift.Bool, endpoint: Swift.String? = nil, + flattenedArray: Swift.Array? = nil, + keysFunctionArray: Swift.Array? = nil, region: Swift.String, stringArrayBar: Swift.Array? = nil, stringBar: Swift.String? = nil, stringBaz: Swift.String? = nil, - stringFoo: Swift.String? = nil + stringFoo: Swift.String? = nil, + subfield: Swift.String? = nil, + wildcardProjectionArray: Swift.Array? = nil ) { self.boolBar = boolBar self.boolBaz = boolBaz self.boolFoo = boolFoo self.endpoint = endpoint + self.flattenedArray = flattenedArray + self.keysFunctionArray = keysFunctionArray self.region = region self.stringArrayBar = stringArrayBar self.stringBar = stringBar self.stringBaz = stringBaz self.stringFoo = stringFoo + self.subfield = subfield + self.wildcardProjectionArray = wildcardProjectionArray } } """ @@ -79,11 +91,15 @@ extension EndpointParams: ClientRuntime.EndpointsRequestContextProviding { try context.add(name: "boolBaz", value: self.boolBaz) try context.add(name: "boolFoo", value: self.boolFoo) try context.add(name: "endpoint", value: self.endpoint) + try context.add(name: "flattenedArray", value: self.flattenedArray) + try context.add(name: "keysFunctionArray", value: self.keysFunctionArray) try context.add(name: "region", value: self.region) try context.add(name: "stringArrayBar", value: self.stringArrayBar) try context.add(name: "stringBar", value: self.stringBar) try context.add(name: "stringBaz", value: self.stringBaz) try context.add(name: "stringFoo", value: self.stringFoo) + try context.add(name: "subfield", value: self.subfield) + try context.add(name: "wildcardProjectionArray", value: self.wildcardProjectionArray) return context } } diff --git a/codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/OperationEndpointResolverMiddlewareTests.kt b/codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/OperationEndpointResolverMiddlewareTests.kt index 8b31823e4c9..99203dfff99 100644 --- a/codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/OperationEndpointResolverMiddlewareTests.kt +++ b/codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/OperationEndpointResolverMiddlewareTests.kt @@ -25,10 +25,32 @@ class OperationEndpointResolverMiddlewareTests { middleware.render(context.ctx, writer, operation, "operationStack") var contents = writer.toString() val expected = """ +// OperationContextParam - JMESPath expression: "bar.objects[].content" +let bar = input.bar +let objects = bar?.objects +let projection: [Swift.String]? = objects?.compactMap { original in + let content = original.content + return content +} +// OperationContextParam - JMESPath expression: "keys(bar.mapping)" +let bar2 = input.bar +let mapping = bar2?.mapping +let keys = mapping?.keys.map { String(${'$'}0) } guard let region = config.region else { throw Smithy.ClientError.unknownError("Missing required parameter: region") } -let endpointParams = EndpointParams(boolBar: true, boolBaz: input.fuzz, boolFoo: config.boolFoo, endpoint: config.endpoint, region: region, stringArrayBar: ["five", "six", "seven"], stringBar: "some value", stringBaz: input.buzz, stringFoo: config.stringFoo) +// OperationContextParam - JMESPath expression: "bar.subfield.subfield2" +let bar3 = input.bar +let subfield = bar3?.subfield +let subfield2 = subfield?.subfield2 +// OperationContextParam - JMESPath expression: "bar.objects[*].id" +let bar4 = input.bar +let objects2 = bar4?.objects +let projection2: [Swift.String]? = objects2?.compactMap { original in + let id = original.id + return id +} +let endpointParams = EndpointParams(boolBar: true, boolBaz: input.fuzz, boolFoo: config.boolFoo, endpoint: config.endpoint, flattenedArray: projection, keysFunctionArray: keys, region: region, stringArrayBar: ["five", "six", "seven"], stringBar: "some value", stringBaz: input.buzz, stringFoo: config.stringFoo, subfield: subfield2, wildcardProjectionArray: projection2) builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: ${'$'}0) }, endpointParams: endpointParams)) """ contents.shouldContainOnlyOnce(expected) diff --git a/codegen/smithy-aws-swift-codegen/src/test/resources/software.amazon.smithy.aws.swift.codegen/endpoints.smithy b/codegen/smithy-aws-swift-codegen/src/test/resources/software.amazon.smithy.aws.swift.codegen/endpoints.smithy index d614fb58b74..c318142f52b 100644 --- a/codegen/smithy-aws-swift-codegen/src/test/resources/software.amazon.smithy.aws.swift.codegen/endpoints.smithy +++ b/codegen/smithy-aws-swift-codegen/src/test/resources/software.amazon.smithy.aws.swift.codegen/endpoints.smithy @@ -7,6 +7,7 @@ use aws.protocols#restJson1 use smithy.rules#clientContextParams use smithy.rules#staticContextParams use smithy.rules#contextParam +use smithy.rules#operationContextParams use smithy.rules#endpointRuleSet @restJson1 @@ -37,6 +38,10 @@ apply ExampleService @endpointRuleSet({ boolBaz: {type: "string"}, stringArrayBar: {type: "stringArray"}, region: {type: "string", builtIn: "AWS::Region", required: true}, + subfield: {type: "string"}, + wildcardProjectionArray: {type: "stringArray"}, + keysFunctionArray: {type: "stringArray"}, + flattenedArray: {type: "stringArray"} }, rules: [] }) @@ -47,6 +52,20 @@ apply ExampleService @endpointRuleSet({ boolBar: {value: true} stringArrayBar: {value: ["five", "six", "seven"]} ) +@operationContextParams( + subfield: { + path: "bar.subfield.subfield2" + } + wildcardProjectionArray: { + path: "bar.objects[*].id" + } + keysFunctionArray: { + path: "keys(bar.mapping)" + } + flattenedArray: { + path: "bar.objects[].content" + } +) @http(method: "POST", uri: "/endpointtest/getthing") operation GetThing { input: GetThingInput @@ -61,4 +80,30 @@ structure GetThingInput { @contextParam(name: "boolBaz") fuzz: String + + bar: NestedContainer +} + +structure NestedContainer { + subfield: NestedSubfield + objects: ObjectIdentifierList + mapping: ObjectIdentifierMap +} + +structure NestedSubfield { + subfield2: String } + +list ObjectIdentifierList { + member: ObjectIdentifier +} + +structure ObjectIdentifier { + id: String + content: String +} + +map ObjectIdentifierMap { + key: String + value: Integer +} \ No newline at end of file