From 18dc5c07c045003386e74830939b9fb9e1a3a326 Mon Sep 17 00:00:00 2001 From: Timon Back Date: Fri, 12 Apr 2024 16:46:44 +0200 Subject: [PATCH] test(core): Add PayloadServiceTest --- .../common/payload/PayloadServiceTest.java | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadServiceTest.java diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadServiceTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadServiceTest.java new file mode 100644 index 000000000..e2a17ea13 --- /dev/null +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadServiceTest.java @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: Apache-2.0 +package io.github.springwolf.core.asyncapi.scanners.common.payload; + +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; +import io.github.springwolf.core.asyncapi.annotations.AsyncMessage; +import io.github.springwolf.core.asyncapi.annotations.AsyncOperation; +import io.github.springwolf.core.asyncapi.components.ComponentsService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Optional; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class PayloadServiceTest { + + @Mock + private PayloadClassExtractor payloadClassExtractor; + + @Mock + private ComponentsService componentsService; + + @InjectMocks + private PayloadService payloadService; + + @Test + public void shouldUsePayloadFromAsyncOperationAnnotation() { + // given + AsyncMessage asyncMessage = mock(AsyncMessage.class); + when(asyncMessage.contentType()).thenReturn("application/json"); + + AsyncOperation asyncOperation = mock(AsyncOperation.class); + doReturn(String.class).when(asyncOperation).payloadType(); + when(asyncOperation.message()).thenReturn(asyncMessage); + + String schemaName = "my-schema-name"; + when(componentsService.registerSchema(any(), any())).thenReturn(schemaName); + + SchemaObject schemaObject = SchemaObject.builder().build(); + when(componentsService.resolveSchema(schemaName)).thenReturn(schemaObject); + + // when + var result = payloadService.extractSchema(asyncOperation, null); + + // then + assertThat(result.getKey()).isEqualTo("java.lang.String"); + assertThat(result.getValue()).isEqualTo(schemaObject); + } + + @Test + public void shouldExtractPayloadFromMethod() { + // given + AsyncMessage asyncMessage = mock(AsyncMessage.class); + when(asyncMessage.contentType()).thenReturn("application/json"); + + AsyncOperation asyncOperation = mock(AsyncOperation.class); + doReturn(Object.class).when(asyncOperation).payloadType(); + when(asyncOperation.message()).thenReturn(asyncMessage); + + Method method = mock(Method.class); + when(payloadClassExtractor.extractFrom(method)).thenReturn(Optional.of(String.class)); + + String schemaName = "my-schema-name"; + when(componentsService.registerSchema(any(), any())).thenReturn(schemaName); + + SchemaObject schemaObject = SchemaObject.builder().build(); + when(componentsService.resolveSchema(schemaName)).thenReturn(schemaObject); + + // when + var result = payloadService.extractSchema(asyncOperation, method); + + // then + assertThat(result.getKey()).isEqualTo("java.lang.String"); + assertThat(result.getValue()).isEqualTo(schemaObject); + } + + @Test + public void shouldReturnPayloadNotUsed() { + // given + AsyncOperation asyncOperation = mock(AsyncOperation.class); + doReturn(Object.class).when(asyncOperation).payloadType(); + + Method method = mock(Method.class); + when(payloadClassExtractor.extractFrom(method)).thenReturn(Optional.empty()); + + when(componentsService.getSchemas()).thenReturn(new HashMap<>()); + + // when + var result = payloadService.extractSchema(asyncOperation, method); + + // then + assertThat(result.getKey()).isEqualTo("PayloadNotUsed"); + assertThat(result.getValue().getTitle()).isEqualTo("PayloadNotUsed"); + assertThat(result.getValue().getDescription()).isEqualTo("No payload specified"); + } +}