From fc240c4976d92adb53ded051c68100191fed1b72 Mon Sep 17 00:00:00 2001 From: Epari <xtetauer@fi.muni.cz> Date: Wed, 24 Apr 2024 12:31:44 +0200 Subject: [PATCH] Controller integration tests --- .../obs/controller/AnalyticsController.java | 3 +- .../AnalyticsControllerIntegrationTest.java | 86 ++++++++++++++++--- .../controller/AnalyticsControllerTest.java | 8 +- 3 files changed, 82 insertions(+), 15 deletions(-) diff --git a/analytics-service/src/main/java/cz/muni/fi/obs/controller/AnalyticsController.java b/analytics-service/src/main/java/cz/muni/fi/obs/controller/AnalyticsController.java index 9593590..1e2865e 100644 --- a/analytics-service/src/main/java/cz/muni/fi/obs/controller/AnalyticsController.java +++ b/analytics-service/src/main/java/cz/muni/fi/obs/controller/AnalyticsController.java @@ -13,9 +13,10 @@ import org.springframework.web.bind.annotation.*; @Slf4j @RestController -@RequestMapping("/api/v1/{accountNumber}") +@RequestMapping("/v1/{accountNumber}") public class AnalyticsController { private final AnalyticsFacade analyticsFacade; + @Autowired public AnalyticsController(AnalyticsFacade analyticsFacade) { this.analyticsFacade = analyticsFacade; diff --git a/analytics-service/src/test/java/cz/muni/fi/obs/integration/controller/AnalyticsControllerIntegrationTest.java b/analytics-service/src/test/java/cz/muni/fi/obs/integration/controller/AnalyticsControllerIntegrationTest.java index ec8b85b..2e1126c 100644 --- a/analytics-service/src/test/java/cz/muni/fi/obs/integration/controller/AnalyticsControllerIntegrationTest.java +++ b/analytics-service/src/test/java/cz/muni/fi/obs/integration/controller/AnalyticsControllerIntegrationTest.java @@ -1,11 +1,8 @@ package cz.muni.fi.obs.integration.controller; import cz.muni.fi.obs.Application; -import cz.muni.fi.obs.api.DailySummaryRequest; -import cz.muni.fi.obs.api.DailySummaryResult; -import cz.muni.fi.obs.data.AnalyticsRepository; +import cz.muni.fi.obs.api.*; import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.jdbc.Sql; @@ -13,18 +10,15 @@ import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.AFTER_TEST_METHOD; +import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.AFTER_TEST_CLASS; import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.BEFORE_TEST_CLASS; @Sql(value = {"/initialize_db.sql"}, executionPhase = BEFORE_TEST_CLASS) -@Sql(value = {"/drop_all.sql"}, executionPhase = AFTER_TEST_METHOD) +@Sql(value = {"/drop_all.sql"}, executionPhase = AFTER_TEST_CLASS) @ContextConfiguration(classes = {Application.class}) public class AnalyticsControllerIntegrationTest extends ControllerIntegrationTest { - private static final String ANALYTICS_CONTROLLER_PATH = "/api/analytics-service/api/v1/{account_number}/"; - - @Autowired - private AnalyticsRepository analyticsRepository; + private static final String ANALYTICS_CONTROLLER_PATH = "/api/analytics-service/v1/{account_number}/"; @Test void createDailySummary_ValidRequest_CreatesCorrectSummary() { @@ -44,5 +38,77 @@ public class AnalyticsControllerIntegrationTest extends ControllerIntegrationTes .as(DailySummaryResult.class); assertThat(dailySummaryResult.summaries()).hasSize(3); + + DailySummary firstSummary = dailySummaryResult.summaries().getFirst(); + + assertThat(firstSummary.date()).isEqualTo("2021-01-01"); + assertThat(firstSummary.totalWithdrawalTransactions()).isEqualTo(5); + assertThat(firstSummary.totalDepositTransactions()).isEqualTo(5); + assertThat(firstSummary.totalWithdrawn()).isEqualTo("20000.00"); + assertThat(firstSummary.totalDeposited()).isEqualTo("10000.00"); + assertThat(firstSummary.averageWithdrawn()).isEqualTo("4000.00"); + assertThat(firstSummary.averageDeposited()).isEqualTo("2000.00"); + assertThat(firstSummary.difference()).isEqualTo("-10000.00"); + } + + @Test + void createDailySummary_InvalidRequest_ReturnsBadRequest() { + UriComponents components = UriComponentsBuilder. + fromPath(ANALYTICS_CONTROLLER_PATH + "daily-summary") + .buildAndExpand("1234567890"); + + DailySummaryRequest request = new DailySummaryRequest(2021, 13); + + requestSpecification(components) + .accept(MediaType.APPLICATION_JSON_VALUE) + .body(request) + .post() + .then() + .statusCode(400); + } + + @Test + void createMonthlySummary_ValidRequest_CreatesCorrectSummary() { + UriComponents components = UriComponentsBuilder. + fromPath(ANALYTICS_CONTROLLER_PATH + "monthly-summary") + .buildAndExpand("1234567890"); + + MonthlySummaryRequest request = new MonthlySummaryRequest(2021, 1); + + MonthlySummaryResult monthlySummaryResult = requestSpecification(components) + .accept(MediaType.APPLICATION_JSON_VALUE) + .body(request) + .post() + .then() + .statusCode(200) + .extract() + .as(MonthlySummaryResult.class); + + MonthlySummary summary = monthlySummaryResult.summary(); + + assertThat(summary.month()).isEqualTo("JANUARY"); + assertThat(summary.totalWithdrawalTransactions()).isEqualTo(19); + assertThat(summary.totalDepositTransactions()).isEqualTo(17); + assertThat(summary.totalWithdrawn()).isEqualTo("48000.00"); + assertThat(summary.totalDeposited()).isEqualTo("32000.00"); + assertThat(summary.averageWithdrawn()).isEqualTo("2526.32"); + assertThat(summary.averageDeposited()).isEqualTo("1882.35"); + assertThat(summary.difference()).isEqualTo("-16000.00"); + } + + @Test + void createMonthlySummary_InvalidRequest_ReturnsBadRequest() { + UriComponents components = UriComponentsBuilder. + fromPath(ANALYTICS_CONTROLLER_PATH + "monthly-summary") + .buildAndExpand("1234567890"); + + MonthlySummaryRequest request = new MonthlySummaryRequest(2021, 13); + + requestSpecification(components) + .accept(MediaType.APPLICATION_JSON_VALUE) + .body(request) + .post() + .then() + .statusCode(400); } } \ No newline at end of file diff --git a/analytics-service/src/test/java/cz/muni/fi/obs/unit/controller/AnalyticsControllerTest.java b/analytics-service/src/test/java/cz/muni/fi/obs/unit/controller/AnalyticsControllerTest.java index 81be1ab..a223b56 100644 --- a/analytics-service/src/test/java/cz/muni/fi/obs/unit/controller/AnalyticsControllerTest.java +++ b/analytics-service/src/test/java/cz/muni/fi/obs/unit/controller/AnalyticsControllerTest.java @@ -45,7 +45,7 @@ class AnalyticsControllerTest { when(analyticsFacade.getDailySummary(any(String.class), any(Integer.class), any(Integer.class))) .thenReturn(new DailySummaryResult(LocalDate.now(), new ArrayList<>())); - mockMvc.perform(post("/api/v1/12345/daily-summary") + mockMvc.perform(post("/v1/12345/daily-summary") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(new DailySummaryRequest(2021, 1)))) .andExpect(status().isOk()); @@ -58,7 +58,7 @@ class AnalyticsControllerTest { when(analyticsFacade.getDailySummary(any(String.class), any(Integer.class), any(Integer.class))) .thenReturn(new DailySummaryResult(LocalDate.now(), new ArrayList<>())); - mockMvc.perform(post("/api/v1/12345/daily-summary") + mockMvc.perform(post("/v1/12345/daily-summary") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(new DailySummaryRequest(2021, -1)))) .andExpect(status().isBadRequest()); @@ -70,7 +70,7 @@ class AnalyticsControllerTest { when(analyticsFacade.getMonthlySummary(any(String.class), any(Integer.class), any(Integer.class))) .thenReturn(new MonthlySummaryResult(LocalDate.now(), null)); - mockMvc.perform(post("/api/v1/12345/monthly-summary") + mockMvc.perform(post("/v1/12345/monthly-summary") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(new MonthlySummaryRequest(2021, 1)))) .andExpect(status().isOk()); @@ -83,7 +83,7 @@ class AnalyticsControllerTest { when(analyticsFacade.getMonthlySummary(any(String.class), any(Integer.class), any(Integer.class))) .thenReturn(new MonthlySummaryResult(LocalDate.now(), null)); - mockMvc.perform(post("/api/v1/12345/monthly-summary") + mockMvc.perform(post("/v1/12345/monthly-summary") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(new MonthlySummaryRequest(-10, 1)))) .andExpect(status().isBadRequest()); -- GitLab