diff --git a/src/main/java/com/nirzara/paymenttracker/controller/PaymentController.test.java b/src/main/java/com/nirzara/paymenttracker/controller/PaymentController.test.java new file mode 100644 index 0000000..1de5f18 --- /dev/null +++ b/src/main/java/com/nirzara/paymenttracker/controller/PaymentController.test.java @@ -0,0 +1,51 @@ +package com.nirzara.paymenttracker.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nirzara.paymenttracker.model.Payment; +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 org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; + +@ExtendWith(MockitoExtension.class) +public class PaymentControllerTest { + + @Mock + private PaymentService paymentService; + + @InjectMocks + private PaymentController paymentController; + + private MockMvc mockMvc; + + private ObjectMapper objectMapper = new ObjectMapper(); + + @Test + public void testAddPayment_InvalidPayment() throws Exception { + // Arrange + Payment payment = new Payment(); + payment.setAmount(-10.0); + payment.setDescription("Invalid Payment"); + String json = objectMapper.writeValueAsString(payment); + + when(paymentService.addPayment(payment)).thenThrow(new IllegalArgumentException("Invalid payment amount")); + + mockMvc = MockMvcBuilders.standaloneSetup(paymentController).build(); + + // Act & Assert + mockMvc.perform(post("/payments") + .contentType(MediaType.APPLICATION_JSON) + .content(json)) + .andExpect(status().isBadRequest()); + } +} \ No newline at end of file