Skip to content

Commit

Permalink
test(core): Add PayloadServiceTest
Browse files Browse the repository at this point in the history
  • Loading branch information
timonback committed Apr 12, 2024
1 parent fcde2d0 commit 18dc5c0
Showing 1 changed file with 106 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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");
}
}

0 comments on commit 18dc5c0

Please sign in to comment.