Skip to content

Commit

Permalink
refactor: fix usage in cloud-stream
Browse files Browse the repository at this point in the history
  • Loading branch information
timonback committed Apr 26, 2024
1 parent e63bb77 commit f4f8431
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public NamedSchemaObject extractSchema(AsyncOperation operationData, Method meth
return payloadType.map((type) -> buildSchema(contentType, type)).orElseGet(this::useUnusedPayload);
}

public NamedSchemaObject buildSchema(Class<?> payloadType) {
private NamedSchemaObject buildSchema(Class<?> payloadType) {
String contentType = properties.getDocket().getDefaultContentType();

return buildSchema(contentType, payloadType);
Expand All @@ -59,6 +59,12 @@ private NamedSchemaObject buildSchema(String contentType, Class<?> payloadType)
return new NamedSchemaObject(componentsSchemaName, schema);
}

public String extractSchemaForName(Class<?> payloadType) {
String contentType = properties.getDocket().getDefaultContentType();

return this.componentsService.registerSchema(payloadType, contentType);
}

private NamedSchemaObject useUnusedPayload() {
this.componentsService.registerSchema(PAYLOAD_NOT_USED.schema());
return PAYLOAD_NOT_USED;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
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 io.github.springwolf.core.configuration.properties.SpringwolfConfigProperties;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
Expand All @@ -20,6 +21,7 @@
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
Expand All @@ -31,6 +33,12 @@ class PayloadServiceTest {
@Mock
private ComponentsService componentsService;

@Mock
private SpringwolfConfigProperties.ConfigDocket docket;

@Mock
private SpringwolfConfigProperties properties;

@InjectMocks
private PayloadService payloadService;

Expand Down Expand Up @@ -59,7 +67,7 @@ public void shouldUsePayloadFromAsyncOperationAnnotation() {
}

@Test
public void shouldExtractPayloadFromMethod() {
public void shouldExtractPayloadFromMethodWithAnnotation() {
// given
AsyncMessage asyncMessage = mock(AsyncMessage.class);
when(asyncMessage.contentType()).thenReturn("application/json");
Expand All @@ -85,6 +93,29 @@ public void shouldExtractPayloadFromMethod() {
assertThat(result.schema()).isEqualTo(schemaObject);
}

@Test
public void shouldExtractPayloadFromMethod() {
// given
when(properties.getDocket()).thenReturn(docket);
when(docket.getDefaultContentType()).thenReturn("application/json");

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(method);

// then
assertThat(result.name()).isEqualTo(schemaName);
assertThat(result.schema()).isEqualTo(schemaObject);
}

@Test
public void shouldReturnPayloadNotUsed() {
// given
Expand All @@ -107,4 +138,21 @@ public void shouldReturnPayloadNotUsed() {
assertThat(result.schema().getDescription()).isEqualTo("No payload specified");
verify(componentsService).registerSchema(PAYLOAD_NOT_USED.schema());
}

@Test
public void shouldExtractSchemaForInteger() {
// given
when(properties.getDocket()).thenReturn(docket);
when(docket.getDefaultContentType()).thenReturn("application/json");

String schemaName = "my-schema-name";
when(componentsService.registerSchema(any(), any())).thenReturn(schemaName);

// when
var result = payloadService.extractSchemaForName(Integer.class);

// then
assertThat(result).isEqualTo(schemaName);
verifyNoMoreInteractions(componentsService);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ private Map.Entry<String, ChannelObject> toChannelEntry(FunctionalChannelBeanDat

private ChannelObject buildChannel(FunctionalChannelBeanData beanData) {
Class<?> payloadType = beanData.payloadType();
String modelName = payloadService.buildSchema(payloadType).name();
String modelName = payloadService.extractSchemaForName(payloadType);
String headerModelName = componentsService.registerSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED);

var messagePayload = MessagePayload.of(MultiFormatSchema.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ private Map.Entry<String, Operation> toOperationEntry(FunctionalChannelBeanData

private Operation buildOperation(FunctionalChannelBeanData beanData, String channelName) {
Class<?> payloadType = beanData.payloadType();
String modelName = payloadService.buildSchema(payloadType).name();
String modelName = payloadService.extractSchemaForName(payloadType);
String headerModelName = componentsService.registerSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED);

MessageObject message = MessageObject.builder()
Expand Down

0 comments on commit f4f8431

Please sign in to comment.