diff --git a/executor-pool/src/test/java/ch/unisg/executorpool/AddNewExecutorToExecutorPoolServiceTest.java b/executor-pool/src/test/java/ch/unisg/executorpool/AddNewExecutorToExecutorPoolServiceTest.java new file mode 100644 index 0000000..27f447b --- /dev/null +++ b/executor-pool/src/test/java/ch/unisg/executorpool/AddNewExecutorToExecutorPoolServiceTest.java @@ -0,0 +1,64 @@ +package ch.unisg.executorpool; + +import static org.mockito.Mockito.times; + +import java.net.URI; +import java.util.Optional; + +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.BDDMockito.then; + +import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolCommand; +import ch.unisg.executorpool.application.port.out.AddExecutorPort; +import ch.unisg.executorpool.application.port.out.ExecutorAddedEventPort; +import ch.unisg.executorpool.application.service.AddNewExecutorToExecutorPoolService; +import ch.unisg.executorpool.domain.ExecutorClass; +import ch.unisg.executorpool.domain.ExecutorPool; + +public class AddNewExecutorToExecutorPoolServiceTest { + + private final AddExecutorPort addExecutorPort = Mockito.mock(AddExecutorPort.class); + private final ExecutorAddedEventPort newExecutorAddedEventPort = Mockito.mock(ExecutorAddedEventPort.class); + private final AddNewExecutorToExecutorPoolService addNewExecutorToExecutorPoolService = new AddNewExecutorToExecutorPoolService( + newExecutorAddedEventPort, addExecutorPort); + + @Test + void addingSucceeds() { + + ExecutorClass newExecutor = givenAnExecutorWithTypeAndUri(new ExecutorClass.ExecutorTaskType("test-type"), + Optional.of(new ExecutorClass.ExecutorUri(URI.create("example.org")))); + + ExecutorPool executorPool = givenAnEmptyExecutorPool(ExecutorPool.getExecutorPool()); + + AddNewExecutorToExecutorPoolCommand addNewExecutorToExecutorPoolCommand = new AddNewExecutorToExecutorPoolCommand(newExecutor.getExecutorTaskType(), + Optional.ofNullable(newExecutor.getExecutorUri())); + + ExecutorClass addedExecutor = addNewExecutorToExecutorPoolService.addNewExecutorToExecutorPool(addNewExecutorToExecutorPoolCommand); + + assertThat(addedExecutor).isNotNull(); + assertThat(executorPool.getListOfExecutors().getValue()).hasSize(1); + + then(newExecutorAddedEventPort).should(times(1)).publishNewExecutorAddedEvent(any(NewExecutorAddedEvent.class)); + + } + + + private ExecutorPool givenAnEmptyExecutorPool(ExecutorPool executorPool) { + executorPool.getListOfExecutors().getValue().clear(); + return executorPool; + } + + private ExecutorClass givenAnExecutorWithTypeAndUri(ExecutorClass.ExecutorTaskType executorTaskType, + Optional executorUri) { + + ExecutorClass executor = Mockito.mock(ExecutorClass.class); + given(ExecutorClass.getExecutorTaskType()).willReturn(executorTaskType); + given(ExecutorClass.getExecutorUri()).willReturn(executorUri); + return executor; + } + + + +} diff --git a/executor-pool/src/test/java/ch/unisg/executorpool/AddNewExecutorToExecutorPoolSystemTest.java b/executor-pool/src/test/java/ch/unisg/executorpool/AddNewExecutorToExecutorPoolSystemTest.java new file mode 100644 index 0000000..1eba971 --- /dev/null +++ b/executor-pool/src/test/java/ch/unisg/executorpool/AddNewExecutorToExecutorPoolSystemTest.java @@ -0,0 +1,70 @@ +package ch.unisg.executorpool; + +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +//import static org.mockito.BDDMockito.then; + +import ch.unisg.executorpool.adapter.common.formats.ExecutorJsonRepresentation; +import ch.unisg.executorpool.application.port.out.AddExecutorPort; +import ch.unisg.executorpool.domain.ExecutorPool; +import ch.unisg.executorpool.domain.ExecutorClass; +import ch.unisg.executorpool.domain.ExecutorClass.ExecutorTaskType; +import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri; + + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class AddNewExecutorToExecutorPoolSystemTest { + + @Autowired + private TestRestTemplate restTemplate; + + @Autowired + private AddExecutorPort addExecutorPort; + + @Test + void AddNewExecutorToExecutorPool() throws JSONException { + + ExecutorTaskType executorTaskType = new ExecutorTaskType("system-integration-test-type"); + ExecutorUri executorUri = new ExecutorUri(java.net.URI.create("example.org")); + + ResponseEntity response = whenAddNewExecutorToEmptyPool(executorTaskType, executorUri); + + JSONObject responseJson = new JSONObject(response.getBody().toString()); + String respExecutorId = responseJson.getString("executorId"); + String respExecutorTaskType = responseJson.getString("executorTaskType"); + + then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED); + then(respExecutorId).isNotEmpty(); + then(respExecutorTaskType).isEqualTo(executorTaskType.getValue()); + then(ExecutorPool.getExecutorPool().getListOfExecutors().getValue()).hasSize(1); + + } + + private ResponseEntity whenAddNewExecutorToEmptyPool(ExecutorTaskType executorTaskType, + ExecutorUri executorUri) throws JSONException { + + ExecutorPool.getExecutorPool().getListOfExecutors().getValue().clear(); + + HttpHeaders headers = new HttpHeaders(); + headers.add("Content-Type", ExecutorJsonRepresentation.EXECUTOR_MEDIA_TYPE); + + String jsonPayLoad = new JSONObject().put("executorTaskType", executorTaskType.getValue()) + .put("executorUri", executorUri.getValue()).toString(); + + + HttpEntity request = new HttpEntity<>(jsonPayLoad,headers); + + return restTemplate.exchange("/executorpool/", HttpMethod.POST, request, Object.class); + + } + +} diff --git a/executor-pool/src/test/java/ch/unisg/executorpool/AddNewExecutorToExecutorPoolWebControllerTest.java b/executor-pool/src/test/java/ch/unisg/executorpool/AddNewExecutorToExecutorPoolWebControllerTest.java new file mode 100644 index 0000000..cc28edb --- /dev/null +++ b/executor-pool/src/test/java/ch/unisg/executorpool/AddNewExecutorToExecutorPoolWebControllerTest.java @@ -0,0 +1,69 @@ +package ch.unisg.executorpool; + +import java.util.Optional; + +import org.bson.json.JsonObject; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import static org.mockito.BDDMockito.eq; +import static org.mockito.BDDMockito.then; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MockMvc; + +import ch.unisg.executorpool.adapter.common.formats.ExecutorJsonRepresentation; +import ch.unisg.executorpool.adapter.in.web.AddNewExecutorToExecutorPoolWebController; +import ch.unisg.executorpool.adapter.out.persistence.mongodb.ExecutorRepository; +import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolCommand; +import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolUseCase; +import ch.unisg.executorpool.domain.ExecutorClass; +import ch.unisg.executorpool.domain.ExecutorClass.ExecutorTaskType; +import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri; +import net.minidev.json.JSONObject; + + +@WebMvcTest(controllers = AddNewExecutorToExecutorPoolWebController.class) +public class AddNewExecutorToExecutorPoolWebControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private AddNewExecutorToExecutorPoolUseCase addNewExecutorToExecutorPoolUseCase; + + @MockBean + ExecutorRepository executorRepository; + + @Test + void testAddNewExecutorToExecutorPool() throws Exception { + + String executorTaskType = "test-request-type"; + String executorUri = "example.org"; + + String jsonPayLoad = new JSONObject().put("executorTaskType", executorTaskType).put("executorUri", executorUri).toString(); + + ExecutorClass executorStub = ExecutorClass.createExecutorClass(new ExecutorUri(java.net.URI.create(executorUri)), + new ExecutorClass.ExecutorTaskType(executorTaskType)); + + AddNewExecutorToExecutorPoolCommand addNewExecutorToExecutorPoolCommand = new AddNewExecutorToExecutorPoolCommand( + new ExecutorTaskType(executorTaskType), Optional.of(new ExecutorUri(java.net.URI.create(executorUri)))); + + Mockito.when(addNewExecutorToExecutorPoolUseCase + .addNewExecutorToExecutorPool(addNewExecutorToExecutorPoolCommand)) + .thenReturn(executorStub); + + mockMvc.perform(post("/executorpool/") + .contentType(ExecutorJsonRepresentation.EXECUTOR_MEDIA_TYPE) + .content(jsonPayLoad)) + .andExpect(status().isCreated()); + + then(addNewExecutorToExecutorPoolUseCase).should() + .addNewExecutorToExecutorPool(eq(new AddNewExecutorToExecutorPoolCommand( + new ExecutorTaskType(executorTaskType), Optional.of(new ExecutorUri(java.net.URI.create(executorUri)))))); + + + } + + +} diff --git a/executor-pool/src/test/java/ch/unisg/executorpool/ExecutorPoolApplicationTests.java b/executor-pool/src/test/java/ch/unisg/executorpool/ExecutorPoolApplicationTests.java deleted file mode 100644 index 77e1032..0000000 --- a/executor-pool/src/test/java/ch/unisg/executorpool/ExecutorPoolApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package ch.unisg.executorpool; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class ExecutorPoolApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/executor-pool/src/test/java/ch/unisg/executorpool/ExecutorPoolTest.java b/executor-pool/src/test/java/ch/unisg/executorpool/ExecutorPoolTest.java new file mode 100644 index 0000000..d94fd6a --- /dev/null +++ b/executor-pool/src/test/java/ch/unisg/executorpool/ExecutorPoolTest.java @@ -0,0 +1,56 @@ +package ch.unisg.executorpool; + +import java.net.URI; +import java.util.Optional; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.*; + +import ch.unisg.executorpool.domain.ExecutorClass; +import ch.unisg.executorpool.domain.ExecutorPool; +import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri; +import ch.unisg.executorpool.domain.ExecutorClass.ExecutorTaskType; + +public class ExecutorPoolTest { + + private static final URI URI = null; + + @Test + void addNewExecutorToExecutorPoolSuccess() { + ExecutorPool executorPool = ExecutorPool.getExecutorPool(); + executorPool.getListOfExecutors().getValue().clear(); + ExecutorClass newExecutor = executorPool.addNewExecutor(new ExecutorUri(java.net.URI.create("example.com")) , + new ExecutorTaskType("test-type")); + + assertThat(newExecutor.getExecutorTaskType().getValue()).isEqualTo("test-type"); + assertThat(executorPool.getListOfExecutors().getValue()).hasSize(1); + assertThat(executorPool.getListOfExecutors().getValue().get(0)).isEqualTo(newExecutor); + } + + @Test + void retrieveExecutorSuccess() { + ExecutorPool executorPool = ExecutorPool.getExecutorPool(); + ExecutorClass newExecutor = executorPool.addNewExecutor(new ExecutorUri(java.net.URI.create("example.com")) , new ExecutorTaskType("test-type")); + + ExecutorClass retrievedExecutor = executorPool.getExecutorByUri(newExecutor.getExecutorUri()).get(); + + assertThat(retrievedExecutor).isEqualTo(newExecutor); + } + + @Test + void retrieveExecutorFailure() { + ExecutorPool executorPool = ExecutorPool.getExecutorPool(); + executorPool.addNewExecutor(new ExecutorUri(java.net.URI.create("example.com")) , new ExecutorTaskType("test-type")); + + ExecutorUri fakeUri = new ExecutorUri(java.net.URI.create("fake-Uri")); + + Optional retrievedExecutor = executorPool.getExecutorByUri(fakeUri); + + assertThat(retrievedExecutor.isPresent()).isFalse(); + } + + + + +}