From 9dee408d5603580d486a476180f30112f8fddf58 Mon Sep 17 00:00:00 2001 From: Ivan Kalachyev Date: Wed, 4 Dec 2024 19:24:10 +0200 Subject: [PATCH] fix: #565 test --- .../processor/AsynchronousProcessorTest.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/test/java/io/neonbee/endpoint/odatav4/internal/olingo/processor/AsynchronousProcessorTest.java diff --git a/src/test/java/io/neonbee/endpoint/odatav4/internal/olingo/processor/AsynchronousProcessorTest.java b/src/test/java/io/neonbee/endpoint/odatav4/internal/olingo/processor/AsynchronousProcessorTest.java new file mode 100644 index 00000000..f04f4101 --- /dev/null +++ b/src/test/java/io/neonbee/endpoint/odatav4/internal/olingo/processor/AsynchronousProcessorTest.java @@ -0,0 +1,76 @@ +package io.neonbee.endpoint.odatav4.internal.olingo.processor; + +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.mockito.Mockito.mock; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; +import java.util.List; +import java.util.stream.Stream; + +import org.apache.olingo.server.api.OData; +import org.apache.olingo.server.api.ServiceMetadata; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import io.vertx.core.Context; +import io.vertx.core.Future; +import io.vertx.core.Promise; +import io.vertx.core.Vertx; +import io.vertx.ext.web.RoutingContext; + +class AsynchronousProcessorTest { + + private Context context; + + @BeforeEach + void setUp() { + // Initialize Vertx instance and Context once + Vertx vertx = Vertx.vertx(); + context = vertx.getOrCreateContext(); + + // Mock dependencies + Promise processPromiseMock = Promise.promise(); + + // Set up a real processing stack in the context + Deque>> processingStack = new ArrayDeque<>(); + processingStack.add(new ArrayList<>()); + processingStack.peek().add(processPromiseMock.future()); // Add the future to the stack + + context.put("processingStack", processingStack); + + } + + // Parameterized test method to verify the processor initialization + @ParameterizedTest(name = "{index}: {0}") + @MethodSource("processors") + void testInitResetsSubProcessPromise(AsynchronousProcessor processor) { + context.runOnContext(v -> { + // Ensure getProcessPromise returns the same instance before and after init + Promise firstProcessPromise = processor.getProcessPromise(); + assertSame(firstProcessPromise, processor.getProcessPromise(), + "The two promises should be the same instance."); + + // Mock OData and ServiceMetadata + OData odataMock = mock(OData.class); + ServiceMetadata serviceMetadataMock = mock(ServiceMetadata.class); + + // Call init to reset subProcessPromise + processor.init(odataMock, serviceMetadataMock); + assertSame(firstProcessPromise, processor.getProcessPromise(), + "The two promises should be the same instance."); + }); + } + + // Method to provide processors for parameterized test + private static Stream processors() { + // Return a stream of different processor types for testing + return Stream.of( + new BatchProcessor(Vertx.vertx(), mock(RoutingContext.class), Promise.promise()), + new CountEntityCollectionProcessor(Vertx.vertx(), mock(RoutingContext.class), Promise.promise()), + new EntityProcessor(Vertx.vertx(), mock(RoutingContext.class), Promise.promise()), + new PrimitiveProcessor(Vertx.vertx(), mock(RoutingContext.class), Promise.promise())); + } +}