Unverified Commit 561efe37 authored by 82marbag's avatar 82marbag Committed by GitHub
Browse files

Add headers in tests (#2329)



* Add headers in tests

...and fix RestJsonHttpWithEmptyBlobPayload

Signed-off-by: default avatarDaniele Ahmed <ahmeddan@amazon.de>

* style

Signed-off-by: default avatarDaniele Ahmed <ahmeddan@amazon.de>

* Remove tab

Signed-off-by: default avatarDaniele Ahmed <ahmeddan@amazon.de>

* ktlint

Signed-off-by: default avatarDaniele Ahmed <ahmeddan@amazon.de>

---------

Signed-off-by: default avatarDaniele Ahmed <ahmeddan@amazon.de>
parent 6b21e46e
Loading
Loading
Loading
Loading
+18 −4
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import software.amazon.smithy.model.shapes.StructureShape
import software.amazon.smithy.model.shapes.TimestampShape
import software.amazon.smithy.model.shapes.UnionShape
import software.amazon.smithy.model.traits.EnumTrait
import software.amazon.smithy.model.traits.HttpHeaderTrait
import software.amazon.smithy.model.traits.HttpPrefixHeadersTrait
import software.amazon.smithy.model.traits.StreamingTrait
import software.amazon.smithy.rust.codegen.core.rustlang.CargoDependency
@@ -52,6 +53,7 @@ import software.amazon.smithy.rust.codegen.core.smithy.isOptional
import software.amazon.smithy.rust.codegen.core.smithy.rustType
import software.amazon.smithy.rust.codegen.core.util.dq
import software.amazon.smithy.rust.codegen.core.util.expectMember
import software.amazon.smithy.rust.codegen.core.util.expectTrait
import software.amazon.smithy.rust.codegen.core.util.hasTrait
import software.amazon.smithy.rust.codegen.core.util.isTargetUnit
import software.amazon.smithy.rust.codegen.core.util.letIf
@@ -109,12 +111,14 @@ open class Instantiator(
        fun doesSetterTakeInOption(memberShape: MemberShape): Boolean
    }

    fun generate(shape: Shape, data: Node, ctx: Ctx = Ctx()) = writable { render(this, shape, data, ctx) }
    fun generate(shape: Shape, data: Node, headers: Map<String, String> = mapOf(), ctx: Ctx = Ctx()) = writable {
        render(this, shape, data, headers, ctx)
    }

    fun render(writer: RustWriter, shape: Shape, data: Node, ctx: Ctx = Ctx()) {
    fun render(writer: RustWriter, shape: Shape, data: Node, headers: Map<String, String> = mapOf(), ctx: Ctx = Ctx()) {
        when (shape) {
            // Compound Shapes
            is StructureShape -> renderStructure(writer, shape, data as ObjectNode, ctx)
            is StructureShape -> renderStructure(writer, shape, data as ObjectNode, headers, ctx)
            is UnionShape -> renderUnion(writer, shape, data as ObjectNode, ctx)

            // Collections
@@ -219,6 +223,7 @@ open class Instantiator(
                        this,
                        targetShape,
                        data,
                        mapOf(),
                        ctx.copy()
                            .letIf(memberShape.hasTrait<HttpPrefixHeadersTrait>()) {
                                it.copy(lowercaseMapKeys = true)
@@ -323,7 +328,7 @@ open class Instantiator(
     * MyStruct::builder().field_1("hello").field_2(5).build()
     * ```
     */
    private fun renderStructure(writer: RustWriter, shape: StructureShape, data: ObjectNode, ctx: Ctx) {
    private fun renderStructure(writer: RustWriter, shape: StructureShape, data: ObjectNode, headers: Map<String, String>, ctx: Ctx) {
        fun renderMemberHelper(memberShape: MemberShape, value: Node) {
            val setterName = builderKindBehavior.setterName(memberShape)
            writer.withBlock(".$setterName(", ")") {
@@ -342,6 +347,15 @@ open class Instantiator(
                }
        }

        if (data.isEmpty) {
            shape.allMembers.entries
                .filter { it.value.hasTrait<HttpHeaderTrait>() }
                .forEach { (_, value) ->
                    val trait = value.expectTrait<HttpHeaderTrait>().value
                    headers.get(trait)?.let { renderMemberHelper(value, Node.from(it)) }
                }
        }

        data.members.forEach { (key, value) ->
            val memberShape = shape.expectMember(key.value)
            renderMemberHelper(memberShape, value)
+1 −2
Original line number Diff line number Diff line
@@ -456,7 +456,7 @@ class ServerProtocolTestGenerator(

            // Construct expected request.
            withBlock("let expected = ", ";") {
                instantiator.render(this, inputShape, httpRequestTestCase.params)
                instantiator.render(this, inputShape, httpRequestTestCase.params, httpRequestTestCase.headers)
            }

            checkRequestParams(inputShape, this)
@@ -765,7 +765,6 @@ class ServerProtocolTestGenerator(
            // Pending resolution from the Smithy team, see https://github.com/awslabs/smithy/issues/1068.
            FailingTest(RestJson, "RestJsonHttpWithHeadersButNoPayload", TestType.Request),

            FailingTest(RestJson, "RestJsonHttpWithEmptyBlobPayload", TestType.Request),
            FailingTest(RestJson, "RestJsonHttpWithEmptyStructurePayload", TestType.Request),

            // Endpoint trait is not implemented yet, see https://github.com/awslabs/smithy-rs/issues/950.