From ade6db2e4e502112675fc6ceae8f633f0843066f Mon Sep 17 00:00:00 2001 From: Yogesh Ananda Nikam Date: Mon, 23 Dec 2024 11:47:30 +0530 Subject: [PATCH] Add a failing test to demonstrate the failure when the spec contains an example where the payload is an array instead of an object --- .../v3/_0_0/ArrayAsMessageAsyncAPI.kt | 89 +++++++++++++++++++ .../v3.0.0/message-of-array-type-asyncapi.yml | 39 ++++++++ 2 files changed, 128 insertions(+) create mode 100644 asyncapi-core/src/test/kotlin/com/asyncapi/examples/v3/_0_0/ArrayAsMessageAsyncAPI.kt create mode 100644 asyncapi-core/src/test/resources/examples/v3.0.0/message-of-array-type-asyncapi.yml diff --git a/asyncapi-core/src/test/kotlin/com/asyncapi/examples/v3/_0_0/ArrayAsMessageAsyncAPI.kt b/asyncapi-core/src/test/kotlin/com/asyncapi/examples/v3/_0_0/ArrayAsMessageAsyncAPI.kt new file mode 100644 index 00000000..e5c7902a --- /dev/null +++ b/asyncapi-core/src/test/kotlin/com/asyncapi/examples/v3/_0_0/ArrayAsMessageAsyncAPI.kt @@ -0,0 +1,89 @@ +package com.asyncapi.examples.v3._0_0 + +import com.asyncapi.schemas.asyncapi.Reference +import com.asyncapi.v3._0_0.model.channel.Channel +import com.asyncapi.v3._0_0.model.channel.message.Message +import com.asyncapi.v3._0_0.model.component.Components +import com.asyncapi.v3._0_0.model.info.Info +import com.asyncapi.v3._0_0.model.operation.Operation +import com.asyncapi.v3._0_0.model.operation.OperationAction +import com.asyncapi.schemas.asyncapi.AsyncAPISchema + +class ArrayAsMessageAsyncAPI: AbstractExampleValidationTest() { + + override fun specificationLocation(): String = "/examples/v3.0.0/message-of-array-type-asyncapi.yml" + + override fun expectedInfo(): Info { + return Info.builder() + .title("Message of array type example") + .version("1.0.0") + .build() + } + + override fun expectedServers(): Map = emptyMap() + + override fun expectedChannels(): Map { + return mapOf( + Pair("test", + Channel.builder() + .address("test") + .messages(mapOf( + Pair("testMessages", + Reference("#/components/messages/testMessages") + ) + )) + .build() + ) + ) + } + + override fun expectedOperations(): Map { + return mapOf( + Pair("onTestMsg", + Operation.builder() + .action(OperationAction.RECEIVE) + .channel(Reference("#/channels/test")) + .messages(listOf(Reference("#/channels/test/messages/testMessages"))) + .build() + ) + ) + } + + override fun expectedComponents(): Components { + return Components.builder() + .messages(mapOf( + Pair("testMessages", + Message.builder() + .payload( + AsyncAPISchema.builder() + .oneOf(listOf( + AsyncAPISchema.builder().ref("#/components/schemas/objectWithKey").build(), + AsyncAPISchema.builder().ref("#/components/schemas/objectWithKey2").build() + )) + .build() + ) + .build() + ) + )) + .schemas(mapOf( + Pair( + "objectWithKeyArray", AsyncAPISchema.builder() + .type("array") + .items( + AsyncAPISchema.builder() + .type("object") + .properties( + mapOf( + Pair("key", AsyncAPISchema.builder().type("string").build()) + ) + ) + .build() + ) + .build() + ) + )) + .build() + } + +} + diff --git a/asyncapi-core/src/test/resources/examples/v3.0.0/message-of-array-type-asyncapi.yml b/asyncapi-core/src/test/resources/examples/v3.0.0/message-of-array-type-asyncapi.yml new file mode 100644 index 00000000..03a4d532 --- /dev/null +++ b/asyncapi-core/src/test/resources/examples/v3.0.0/message-of-array-type-asyncapi.yml @@ -0,0 +1,39 @@ +asyncapi: 3.0.0 +info: + title: Message of array type example + version: 1.0.0 +channels: + test: + address: test + messages: + testMessages: + $ref: '#/components/messages/testMessages' +operations: + onTestMsg: + action: receive + channel: + $ref: '#/channels/test' + messages: + - $ref: '#/channels/test/messages/testMessages' +components: + messages: + testMessages: + payload: + $ref: '#/components/schemas/objectWithKeyArray' + examples: + - name: example1 + payload: + - key: "value1" + - key: "value2" + - name: example2 + payload: + - key: "value3" + schemas: + objectWithKeyArray: + type: array + items: + type: object + properties: + key: + type: string +