diff --git a/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/AddressRestController.java b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/AddressRestController.java new file mode 100644 index 0000000..b1c339d --- /dev/null +++ b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/AddressRestController.java @@ -0,0 +1,59 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.AddressService; +import com.dh7789dev.xpeditis.dto.app.Address; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +@RestController +@Validated +@RequestMapping(value = "${apiPrefix}/api/v1/addresses", + produces = APPLICATION_JSON_VALUE) +public class AddressRestController { + + private final AddressService service; + + public AddressRestController(AddressService service) { + this.service = service; + } + + @Operation(summary = "Create an address") + @PostMapping + public ResponseEntity
create(@RequestBody Address address) { + return ResponseEntity.status(HttpStatus.CREATED).body(service.create(address)); + } + + @Operation(summary = "Update an address") + @PutMapping("/{id}") + public ResponseEntity
update(@PathVariable Long id, @RequestBody Address address) { + return ResponseEntity.ok(service.update(id, address)); + } + + @Operation(summary = "Get an address by id") + @GetMapping("/{id}") + public ResponseEntity
getById(@PathVariable Long id) { + return ResponseEntity.ok(service.getById(id)); + } + + @Operation(summary = "List addresses") + @GetMapping + public ResponseEntity> list() { + return ResponseEntity.ok(service.list()); + } + + @Operation(summary = "Delete an address") + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable Long id) { + service.delete(id); + return ResponseEntity.noContent().build(); + } +} + + diff --git a/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/CompanyRestController.java b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/CompanyRestController.java new file mode 100644 index 0000000..f47b8de --- /dev/null +++ b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/CompanyRestController.java @@ -0,0 +1,59 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.CompanyService; +import com.dh7789dev.xpeditis.dto.app.Company; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +@RestController +@Validated +@RequestMapping(value = "${apiPrefix}/api/v1/companies", + produces = APPLICATION_JSON_VALUE) +public class CompanyRestController { + + private final CompanyService service; + + public CompanyRestController(CompanyService service) { + this.service = service; + } + + @Operation(summary = "Create a company") + @PostMapping + public ResponseEntity create(@RequestBody Company company) { + return ResponseEntity.status(HttpStatus.CREATED).body(service.create(company)); + } + + @Operation(summary = "Update a company") + @PutMapping("/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody Company company) { + return ResponseEntity.ok(service.update(id, company)); + } + + @Operation(summary = "Get a company by id") + @GetMapping("/{id}") + public ResponseEntity getById(@PathVariable Long id) { + return ResponseEntity.ok(service.getById(id)); + } + + @Operation(summary = "List companies") + @GetMapping + public ResponseEntity> list() { + return ResponseEntity.ok(service.list()); + } + + @Operation(summary = "Delete a company") + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable Long id) { + service.delete(id); + return ResponseEntity.noContent().build(); + } +} + + diff --git a/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/DocumentRestController.java b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/DocumentRestController.java new file mode 100644 index 0000000..859a957 --- /dev/null +++ b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/DocumentRestController.java @@ -0,0 +1,59 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.DocumentService; +import com.dh7789dev.xpeditis.dto.app.Document; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +@RestController +@Validated +@RequestMapping(value = "${apiPrefix}/api/v1/documents", + produces = APPLICATION_JSON_VALUE) +public class DocumentRestController { + + private final DocumentService service; + + public DocumentRestController(DocumentService service) { + this.service = service; + } + + @Operation(summary = "Create document") + @PostMapping + public ResponseEntity create(@RequestBody Document body) { + return ResponseEntity.status(HttpStatus.CREATED).body(service.create(body)); + } + + @Operation(summary = "Update document") + @PutMapping("/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody Document body) { + return ResponseEntity.ok(service.update(id, body)); + } + + @Operation(summary = "Get document by id") + @GetMapping("/{id}") + public ResponseEntity getById(@PathVariable Long id) { + return ResponseEntity.ok(service.getById(id)); + } + + @Operation(summary = "List documents") + @GetMapping + public ResponseEntity> list() { + return ResponseEntity.ok(service.list()); + } + + @Operation(summary = "Delete document") + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable Long id) { + service.delete(id); + return ResponseEntity.noContent().build(); + } +} + + diff --git a/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/ExportFolderRestController.java b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/ExportFolderRestController.java new file mode 100644 index 0000000..fded364 --- /dev/null +++ b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/ExportFolderRestController.java @@ -0,0 +1,59 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.ExportFolderService; +import com.dh7789dev.xpeditis.dto.app.ExportFolder; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +@RestController +@Validated +@RequestMapping(value = "${apiPrefix}/api/v1/export-folders", + produces = APPLICATION_JSON_VALUE) +public class ExportFolderRestController { + + private final ExportFolderService service; + + public ExportFolderRestController(ExportFolderService service) { + this.service = service; + } + + @Operation(summary = "Create export folder") + @PostMapping + public ResponseEntity create(@RequestBody ExportFolder body) { + return ResponseEntity.status(HttpStatus.CREATED).body(service.create(body)); + } + + @Operation(summary = "Update export folder") + @PutMapping("/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody ExportFolder body) { + return ResponseEntity.ok(service.update(id, body)); + } + + @Operation(summary = "Get export folder by id") + @GetMapping("/{id}") + public ResponseEntity getById(@PathVariable Long id) { + return ResponseEntity.ok(service.getById(id)); + } + + @Operation(summary = "List export folders") + @GetMapping + public ResponseEntity> list() { + return ResponseEntity.ok(service.list()); + } + + @Operation(summary = "Delete export folder") + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable Long id) { + service.delete(id); + return ResponseEntity.noContent().build(); + } +} + + diff --git a/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/LicenseRestController.java b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/LicenseRestController.java new file mode 100644 index 0000000..bef8b26 --- /dev/null +++ b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/LicenseRestController.java @@ -0,0 +1,59 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.LicenseService; +import com.dh7789dev.xpeditis.dto.app.License; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +@RestController +@Validated +@RequestMapping(value = "${apiPrefix}/api/v1/licenses", + produces = APPLICATION_JSON_VALUE) +public class LicenseRestController { + + private final LicenseService service; + + public LicenseRestController(LicenseService service) { + this.service = service; + } + + @Operation(summary = "Create license") + @PostMapping + public ResponseEntity create(@RequestBody License body) { + return ResponseEntity.status(HttpStatus.CREATED).body(service.create(body)); + } + + @Operation(summary = "Update license") + @PutMapping("/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody License body) { + return ResponseEntity.ok(service.update(id, body)); + } + + @Operation(summary = "Get license by id") + @GetMapping("/{id}") + public ResponseEntity getById(@PathVariable Long id) { + return ResponseEntity.ok(service.getById(id)); + } + + @Operation(summary = "List licenses") + @GetMapping + public ResponseEntity> list() { + return ResponseEntity.ok(service.list()); + } + + @Operation(summary = "Delete license") + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable Long id) { + service.delete(id); + return ResponseEntity.noContent().build(); + } +} + + diff --git a/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/QuoteDetailRestController.java b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/QuoteDetailRestController.java new file mode 100644 index 0000000..1603cbe --- /dev/null +++ b/application/src/main/java/com/dh7789dev/xpeditis/controller/api/v1/QuoteDetailRestController.java @@ -0,0 +1,59 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.QuoteDetailsService; +import com.dh7789dev.xpeditis.dto.app.QuoteDetail; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +@RestController +@Validated +@RequestMapping(value = "${apiPrefix}/api/v1/quote-details", + produces = APPLICATION_JSON_VALUE) +public class QuoteDetailRestController { + + private final QuoteDetailsService service; + + public QuoteDetailRestController(QuoteDetailsService service) { + this.service = service; + } + + @Operation(summary = "Create quote detail") + @PostMapping + public ResponseEntity create(@RequestBody QuoteDetail body) { + return ResponseEntity.status(HttpStatus.CREATED).body(service.create(body)); + } + + @Operation(summary = "Update quote detail") + @PutMapping("/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody QuoteDetail body) { + return ResponseEntity.ok(service.update(id, body)); + } + + @Operation(summary = "Get quote detail by id") + @GetMapping("/{id}") + public ResponseEntity getById(@PathVariable Long id) { + return ResponseEntity.ok(service.getById(id)); + } + + @Operation(summary = "List quote details") + @GetMapping + public ResponseEntity> list() { + return ResponseEntity.ok(service.list()); + } + + @Operation(summary = "Delete quote detail") + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable Long id) { + service.delete(id); + return ResponseEntity.noContent().build(); + } +} + + diff --git a/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/AddressRestControllerTest.java b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/AddressRestControllerTest.java new file mode 100644 index 0000000..929943a --- /dev/null +++ b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/AddressRestControllerTest.java @@ -0,0 +1,69 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.AddressService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +class AddressRestControllerTest { + + private MockMvc mockMvc; + private AddressService service; + + @BeforeEach + void setup() { + service = Mockito.mock(AddressService.class); + mockMvc = MockMvcBuilders.standaloneSetup(new AddressRestController(service)) + .addPlaceholderValue("apiPrefix", "") + .build(); + } + + @Test + void list_returnsOk() throws Exception { + when(service.list()).thenReturn(List.of()); + mockMvc.perform(get("/api/v1/addresses").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void create_returnsCreated() throws Exception { + when(service.create(org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(post("/api/v1/addresses") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isCreated()); + } + + @Test + void update_returnsOk() throws Exception { + when(service.update(Mockito.eq(1L), org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(put("/api/v1/addresses/1") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isOk()); + } + + @Test + void getById_returnsOk() throws Exception { + when(service.getById(1L)).thenReturn(null); + mockMvc.perform(get("/api/v1/addresses/1").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void delete_returnsNoContent() throws Exception { + mockMvc.perform(delete("/api/v1/addresses/1")) + .andExpect(status().isNoContent()); + } +} + + diff --git a/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/CompanyRestControllerTest.java b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/CompanyRestControllerTest.java new file mode 100644 index 0000000..12d3ccd --- /dev/null +++ b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/CompanyRestControllerTest.java @@ -0,0 +1,70 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.CompanyService; +import com.dh7789dev.xpeditis.dto.app.Company; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +class CompanyRestControllerTest { + + private MockMvc mockMvc; + private CompanyService service; + + @BeforeEach + void setup() { + service = Mockito.mock(CompanyService.class); + mockMvc = MockMvcBuilders.standaloneSetup(new CompanyRestController(service)) + .addPlaceholderValue("apiPrefix", "") + .build(); + } + + @Test + void list_returnsOk() throws Exception { + when(service.list()).thenReturn(List.of()); + mockMvc.perform(get("/api/v1/companies").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void create_returnsCreated() throws Exception { + when(service.create(org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(post("/api/v1/companies") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isCreated()); + } + + @Test + void update_returnsOk() throws Exception { + when(service.update(Mockito.eq(1L), org.mockito.ArgumentMatchers.any(Company.class))).thenReturn(null); + mockMvc.perform(put("/api/v1/companies/1") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isOk()); + } + + @Test + void getById_returnsOk() throws Exception { + when(service.getById(1L)).thenReturn(null); + mockMvc.perform(get("/api/v1/companies/1").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void delete_returnsNoContent() throws Exception { + mockMvc.perform(delete("/api/v1/companies/1")) + .andExpect(status().isNoContent()); + } +} + + diff --git a/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/DocumentRestControllerTest.java b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/DocumentRestControllerTest.java new file mode 100644 index 0000000..f0a9b33 --- /dev/null +++ b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/DocumentRestControllerTest.java @@ -0,0 +1,69 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.DocumentService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +class DocumentRestControllerTest { + + private MockMvc mockMvc; + private DocumentService service; + + @BeforeEach + void setup() { + service = Mockito.mock(DocumentService.class); + mockMvc = MockMvcBuilders.standaloneSetup(new DocumentRestController(service)) + .addPlaceholderValue("apiPrefix", "") + .build(); + } + + @Test + void list_returnsOk() throws Exception { + when(service.list()).thenReturn(List.of()); + mockMvc.perform(get("/api/v1/documents").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void create_returnsCreated() throws Exception { + when(service.create(org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(post("/api/v1/documents") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isCreated()); + } + + @Test + void update_returnsOk() throws Exception { + when(service.update(Mockito.eq(1L), org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(put("/api/v1/documents/1") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isOk()); + } + + @Test + void getById_returnsOk() throws Exception { + when(service.getById(1L)).thenReturn(null); + mockMvc.perform(get("/api/v1/documents/1").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void delete_returnsNoContent() throws Exception { + mockMvc.perform(delete("/api/v1/documents/1")) + .andExpect(status().isNoContent()); + } +} + + diff --git a/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/ExportFolderRestControllerTest.java b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/ExportFolderRestControllerTest.java new file mode 100644 index 0000000..10c7c7f --- /dev/null +++ b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/ExportFolderRestControllerTest.java @@ -0,0 +1,69 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.ExportFolderService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +class ExportFolderRestControllerTest { + + private MockMvc mockMvc; + private ExportFolderService service; + + @BeforeEach + void setup() { + service = Mockito.mock(ExportFolderService.class); + mockMvc = MockMvcBuilders.standaloneSetup(new ExportFolderRestController(service)) + .addPlaceholderValue("apiPrefix", "") + .build(); + } + + @Test + void list_returnsOk() throws Exception { + when(service.list()).thenReturn(List.of()); + mockMvc.perform(get("/api/v1/export-folders").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void create_returnsCreated() throws Exception { + when(service.create(org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(post("/api/v1/export-folders") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isCreated()); + } + + @Test + void update_returnsOk() throws Exception { + when(service.update(Mockito.eq(1L), org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(put("/api/v1/export-folders/1") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isOk()); + } + + @Test + void getById_returnsOk() throws Exception { + when(service.getById(1L)).thenReturn(null); + mockMvc.perform(get("/api/v1/export-folders/1").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void delete_returnsNoContent() throws Exception { + mockMvc.perform(delete("/api/v1/export-folders/1")) + .andExpect(status().isNoContent()); + } +} + + diff --git a/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/LicenseRestControllerTest.java b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/LicenseRestControllerTest.java new file mode 100644 index 0000000..d83920c --- /dev/null +++ b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/LicenseRestControllerTest.java @@ -0,0 +1,69 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.LicenseService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +class LicenseRestControllerTest { + + private MockMvc mockMvc; + private LicenseService service; + + @BeforeEach + void setup() { + service = Mockito.mock(LicenseService.class); + mockMvc = MockMvcBuilders.standaloneSetup(new LicenseRestController(service)) + .addPlaceholderValue("apiPrefix", "") + .build(); + } + + @Test + void list_returnsOk() throws Exception { + when(service.list()).thenReturn(List.of()); + mockMvc.perform(get("/api/v1/licenses").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void create_returnsCreated() throws Exception { + when(service.create(org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(post("/api/v1/licenses") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isCreated()); + } + + @Test + void update_returnsOk() throws Exception { + when(service.update(Mockito.eq(1L), org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(put("/api/v1/licenses/1") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isOk()); + } + + @Test + void getById_returnsOk() throws Exception { + when(service.getById(1L)).thenReturn(null); + mockMvc.perform(get("/api/v1/licenses/1").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void delete_returnsNoContent() throws Exception { + mockMvc.perform(delete("/api/v1/licenses/1")) + .andExpect(status().isNoContent()); + } +} + + diff --git a/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/QuoteDetailRestControllerTest.java b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/QuoteDetailRestControllerTest.java new file mode 100644 index 0000000..2d39107 --- /dev/null +++ b/application/src/test/java/com/dh7789dev/xpeditis/controller/api/v1/QuoteDetailRestControllerTest.java @@ -0,0 +1,69 @@ +package com.dh7789dev.xpeditis.controller.api.v1; + +import com.dh7789dev.xpeditis.QuoteDetailsService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +class QuoteDetailRestControllerTest { + + private MockMvc mockMvc; + private QuoteDetailsService service; + + @BeforeEach + void setup() { + service = Mockito.mock(QuoteDetailsService.class); + mockMvc = MockMvcBuilders.standaloneSetup(new QuoteDetailRestController(service)) + .addPlaceholderValue("apiPrefix", "") + .build(); + } + + @Test + void list_returnsOk() throws Exception { + when(service.list()).thenReturn(List.of()); + mockMvc.perform(get("/api/v1/quote-details").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void create_returnsCreated() throws Exception { + when(service.create(org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(post("/api/v1/quote-details") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isCreated()); + } + + @Test + void update_returnsOk() throws Exception { + when(service.update(Mockito.eq(1L), org.mockito.ArgumentMatchers.any())).thenReturn(null); + mockMvc.perform(put("/api/v1/quote-details/1") + .contentType(MediaType.APPLICATION_JSON) + .content("{}")) + .andExpect(status().isOk()); + } + + @Test + void getById_returnsOk() throws Exception { + when(service.getById(1L)).thenReturn(null); + mockMvc.perform(get("/api/v1/quote-details/1").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void delete_returnsNoContent() throws Exception { + mockMvc.perform(delete("/api/v1/quote-details/1")) + .andExpect(status().isNoContent()); + } +} + + diff --git a/domain/api/src/main/java/com/dh7789dev/xpeditis/AddressService.java b/domain/api/src/main/java/com/dh7789dev/xpeditis/AddressService.java index 3897e41..4ae7e90 100644 --- a/domain/api/src/main/java/com/dh7789dev/xpeditis/AddressService.java +++ b/domain/api/src/main/java/com/dh7789dev/xpeditis/AddressService.java @@ -1,5 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.Address; + +import java.util.List; public interface AddressService { + Address create(Address address); + + Address update(Long id, Address address); + + Address getById(Long id); + + List
list(); + + void delete(Long id); } diff --git a/domain/api/src/main/java/com/dh7789dev/xpeditis/CompanyService.java b/domain/api/src/main/java/com/dh7789dev/xpeditis/CompanyService.java index d0a00d4..ccb5e17 100644 --- a/domain/api/src/main/java/com/dh7789dev/xpeditis/CompanyService.java +++ b/domain/api/src/main/java/com/dh7789dev/xpeditis/CompanyService.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.Company; + +import java.util.List; + public interface CompanyService { + Company create(Company company); + + Company update(Long id, Company company); + + Company getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/domain/api/src/main/java/com/dh7789dev/xpeditis/DocumentService.java b/domain/api/src/main/java/com/dh7789dev/xpeditis/DocumentService.java index 61f4f18..0f997bf 100644 --- a/domain/api/src/main/java/com/dh7789dev/xpeditis/DocumentService.java +++ b/domain/api/src/main/java/com/dh7789dev/xpeditis/DocumentService.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.Document; + +import java.util.List; + public interface DocumentService { + Document create(Document document); + + Document update(Long id, Document document); + + Document getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/domain/api/src/main/java/com/dh7789dev/xpeditis/ExportFolderService.java b/domain/api/src/main/java/com/dh7789dev/xpeditis/ExportFolderService.java index b9c5a95..6bee77f 100644 --- a/domain/api/src/main/java/com/dh7789dev/xpeditis/ExportFolderService.java +++ b/domain/api/src/main/java/com/dh7789dev/xpeditis/ExportFolderService.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.ExportFolder; + +import java.util.List; + public interface ExportFolderService { + ExportFolder create(ExportFolder exportFolder); + + ExportFolder update(Long id, ExportFolder exportFolder); + + ExportFolder getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/domain/api/src/main/java/com/dh7789dev/xpeditis/LicenseService.java b/domain/api/src/main/java/com/dh7789dev/xpeditis/LicenseService.java index 7914daa..a19c452 100644 --- a/domain/api/src/main/java/com/dh7789dev/xpeditis/LicenseService.java +++ b/domain/api/src/main/java/com/dh7789dev/xpeditis/LicenseService.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.License; + +import java.util.List; + public interface LicenseService { + License create(License license); + + License update(Long id, License license); + + License getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/domain/api/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsService.java b/domain/api/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsService.java index 17ade19..f37f9ac 100644 --- a/domain/api/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsService.java +++ b/domain/api/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsService.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.QuoteDetail; + +import java.util.List; + public interface QuoteDetailsService { + QuoteDetail create(QuoteDetail quoteDetail); + + QuoteDetail update(Long id, QuoteDetail quoteDetail); + + QuoteDetail getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/domain/service/src/main/java/com/dh7789dev/xpeditis/AddressServiceImpl.java b/domain/service/src/main/java/com/dh7789dev/xpeditis/AddressServiceImpl.java index dd18b14..815f981 100644 --- a/domain/service/src/main/java/com/dh7789dev/xpeditis/AddressServiceImpl.java +++ b/domain/service/src/main/java/com/dh7789dev/xpeditis/AddressServiceImpl.java @@ -1,7 +1,41 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.Address; import org.springframework.stereotype.Service; +import java.util.List; + @Service -public class AddressServiceImpl implements AddressService{ +public class AddressServiceImpl implements AddressService { + + private final AddressRepository addressRepository; + + public AddressServiceImpl(AddressRepository addressRepository) { + this.addressRepository = addressRepository; + } + + @Override + public Address create(Address address) { + return addressRepository.create(address); + } + + @Override + public Address update(Long id, Address address) { + return addressRepository.update(id, address); + } + + @Override + public Address getById(Long id) { + return addressRepository.getById(id); + } + + @Override + public List
list() { + return addressRepository.list(); + } + + @Override + public void delete(Long id) { + addressRepository.delete(id); + } } diff --git a/domain/service/src/main/java/com/dh7789dev/xpeditis/CompanyServiceImpl.java b/domain/service/src/main/java/com/dh7789dev/xpeditis/CompanyServiceImpl.java index 43e1c65..98707bb 100644 --- a/domain/service/src/main/java/com/dh7789dev/xpeditis/CompanyServiceImpl.java +++ b/domain/service/src/main/java/com/dh7789dev/xpeditis/CompanyServiceImpl.java @@ -1,7 +1,41 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.Company; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class CompanyServiceImpl implements CompanyService { + + private final CompanyRepository companyRepository; + + public CompanyServiceImpl(CompanyRepository companyRepository) { + this.companyRepository = companyRepository; + } + + @Override + public Company create(Company company) { + return companyRepository.create(company); + } + + @Override + public Company update(Long id, Company company) { + return companyRepository.update(id, company); + } + + @Override + public Company getById(Long id) { + return companyRepository.getById(id); + } + + @Override + public List list() { + return companyRepository.list(); + } + + @Override + public void delete(Long id) { + companyRepository.delete(id); + } } diff --git a/domain/service/src/main/java/com/dh7789dev/xpeditis/DocumentServiceImpl.java b/domain/service/src/main/java/com/dh7789dev/xpeditis/DocumentServiceImpl.java index eff92ad..06f6ada 100644 --- a/domain/service/src/main/java/com/dh7789dev/xpeditis/DocumentServiceImpl.java +++ b/domain/service/src/main/java/com/dh7789dev/xpeditis/DocumentServiceImpl.java @@ -1,7 +1,40 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.Document; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class DocumentServiceImpl implements DocumentService { + private final DocumentRepository repository; + + public DocumentServiceImpl(DocumentRepository repository) { + this.repository = repository; + } + + @Override + public Document create(Document document) { + return repository.create(document); + } + + @Override + public Document update(Long id, Document document) { + return repository.update(id, document); + } + + @Override + public Document getById(Long id) { + return repository.getById(id); + } + + @Override + public List list() { + return repository.list(); + } + + @Override + public void delete(Long id) { + repository.delete(id); + } } diff --git a/domain/service/src/main/java/com/dh7789dev/xpeditis/ExportFolderServiceImpl.java b/domain/service/src/main/java/com/dh7789dev/xpeditis/ExportFolderServiceImpl.java index e233e72..98d2415 100644 --- a/domain/service/src/main/java/com/dh7789dev/xpeditis/ExportFolderServiceImpl.java +++ b/domain/service/src/main/java/com/dh7789dev/xpeditis/ExportFolderServiceImpl.java @@ -1,7 +1,40 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.ExportFolder; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class ExportFolderServiceImpl implements ExportFolderService { + private final ExportFolderRepository repository; + + public ExportFolderServiceImpl(ExportFolderRepository repository) { + this.repository = repository; + } + + @Override + public ExportFolder create(ExportFolder exportFolder) { + return repository.create(exportFolder); + } + + @Override + public ExportFolder update(Long id, ExportFolder exportFolder) { + return repository.update(id, exportFolder); + } + + @Override + public ExportFolder getById(Long id) { + return repository.getById(id); + } + + @Override + public List list() { + return repository.list(); + } + + @Override + public void delete(Long id) { + repository.delete(id); + } } diff --git a/domain/service/src/main/java/com/dh7789dev/xpeditis/LicenseServiceImpl.java b/domain/service/src/main/java/com/dh7789dev/xpeditis/LicenseServiceImpl.java index 91da424..af05265 100644 --- a/domain/service/src/main/java/com/dh7789dev/xpeditis/LicenseServiceImpl.java +++ b/domain/service/src/main/java/com/dh7789dev/xpeditis/LicenseServiceImpl.java @@ -1,7 +1,40 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.License; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class LicenseServiceImpl implements LicenseService { + private final LicenseRepository repository; + + public LicenseServiceImpl(LicenseRepository repository) { + this.repository = repository; + } + + @Override + public License create(License license) { + return repository.create(license); + } + + @Override + public License update(Long id, License license) { + return repository.update(id, license); + } + + @Override + public License getById(Long id) { + return repository.getById(id); + } + + @Override + public List list() { + return repository.list(); + } + + @Override + public void delete(Long id) { + repository.delete(id); + } } diff --git a/domain/service/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsServiceImpl.java b/domain/service/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsServiceImpl.java index abd0964..e082d7a 100644 --- a/domain/service/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsServiceImpl.java +++ b/domain/service/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsServiceImpl.java @@ -1,7 +1,40 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.QuoteDetail; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class QuoteDetailsServiceImpl implements QuoteDetailsService { + private final QuoteDetailsRepository repository; + + public QuoteDetailsServiceImpl(QuoteDetailsRepository repository) { + this.repository = repository; + } + + @Override + public QuoteDetail create(QuoteDetail quoteDetail) { + return repository.create(quoteDetail); + } + + @Override + public QuoteDetail update(Long id, QuoteDetail quoteDetail) { + return repository.update(id, quoteDetail); + } + + @Override + public QuoteDetail getById(Long id) { + return repository.getById(id); + } + + @Override + public List list() { + return repository.list(); + } + + @Override + public void delete(Long id) { + repository.delete(id); + } } diff --git a/domain/spi/src/main/java/com/dh7789dev/xpeditis/AddressRepository.java b/domain/spi/src/main/java/com/dh7789dev/xpeditis/AddressRepository.java index 8de2b87..b354338 100644 --- a/domain/spi/src/main/java/com/dh7789dev/xpeditis/AddressRepository.java +++ b/domain/spi/src/main/java/com/dh7789dev/xpeditis/AddressRepository.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.Address; + +import java.util.List; + public interface AddressRepository { + Address create(Address address); + + Address update(Long id, Address address); + + Address getById(Long id); + + List
list(); + + void delete(Long id); } diff --git a/domain/spi/src/main/java/com/dh7789dev/xpeditis/CompanyRepository.java b/domain/spi/src/main/java/com/dh7789dev/xpeditis/CompanyRepository.java index b619576..fe9fb2a 100644 --- a/domain/spi/src/main/java/com/dh7789dev/xpeditis/CompanyRepository.java +++ b/domain/spi/src/main/java/com/dh7789dev/xpeditis/CompanyRepository.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.Company; + +import java.util.List; + public interface CompanyRepository { + Company create(Company company); + + Company update(Long id, Company company); + + Company getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/domain/spi/src/main/java/com/dh7789dev/xpeditis/DocumentRepository.java b/domain/spi/src/main/java/com/dh7789dev/xpeditis/DocumentRepository.java index 9fb1638..5fb607f 100644 --- a/domain/spi/src/main/java/com/dh7789dev/xpeditis/DocumentRepository.java +++ b/domain/spi/src/main/java/com/dh7789dev/xpeditis/DocumentRepository.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.Document; + +import java.util.List; + public interface DocumentRepository { + Document create(Document document); + + Document update(Long id, Document document); + + Document getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/domain/spi/src/main/java/com/dh7789dev/xpeditis/ExportFolderRepository.java b/domain/spi/src/main/java/com/dh7789dev/xpeditis/ExportFolderRepository.java index 0cd4e22..8bcefd1 100644 --- a/domain/spi/src/main/java/com/dh7789dev/xpeditis/ExportFolderRepository.java +++ b/domain/spi/src/main/java/com/dh7789dev/xpeditis/ExportFolderRepository.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.ExportFolder; + +import java.util.List; + public interface ExportFolderRepository { + ExportFolder create(ExportFolder exportFolder); + + ExportFolder update(Long id, ExportFolder exportFolder); + + ExportFolder getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/domain/spi/src/main/java/com/dh7789dev/xpeditis/LicenseRepository.java b/domain/spi/src/main/java/com/dh7789dev/xpeditis/LicenseRepository.java index 4b3ec59..49a0d71 100644 --- a/domain/spi/src/main/java/com/dh7789dev/xpeditis/LicenseRepository.java +++ b/domain/spi/src/main/java/com/dh7789dev/xpeditis/LicenseRepository.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.License; + +import java.util.List; + public interface LicenseRepository { + License create(License license); + + License update(Long id, License license); + + License getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/domain/spi/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsRepository.java b/domain/spi/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsRepository.java index 2ebe9d9..5db788a 100644 --- a/domain/spi/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsRepository.java +++ b/domain/spi/src/main/java/com/dh7789dev/xpeditis/QuoteDetailsRepository.java @@ -1,4 +1,17 @@ package com.dh7789dev.xpeditis; +import com.dh7789dev.xpeditis.dto.app.QuoteDetail; + +import java.util.List; + public interface QuoteDetailsRepository { + QuoteDetail create(QuoteDetail quoteDetail); + + QuoteDetail update(Long id, QuoteDetail quoteDetail); + + QuoteDetail getById(Long id); + + List list(); + + void delete(Long id); } diff --git a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/AddressJpaRepository.java b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/AddressJpaRepository.java index 61e5046..fa7703d 100644 --- a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/AddressJpaRepository.java +++ b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/AddressJpaRepository.java @@ -1,10 +1,54 @@ package com.dh7789dev.xpeditis.repository; import com.dh7789dev.xpeditis.AddressRepository; +import com.dh7789dev.xpeditis.dao.AddressDao; +import com.dh7789dev.xpeditis.dto.app.Address; +import com.dh7789dev.xpeditis.entity.AddressEntity; +import com.dh7789dev.xpeditis.mapper.AddressMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; @Slf4j @Repository public class AddressJpaRepository implements AddressRepository { + private final AddressDao addressDao; + private final AddressMapper addressMapper; + + public AddressJpaRepository(AddressDao addressDao, AddressMapper addressMapper) { + this.addressDao = addressDao; + this.addressMapper = addressMapper; + } + + @Override + public Address create(Address address) { + AddressEntity entity = addressMapper.addressToAddressEntity(address); + AddressEntity saved = addressDao.save(entity); + return addressMapper.addressEntityToAddress(saved); + } + + @Override + public Address update(Long id, Address address) { + AddressEntity entity = addressDao.findById(id).orElseThrow(); + if (address.getCompanyName() != null) entity.setCompanyName(address.getCompanyName()); + if (address.getAddress() != null) entity.setAddress(address.getAddress()); + if (address.getPostalCode() != null) entity.setPostalCode(address.getPostalCode()); + if (address.getCountry() != null) entity.setCountry(address.getCountry()); + AddressEntity saved = addressDao.save(entity); + return addressMapper.addressEntityToAddress(saved); + } + + @Override + public Address getById(Long id) { + return addressDao.findById(id).map(addressMapper::addressEntityToAddress).orElseThrow(); + } + + @Override + public java.util.List
list() { + return addressDao.findAll().stream().map(addressMapper::addressEntityToAddress).toList(); + } + + @Override + public void delete(Long id) { + addressDao.deleteById(id); + } } diff --git a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/CompanyJpaRepository.java b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/CompanyJpaRepository.java index 664d5bb..4bfa162 100644 --- a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/CompanyJpaRepository.java +++ b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/CompanyJpaRepository.java @@ -1,10 +1,54 @@ package com.dh7789dev.xpeditis.repository; import com.dh7789dev.xpeditis.CompanyRepository; -import lombok.extern.slf4j.Slf4j; +import com.dh7789dev.xpeditis.dao.CompanyDao; +import com.dh7789dev.xpeditis.dto.app.Company; +import com.dh7789dev.xpeditis.entity.CompanyEntity; +import com.dh7789dev.xpeditis.mapper.CompanyMapper; import org.springframework.stereotype.Repository; -@Slf4j +import java.util.List; + @Repository public class CompanyJpaRepository implements CompanyRepository { + + private final CompanyDao companyDao; + private final CompanyMapper companyMapper; + + public CompanyJpaRepository(CompanyDao companyDao, CompanyMapper companyMapper) { + this.companyDao = companyDao; + this.companyMapper = companyMapper; + } + + @Override + public Company create(Company company) { + CompanyEntity entity = companyMapper.companyToCompanyEntity(company); + CompanyEntity saved = companyDao.save(entity); + return companyMapper.companyEntityToCompany(saved); + } + + @Override + public Company update(Long id, Company company) { + CompanyEntity entity = companyDao.findById(id).orElseThrow(); + if (company.getName() != null) entity.setName(company.getName()); + if (company.getCountry() != null) entity.setCountry(company.getCountry()); + CompanyEntity saved = companyDao.save(entity); + return companyMapper.companyEntityToCompany(saved); + } + + @Override + public Company getById(Long id) { + return companyDao.findById(id).map(companyMapper::companyEntityToCompany).orElseThrow(); + } + + @Override + public List list() { + return companyDao.findAll().stream().map(companyMapper::companyEntityToCompany).toList(); + } + + @Override + public void delete(Long id) { + companyDao.deleteById(id); + } } + diff --git a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/DocumentJpaRepository.java b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/DocumentJpaRepository.java index 0a2a7bc..0be78f6 100644 --- a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/DocumentJpaRepository.java +++ b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/DocumentJpaRepository.java @@ -1,10 +1,55 @@ package com.dh7789dev.xpeditis.repository; import com.dh7789dev.xpeditis.DocumentRepository; +import com.dh7789dev.xpeditis.dao.DocumentDao; +import com.dh7789dev.xpeditis.dto.app.Document; +import com.dh7789dev.xpeditis.entity.DocumentEntity; +import com.dh7789dev.xpeditis.mapper.DocumentMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; +import java.util.List; + @Slf4j @Repository public class DocumentJpaRepository implements DocumentRepository { + private final DocumentDao dao; + private final DocumentMapper mapper; + + public DocumentJpaRepository(DocumentDao dao, DocumentMapper mapper) { + this.dao = dao; + this.mapper = mapper; + } + + @Override + public Document create(Document document) { + DocumentEntity entity = mapper.documentToDocumentEntity(document); + DocumentEntity saved = dao.save(entity); + return mapper.documentEntityToDocument(saved); + } + + @Override + public Document update(Long id, Document document) { + DocumentEntity entity = dao.findById(id).orElseThrow(); + if (document.getFileName() != null) entity.setFileName(document.getFileName()); + if (document.getContentType() != null) entity.setContentType(document.getContentType()); + if (document.getData() != null) entity.setData(document.getData()); + DocumentEntity saved = dao.save(entity); + return mapper.documentEntityToDocument(saved); + } + + @Override + public Document getById(Long id) { + return dao.findById(id).map(mapper::documentEntityToDocument).orElseThrow(); + } + + @Override + public List list() { + return dao.findAll().stream().map(mapper::documentEntityToDocument).toList(); + } + + @Override + public void delete(Long id) { + dao.deleteById(id); + } } diff --git a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/ExportFolderJpaRepository.java b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/ExportFolderJpaRepository.java index 78d6eef..48e2f14 100644 --- a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/ExportFolderJpaRepository.java +++ b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/ExportFolderJpaRepository.java @@ -1,10 +1,54 @@ package com.dh7789dev.xpeditis.repository; import com.dh7789dev.xpeditis.ExportFolderRepository; +import com.dh7789dev.xpeditis.dao.ExportFolderDao; +import com.dh7789dev.xpeditis.dto.app.ExportFolder; +import com.dh7789dev.xpeditis.entity.ExportFolderEntity; +import com.dh7789dev.xpeditis.mapper.ExportFolderMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; +import java.util.List; + @Slf4j @Repository public class ExportFolderJpaRepository implements ExportFolderRepository { + private final ExportFolderDao dao; + private final ExportFolderMapper mapper; + + public ExportFolderJpaRepository(ExportFolderDao dao, ExportFolderMapper mapper) { + this.dao = dao; + this.mapper = mapper; + } + + @Override + public ExportFolder create(ExportFolder exportFolder) { + ExportFolderEntity entity = mapper.exportFolderToCompanyEntity(exportFolder); + ExportFolderEntity saved = dao.save(entity); + return mapper.exportFolderEntityToExportFolder(saved); + } + + @Override + public ExportFolder update(Long id, ExportFolder exportFolder) { + ExportFolderEntity entity = dao.findById(id).orElseThrow(); + if (exportFolder.getReference() != null) entity.setReference(exportFolder.getReference()); + if (exportFolder.getValidationDate() != null) entity.setValidationDate(exportFolder.getValidationDate()); + ExportFolderEntity saved = dao.save(entity); + return mapper.exportFolderEntityToExportFolder(saved); + } + + @Override + public ExportFolder getById(Long id) { + return dao.findById(id).map(mapper::exportFolderEntityToExportFolder).orElseThrow(); + } + + @Override + public List list() { + return dao.findAll().stream().map(mapper::exportFolderEntityToExportFolder).toList(); + } + + @Override + public void delete(Long id) { + dao.deleteById(id); + } } diff --git a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/LicenseJpaRepository.java b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/LicenseJpaRepository.java index 890ac30..9af1459 100644 --- a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/LicenseJpaRepository.java +++ b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/LicenseJpaRepository.java @@ -1,10 +1,55 @@ package com.dh7789dev.xpeditis.repository; import com.dh7789dev.xpeditis.LicenseRepository; +import com.dh7789dev.xpeditis.dao.LicenseDao; +import com.dh7789dev.xpeditis.dto.app.License; +import com.dh7789dev.xpeditis.entity.LicenseEntity; +import com.dh7789dev.xpeditis.mapper.LicenseMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; +import java.util.List; + @Slf4j @Repository public class LicenseJpaRepository implements LicenseRepository { + private final LicenseDao dao; + private final LicenseMapper mapper; + + public LicenseJpaRepository(LicenseDao dao, LicenseMapper mapper) { + this.dao = dao; + this.mapper = mapper; + } + + @Override + public License create(License license) { + LicenseEntity entity = mapper.licenseToLicenseEntity(license); + LicenseEntity saved = dao.save(entity); + return mapper.licenseEntityToLicense(saved); + } + + @Override + public License update(Long id, License license) { + LicenseEntity entity = dao.findById(id).orElseThrow(); + if (license.getLicenseKey() != null) entity.setLicenseKey(license.getLicenseKey()); + if (license.getExpirationDate() != null) entity.setExpirationDate(license.getExpirationDate()); + entity.setActive(license.isActive()); + LicenseEntity saved = dao.save(entity); + return mapper.licenseEntityToLicense(saved); + } + + @Override + public License getById(Long id) { + return dao.findById(id).map(mapper::licenseEntityToLicense).orElseThrow(); + } + + @Override + public List list() { + return dao.findAll().stream().map(mapper::licenseEntityToLicense).toList(); + } + + @Override + public void delete(Long id) { + dao.deleteById(id); + } } diff --git a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/QuoteDetailsJpaRepository.java b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/QuoteDetailsJpaRepository.java index e8b36cf..a7401e7 100644 --- a/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/QuoteDetailsJpaRepository.java +++ b/infrastructure/src/main/java/com/dh7789dev/xpeditis/repository/QuoteDetailsJpaRepository.java @@ -1,11 +1,61 @@ package com.dh7789dev.xpeditis.repository; - import com.dh7789dev.xpeditis.QuoteDetailsRepository; +import com.dh7789dev.xpeditis.dao.QuoteDetailDao; +import com.dh7789dev.xpeditis.dto.app.QuoteDetail; +import com.dh7789dev.xpeditis.entity.QuoteDetailEntity; +import com.dh7789dev.xpeditis.mapper.DimensionMapper; +import com.dh7789dev.xpeditis.mapper.QuoteDetailMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; +import java.util.List; + @Slf4j @Repository public class QuoteDetailsJpaRepository implements QuoteDetailsRepository { + private final QuoteDetailDao dao; + private final QuoteDetailMapper mapper; + private final DimensionMapper dimensionMapper; + + public QuoteDetailsJpaRepository(QuoteDetailDao dao, QuoteDetailMapper mapper, DimensionMapper dimensionMapper) { + this.dao = dao; + this.mapper = mapper; + this.dimensionMapper = dimensionMapper; + } + + @Override + public QuoteDetail create(QuoteDetail quoteDetail) { + QuoteDetailEntity entity = mapper.quoteDetailsToQuoteDetailsEntity(quoteDetail); + QuoteDetailEntity saved = dao.save(entity); + return mapper.quoteDetailsEntityToQuoteDetails(saved); + } + + @Override + public QuoteDetail update(Long id, QuoteDetail quoteDetail) { + QuoteDetailEntity entity = dao.findById(id).orElseThrow(); + if (quoteDetail.getQuantity() != null) entity.setQuantity(quoteDetail.getQuantity()); + if (quoteDetail.getDimension() != null) { + entity.setDimension(dimensionMapper.dimensionToDimensionEntity(quoteDetail.getDimension())); + } + if (quoteDetail.getWeight() != null) entity.setWeight(quoteDetail.getWeight()); + entity.setGerbable(quoteDetail.isStackable()); + QuoteDetailEntity saved = dao.save(entity); + return mapper.quoteDetailsEntityToQuoteDetails(saved); + } + + @Override + public QuoteDetail getById(Long id) { + return dao.findById(id).map(mapper::quoteDetailsEntityToQuoteDetails).orElseThrow(); + } + + @Override + public List list() { + return dao.findAll().stream().map(mapper::quoteDetailsEntityToQuoteDetails).toList(); + } + + @Override + public void delete(Long id) { + dao.deleteById(id); + } } diff --git a/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/AddressJpaRepositoryTest.java b/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/AddressJpaRepositoryTest.java index 6fe9069..4ff6cb8 100644 --- a/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/AddressJpaRepositoryTest.java +++ b/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/AddressJpaRepositoryTest.java @@ -1,18 +1,108 @@ package com.dh7789dev.xpeditis.repository; - +import com.dh7789dev.xpeditis.dao.AddressDao; +import com.dh7789dev.xpeditis.dto.app.Address; +import com.dh7789dev.xpeditis.entity.AddressEntity; +import com.dh7789dev.xpeditis.mapper.AddressMapper; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; -import static org.junit.jupiter.api.Assertions.assertEquals; -@ExtendWith(MockitoExtension.class) +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + class AddressJpaRepositoryTest { + private AddressDao addressDao; + private AddressMapper addressMapper; + private AddressJpaRepository repository; + + @BeforeEach + void setUp() { + addressDao = mock(AddressDao.class); + addressMapper = new AddressMapper() { + @Override + public AddressEntity addressToAddressEntity(Address address) { + AddressEntity e = new AddressEntity(); + e.setCompanyName(address.getCompanyName()); + e.setAddress(address.getAddress()); + e.setPostalCode(address.getPostalCode()); + e.setCountry(address.getCountry()); + return e; + } + + @Override + public Address addressEntityToAddress(AddressEntity addressEntity) { + return new Address( + addressEntity.getId(), + addressEntity.getCompanyName(), + addressEntity.getAddress(), + addressEntity.getPostalCode(), + addressEntity.getCountry(), + null, + null, + addressEntity.getCreatedAt(), + addressEntity.getModifiedAt() + ); + } + }; + repository = new AddressJpaRepository(addressDao, addressMapper); + } @Test - void test(){ - int test = 1 +1; - assertEquals(2,test); + void create_saves_and_returns_mapped() { + Address input = new Address(null, "ACME", "1 rue", "75001", "FR", null, null, null, null); + when(addressDao.save(any())).thenAnswer(inv -> inv.getArgument(0)); + + Address created = repository.create(input); + + var captor = org.mockito.ArgumentCaptor.forClass(AddressEntity.class); + verify(addressDao).save(captor.capture()); + AddressEntity persisted = captor.getValue(); + assertThat(persisted.getCompanyName()).isEqualTo("ACME"); + assertThat(created.getCompanyName()).isEqualTo("ACME"); + } + + @Test + void update_edits_mutable_fields() { + Long id = 1L; + AddressEntity existing = new AddressEntity(); + existing.setCompanyName("OLD"); + when(addressDao.findById(id)).thenReturn(Optional.of(existing)); + when(addressDao.save(existing)).thenReturn(existing); + + Address updated = repository.update(id, new Address(null, "NEW", "2 ave", "75002", "FR", null, null, null, null)); + + assertThat(updated.getCompanyName()).isEqualTo("NEW"); + verify(addressDao).save(existing); + } + + @Test + void getById_maps() { + AddressEntity e = new AddressEntity(); + e.setCompanyName("X"); + when(addressDao.findById(7L)).thenReturn(Optional.of(e)); + + Address got = repository.getById(7L); + assertThat(got.getCompanyName()).isEqualTo("X"); + } + + @Test + void list_maps_all() { + AddressEntity e = new AddressEntity(); + e.setCompanyName("Y"); + when(addressDao.findAll()).thenReturn(List.of(e)); + + List
result = repository.list(); + assertThat(result).hasSize(1); + assertThat(result.get(0).getCompanyName()).isEqualTo("Y"); + } + + @Test + void delete_calls_dao() { + repository.delete(10L); + verify(addressDao).deleteById(10L); } } diff --git a/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/CompanyJpaRepositoryTest.java b/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/CompanyJpaRepositoryTest.java index a44df33..26ef644 100644 --- a/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/CompanyJpaRepositoryTest.java +++ b/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/CompanyJpaRepositoryTest.java @@ -1,19 +1,80 @@ package com.dh7789dev.xpeditis.repository; - +import com.dh7789dev.xpeditis.dao.CompanyDao; +import com.dh7789dev.xpeditis.dto.app.Company; +import com.dh7789dev.xpeditis.entity.CompanyEntity; +import com.dh7789dev.xpeditis.mapper.CompanyMapper; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; -import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; -@ExtendWith(MockitoExtension.class) class CompanyJpaRepositoryTest { + private CompanyDao companyDao; + private CompanyMapper companyMapper; + private CompanyJpaRepository repository; + + @BeforeEach + void setUp() { + companyDao = mock(CompanyDao.class); + companyMapper = new CompanyMapper() { + @Override + public CompanyEntity companyToCompanyEntity(Company company) { + CompanyEntity e = new CompanyEntity(); + e.setName(company.getName()); + e.setCountry(company.getCountry()); + return e; + } + + @Override + public Company companyEntityToCompany(CompanyEntity companyEntity) { + return new Company(companyEntity.getId(), companyEntity.getName(), companyEntity.getCountry(), null, null, null); + } + }; + repository = new CompanyJpaRepository(companyDao, companyMapper); + } @Test - void test(){ - int test = 1 +1; - assertEquals(2,test); + void create_saves_and_returns_mapped() { + Company input = new Company(null, "ACME", "FR", null, null, null); + when(companyDao.save(any())).thenAnswer(inv -> inv.getArgument(0)); + + Company created = repository.create(input); + + var captor = org.mockito.ArgumentCaptor.forClass(CompanyEntity.class); + verify(companyDao).save(captor.capture()); + CompanyEntity persisted = captor.getValue(); + assertThat(persisted.getName()).isEqualTo("ACME"); + assertThat(created.getName()).isEqualTo("ACME"); + } + + @Test + void update_edits_mutable_fields() { + Long id = 1L; + CompanyEntity existing = new CompanyEntity(); + existing.setName("OLD"); + when(companyDao.findById(id)).thenReturn(Optional.of(existing)); + when(companyDao.save(existing)).thenReturn(existing); + + Company updated = repository.update(id, new Company(null, "NEW", "US", null, null, null)); + + assertThat(updated.getName()).isEqualTo("NEW"); + verify(companyDao).save(existing); + } + + @Test + void list_maps_all() { + CompanyEntity e = new CompanyEntity(); + e.setName("X"); + when(companyDao.findAll()).thenReturn(List.of(e)); + + List result = repository.list(); + assertThat(result).hasSize(1); + assertThat(result.get(0).getName()).isEqualTo("X"); } } diff --git a/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/QuoteDetailsJpaRepositoryTest.java b/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/QuoteDetailsJpaRepositoryTest.java index 4b95dc4..9a33feb 100644 --- a/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/QuoteDetailsJpaRepositoryTest.java +++ b/infrastructure/src/test/java/com/dh7789dev/xpeditis/repository/QuoteDetailsJpaRepositoryTest.java @@ -1,19 +1,133 @@ package com.dh7789dev.xpeditis.repository; - +import com.dh7789dev.xpeditis.dao.QuoteDetailDao; +import com.dh7789dev.xpeditis.dto.app.Dimension; +import com.dh7789dev.xpeditis.dto.app.QuoteDetail; +import com.dh7789dev.xpeditis.entity.DimensionEntity; +import com.dh7789dev.xpeditis.entity.QuoteDetailEntity; +import com.dh7789dev.xpeditis.mapper.DimensionMapper; +import com.dh7789dev.xpeditis.mapper.QuoteDetailMapper; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; -import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; -@ExtendWith(MockitoExtension.class) class QuoteDetailsJpaRepositoryTest { + private QuoteDetailDao dao; + private QuoteDetailMapper mapper; + private DimensionMapper dimensionMapper; + private QuoteDetailsJpaRepository repository; + + @BeforeEach + void setUp() { + dao = mock(QuoteDetailDao.class); + mapper = new QuoteDetailMapper() { + @Override + public QuoteDetailEntity quoteDetailsToQuoteDetailsEntity(QuoteDetail quoteDetail) { + QuoteDetailEntity e = new QuoteDetailEntity(); + e.setQuantity(quoteDetail.getQuantity()); + if (quoteDetail.getDimension() != null) { + DimensionEntity d = new DimensionEntity(); + d.setLength(quoteDetail.getDimension().getLength()); + d.setWidth(quoteDetail.getDimension().getWidth()); + d.setHeight(quoteDetail.getDimension().getHeight()); + e.setDimension(d); + } + e.setWeight(quoteDetail.getWeight()); + e.setGerbable(quoteDetail.isStackable()); + return e; + } + + @Override + public QuoteDetail quoteDetailsEntityToQuoteDetails(QuoteDetailEntity quoteDetailEntity) { + Dimension dim = null; + if (quoteDetailEntity.getDimension() != null) { + dim = new Dimension(null, + quoteDetailEntity.getDimension().getLength(), + quoteDetailEntity.getDimension().getWidth(), + quoteDetailEntity.getDimension().getHeight()); + } + return new QuoteDetail( + quoteDetailEntity.getId(), + quoteDetailEntity.getQuantity(), + dim, + quoteDetailEntity.getWeight(), + quoteDetailEntity.isGerbable(), + null + ); + } + }; + dimensionMapper = new DimensionMapper() { + @Override + public DimensionEntity dimensionToDimensionEntity(Dimension dimension) { + DimensionEntity e = new DimensionEntity(); + e.setLength(dimension.getLength()); + e.setWidth(dimension.getWidth()); + e.setHeight(dimension.getHeight()); + return e; + } + + @Override + public Dimension dimensionEntityToDimension(DimensionEntity dimensionEntity) { + return new Dimension(null, dimensionEntity.getLength(), dimensionEntity.getWidth(), dimensionEntity.getHeight()); + } + }; + repository = new QuoteDetailsJpaRepository(dao, mapper, dimensionMapper); + } @Test - void test(){ - int test = 1 +1; - assertEquals(2,test); + void create_saves_and_returns_mapped() { + when(dao.save(any())).thenAnswer(inv -> inv.getArgument(0)); + QuoteDetail input = new QuoteDetail(null, 2, new Dimension(null, 1.0, 2.0, 3.0), 10.5, true, null); + QuoteDetail created = repository.create(input); + + var captor = org.mockito.ArgumentCaptor.forClass(QuoteDetailEntity.class); + verify(dao).save(captor.capture()); + QuoteDetailEntity persisted = captor.getValue(); + assertThat(persisted.getQuantity()).isEqualTo(2); + assertThat(created.getQuantity()).isEqualTo(2); + } + + @Test + void update_edits_mutable_fields() { + Long id = 1L; + QuoteDetailEntity existing = new QuoteDetailEntity(); + existing.setQuantity(1); + when(dao.findById(id)).thenReturn(Optional.of(existing)); + when(dao.save(existing)).thenReturn(existing); + + QuoteDetail updated = repository.update(id, new QuoteDetail(null, 3, new Dimension(null, 4.0, 5.0, 6.0), 12.0, false, null)); + assertThat(updated.getQuantity()).isEqualTo(3); + verify(dao).save(existing); + } + + @Test + void getById_maps() { + QuoteDetailEntity e = new QuoteDetailEntity(); + e.setQuantity(5); + when(dao.findById(7L)).thenReturn(Optional.of(e)); + QuoteDetail got = repository.getById(7L); + assertThat(got.getQuantity()).isEqualTo(5); + } + + @Test + void list_maps_all() { + QuoteDetailEntity e = new QuoteDetailEntity(); + e.setQuantity(7); + when(dao.findAll()).thenReturn(List.of(e)); + List result = repository.list(); + assertThat(result).hasSize(1); + assertThat(result.get(0).getQuantity()).isEqualTo(7); + } + + @Test + void delete_calls_dao() { + repository.delete(10L); + verify(dao).deleteById(10L); } }