diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b6509b3e485ae8ebf9299e99c49cdb7ffb135767..fb87697f671f4a57be8c33bded1d536272f35077 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,8 +7,7 @@ test: tags: - private script: - - make test - - cat target/site/jacoco/index.html + - make ci_test cleanup: stage: cleanup @@ -16,5 +15,4 @@ cleanup: tags: - private script: - - sudo /bin/chown -R gitlab-runner target - - make clean_test \ No newline at end of file + - make ci_clean_test \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index e72d32499bb1e9ff23ecffafac5ba9ffbc665fb6..2b68048c39ea82191298ea974b5c8b9ca313287a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,5 +9,7 @@ RUN sass --version COPY wait-for-it.sh / COPY wad.sh / +COPY . /app + RUN chmod 777 /wad.sh RUN chmod 777 /wait-for-it.sh \ No newline at end of file diff --git a/Makefile b/Makefile index 15e5d779070b7286ce17437e921e102985df49b1..c77377b4f27c8e9d274604b1f0e03b56be79e7d0 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,20 @@ all: run +_run_mvn_tests: + @mvn clean test -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + +_cat_jacoco_: + @cat /app/target/site/jacoco/index.html + +_ci_test: _run_mvn_tests _cat_jacoco_ + +ci_test: + @docker-compose -f docker-compose.test.yml build + @docker-compose -f docker-compose.test.yml run ci_test_builder make _ci_test + +ci_clean_test: + @docker-compose -f docker-compose.test.yml down + run: @docker-compose -f docker-compose.yml up -d diff --git a/docker-compose.test.yml b/docker-compose.test.yml index 9b67254a36d0a04504b54141f62f5109282518ab..398f1633077b69fdad5eda27883d2524ea31c141 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -5,7 +5,8 @@ networks: name: 'tcn2' services: - test_builder: + + ci_test_builder: &app build: . restart: always container_name: 'test_corporate_builder2' @@ -13,11 +14,14 @@ services: - test_db - test_mbroker working_dir: '/app' - volumes: - - .:/app networks: - test_corporate_network + test_builder: + <<: *app + volumes: + - .:/app + test_db: image: 'postgres:10-alpine' container_name: 'test_corporate_db2' diff --git a/pom.xml b/pom.xml index 02841372dcc2e8b2e44720c7289a1826089d74f9..889e40ea4b08d480b43a9cc14bd4037184c0e272 100644 --- a/pom.xml +++ b/pom.xml @@ -105,26 +105,6 @@ <excludeDevtools>false</excludeDevtools> </configuration> </plugin> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>0.8.3</version> - <executions> - <execution> - <id>pre-unit-test</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>post-unit-test</id> - <phase>test</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> <plugin> <artifactId>exec-maven-plugin</artifactId> <groupId>org.codehaus.mojo</groupId> @@ -160,6 +140,25 @@ </dependency> </dependencies> </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.8.5</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + <execution> + <id>report</id> + <phase>test</phase> + <goals> + <goal>report</goal> + </goals> + </execution> + </executions> + </plugin> </plugins> </build> diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt index e40ad46da0a945f79eb4850bd19f225df1f7f8aa..0d17a4b4fcb76b8f76335734efdb00b570e3db8e 100644 --- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt +++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt @@ -4,10 +4,15 @@ import com.s3ai.corporate_app2.Cinema import com.s3ai.corporate_app2.CinemaService import com.s3ai.corporate_app2.jms.JMSPublisher import org.springframework.beans.factory.annotation.Autowired +import org.springframework.http.HttpStatus import org.springframework.stereotype.Controller import org.springframework.ui.Model import org.springframework.web.bind.annotation.* +import org.springframework.web.client.HttpClientErrorException +import org.springframework.web.server.ResponseStatusException import org.springframework.web.servlet.view.RedirectView +import java.lang.IllegalArgumentException +import java.util.* import java.util.UUID.fromString @Controller @@ -33,7 +38,14 @@ class CinemasController { cinema = Cinema() model.addAttribute("action", "Create") } else { - cinema = cinemaService.findById(fromString(id)) + val idParsed: UUID + try { + idParsed = fromString(id) + } + catch (e: IllegalArgumentException){ + throw ResponseStatusException(HttpStatus.BAD_REQUEST) + } + cinema = cinemaService.findById(idParsed) model.addAttribute("action", "Edit") } model.addAttribute("cinema", cinema) diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt index dbe5e808384f2b2210b04904302d31d98d35928c..878cce6b4030d8f9a4ee6b1c50662c88ae215695 100644 --- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt +++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt @@ -6,10 +6,13 @@ import com.s3ai.corporate_app2.TicketService import com.s3ai.corporate_app2.UserService import com.s3ai.corporate_app2.jms.JMSPublisher import org.springframework.beans.factory.annotation.Autowired +import org.springframework.http.HttpStatus import org.springframework.stereotype.Controller import org.springframework.ui.Model import org.springframework.web.bind.annotation.* +import org.springframework.web.server.ResponseStatusException import org.springframework.web.servlet.view.RedirectView +import java.lang.IllegalArgumentException import java.util.* @Controller @@ -38,7 +41,14 @@ class TicketsController { ticket = Ticket() model.addAttribute("action", "Create") } else { - ticket = ticketService.findById(UUID.fromString(id)) + val idParsed: UUID + try { + idParsed = UUID.fromString(id) + } + catch (e: IllegalArgumentException){ + throw ResponseStatusException(HttpStatus.BAD_REQUEST) + } + ticket = ticketService.findById(idParsed) model.addAttribute("action", "Edit") } model.addAttribute("ticket", ticket) diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt index 591e24dfecb8314424a5eb11a084fa29ca9a0e80..5ea71ad523abf891aaf7d031fd42f35c0c481130 100644 --- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt +++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt @@ -4,10 +4,13 @@ import com.s3ai.corporate_app2.User import com.s3ai.corporate_app2.UserService import com.s3ai.corporate_app2.jms.JMSPublisher import org.springframework.beans.factory.annotation.Autowired +import org.springframework.http.HttpStatus import org.springframework.stereotype.Controller import org.springframework.ui.Model import org.springframework.web.bind.annotation.* +import org.springframework.web.server.ResponseStatusException import org.springframework.web.servlet.view.RedirectView +import java.lang.IllegalArgumentException import java.util.* @Controller @@ -33,7 +36,14 @@ class UsersController { user = User() model.addAttribute("action", "Create") } else { - user = userService.findById(UUID.fromString(id)) + val idParsed: UUID + try { + idParsed = UUID.fromString(id) + } + catch (e: IllegalArgumentException){ + throw ResponseStatusException(HttpStatus.BAD_REQUEST) + } + user = userService.findById(idParsed) model.addAttribute("action", "Edit") } model.addAttribute("user", user) diff --git a/src/test/kotlin/com/s3ai/corporate_app2/CinemasApiTest.kt b/src/test/kotlin/com/s3ai/corporate_app2/CinemasApiTest.kt deleted file mode 100644 index 62638c0e392479447fc5b58bcfd215c8b9d24e5f..0000000000000000000000000000000000000000 --- a/src/test/kotlin/com/s3ai/corporate_app2/CinemasApiTest.kt +++ /dev/null @@ -1,108 +0,0 @@ -package com.s3ai.corporate_app2 - -import com.s3ai.corporate_app2.controllers.CinemasController -import com.s3ai.corporate_app2.controllers.rest.CinemaApiController -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.http.MediaType -import org.springframework.test.context.jdbc.Sql -import org.springframework.test.web.servlet.MockMvc -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get -import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status -import org.springframework.ui.ExtendedModelMap -import java.util.* - - -@SpringBootTest -@AutoConfigureMockMvc -class CinemasApiTest { - @Autowired - private lateinit var controller: CinemasController - - @Autowired - private lateinit var mvc: MockMvc - - @Autowired - private lateinit var apiController: CinemaApiController - - @Test - @Throws(Exception::class) - fun contextLoads() { - assertThat(controller).isNotNull - assertThat(apiController).isNotNull - } - - @Test - @Throws(Exception::class) - fun shouldUpdateCinema() { - val cinema = Cinema() - val id = UUID.randomUUID() - cinema.id = id - cinema.name = "test" - controller.updateCinema(cinema) - val cinemaFromBase = controller.cinemaService.findById(id) - assertThat(cinemaFromBase?.equals(cinema)) - } - - @Test - @Throws(Exception::class) - fun shouldRedirectToCreateCinemaIfIdNotExists() { - val model = ExtendedModelMap() - val redirect = controller.getCinemaEditPage(UUID.randomUUID().toString(), model) - assertThat(redirect.equals("cinemas/edit")) - assertThat(model.getValue("action") == "Create") - } - - @Test - @Throws(Exception::class) - fun shouldRedirectToEditCinemaIfIdExists() { - val cinema = Cinema() - val id = UUID.randomUUID() - cinema.id = id - cinema.name = "test" - controller.updateCinema(cinema) - val model = ExtendedModelMap() - val redirect = controller.getCinemaEditPage(id.toString(), model) - assertThat(redirect.equals("cinemas/edit")) - assertThat(model.getValue("action") == "Edit") - } - - @Test - @Throws(Exception::class) - fun shouldReturnCinemasBrowsePage() { - val cinema = Cinema() - val id = UUID.randomUUID() - cinema.id = id - cinema.name = "test" - controller.updateCinema(cinema) - val model = ExtendedModelMap() - val redirect = controller.getCinemasBrowsePage(model) - assertThat(redirect.equals("cinemas/list")) - assertThat(model.getValue("cinemas")).isNotNull - } - - @Test - @Sql("/cinemasFill.sql") - fun mvcTest() { - mvc.perform(get("/api/json/cinemas/all") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk) - } - -// @Test -// @Throws(Exception::class) -// fun shouldDeleteCinema() { -// val cinema = Cinema() -// val id = UUID.randomUUID() -// cinema.id = id -// cinema.name = "test" -// controller.updateCinema(cinema) -// var responce = HttpResponseFactory -// apiController.deleteCinema(id.toString(), Http) -// val cinemaFromBase = controller.cinemaService.findById(id) -// assertThat(cinemaFromBase?.equals(cinema)) -// } -} diff --git a/src/test/kotlin/com/s3ai/corporate_app2/TestUtils.kt b/src/test/kotlin/com/s3ai/corporate_app2/TestUtils.kt index ab3d40a1fe353957cd6572e1219fd29f7c3625c3..35ecbafd6d837aa4a297382b27b97436ee26f60c 100644 --- a/src/test/kotlin/com/s3ai/corporate_app2/TestUtils.kt +++ b/src/test/kotlin/com/s3ai/corporate_app2/TestUtils.kt @@ -1,3 +1,17 @@ package com.s3ai.corporate_app2 +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.databind.MapperFeature +import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule +import com.fasterxml.jackson.dataformat.xml.XmlMapper +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.fasterxml.jackson.module.kotlin.registerKotlinModule + +internal val kotlinXmlMapper = XmlMapper(JacksonXmlModule().apply { + setDefaultUseWrapper(false) +}).registerKotlinModule() + .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true) + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + +internal val kotlinJsonMapper = jacksonObjectMapper() \ No newline at end of file diff --git a/src/test/kotlin/com/s3ai/corporate_app2/TicketsApiTest.kt b/src/test/kotlin/com/s3ai/corporate_app2/TicketsApiTest.kt deleted file mode 100644 index 1b91a80ea29649545401550f4d643d3edf59a5d1..0000000000000000000000000000000000000000 --- a/src/test/kotlin/com/s3ai/corporate_app2/TicketsApiTest.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.s3ai.corporate_app2 - -import com.s3ai.corporate_app2.controllers.TicketsController -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.ui.ExtendedModelMap -import java.util.* - - -@SpringBootTest -class TicketsApiTest { - @Autowired - private lateinit var controller: TicketsController - - @Test - @Throws(Exception::class) - fun contextLoads() { - assertThat(controller).isNotNull - } - - @Test - @Throws(Exception::class) - fun shouldUpdateTicket() { - val ticket = Ticket() - val id = UUID.randomUUID() - ticket.id = id - ticket.movie = "test" - controller.updateTicket(ticket) - val ticketFromBase = controller.ticketService.findById(id) - assertThat(ticketFromBase?.equals(ticket)) - } - - @Test - @Throws(Exception::class) - fun shouldRedirectToCreateTicketIfIdNotExists() { - val model = ExtendedModelMap() - val redirect = controller.getTicketEditPage(UUID.randomUUID().toString(), model) - assertThat(redirect.equals("tickets/edit")) - assertThat(model.getValue("action") == "Create") - } - - @Test - @Throws(Exception::class) - fun shouldRedirectToEditCinemaIfIdExists() { - val ticket = Ticket() - val id = UUID.randomUUID() - ticket.id = id - ticket.movie = "test" - controller.updateTicket(ticket) - val model = ExtendedModelMap() - val redirect = controller.getTicketEditPage(id.toString(), model) - assertThat(redirect.equals("tickets/edit")) - assertThat(model.getValue("action") == "Edit") - } - - @Test - @Throws(Exception::class) - fun shouldReturnTicketsBrowsePage() { - val ticket = Ticket() - val id = UUID.randomUUID() - ticket.id = id - ticket.movie = "test" - controller.updateTicket(ticket) - val model = ExtendedModelMap() - val redirect = controller.getTicketsBrowsePage(model) - assertThat(redirect.equals("tickets/list")) - assertThat(model.getValue("tickets")).isNotNull - } -} \ No newline at end of file diff --git a/src/test/kotlin/com/s3ai/corporate_app2/UsersApiTest.kt b/src/test/kotlin/com/s3ai/corporate_app2/UsersApiTest.kt deleted file mode 100644 index 8ff981ce7a1460d4f2aa70771a06a0845e497a6f..0000000000000000000000000000000000000000 --- a/src/test/kotlin/com/s3ai/corporate_app2/UsersApiTest.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.s3ai.corporate_app2 - -import com.s3ai.corporate_app2.controllers.UsersController -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.ui.ExtendedModelMap -import java.util.* - - -@SpringBootTest -class UsersApiTest { - @Autowired - private lateinit var controller: UsersController - - @Test - @Throws(Exception::class) - fun contextLoads() { - assertThat(controller).isNotNull - } - - @Test - @Throws(Exception::class) - fun shouldUpdateCinema() { - val user = User() - val id = UUID.randomUUID() - user.id = id - user.name = "test" - controller.updateUser(user) - val userFromBase = controller.userService.findById(id) - assertThat(userFromBase?.equals(user)) - } - - @Test - @Throws(Exception::class) - fun shouldRedirectToCreateUserIfIdNotExists() { - val model = ExtendedModelMap() - val redirect = controller.getUserEditPage(UUID.randomUUID().toString(), model) - assertThat(redirect.equals("users/edit")) - assertThat(model.getValue("action") == "Create") - } - - @Test - @Throws(Exception::class) - fun shouldRedirectToEditCinemaIfIdExists() { - val user = User() - val id = UUID.randomUUID() - user.id = id - user.name = "test" - controller.updateUser(user) - val model = ExtendedModelMap() - val redirect = controller.getUserEditPage(id.toString(), model) - assertThat(redirect.equals("users/edit")) - assertThat(model.getValue("action") == "Edit") - } - - @Test - @Throws(Exception::class) - fun shouldReturnUsersBrowsePage() { - val user = User() - val id = UUID.randomUUID() - user.id = id - user.name = "test" - controller.updateUser(user) - val model = ExtendedModelMap() - val redirect = controller.getUsersBrowsePage(model) - assertThat(redirect.equals("users/list")) - assertThat(model.getValue("users")).isNotNull - } -} diff --git a/src/test/kotlin/com/s3ai/corporate_app2/controllers/CinemasTest.kt b/src/test/kotlin/com/s3ai/corporate_app2/controllers/CinemasTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..a159c661f33daae4542306f98cb1d877a47d27c6 --- /dev/null +++ b/src/test/kotlin/com/s3ai/corporate_app2/controllers/CinemasTest.kt @@ -0,0 +1,104 @@ +package com.s3ai.corporate_app2.controllers + +import com.fasterxml.jackson.databind.ObjectMapper +import com.s3ai.corporate_app2.Cinema +import com.s3ai.corporate_app2.CinemaService +import org.assertj.core.api.Assertions.assertThat +import org.hamcrest.Matchers +import org.hamcrest.CoreMatchers +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.http.MediaType +import org.springframework.test.context.jdbc.Sql +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders +import org.springframework.test.web.servlet.result.MockMvcResultMatchers +import org.springframework.test.web.servlet.result.MockMvcResultMatchers.* +import java.lang.reflect.GenericArrayType +import java.util.* + + +@SpringBootTest +@AutoConfigureMockMvc +class CinemasTest { + @Autowired + private lateinit var service: CinemaService + + @Autowired + private lateinit var controller: CinemasController + + @Autowired + private lateinit var mvc: MockMvc + + @Test + @Throws(Exception::class) + fun contextLoads() { + assertThat(controller).isNotNull + } + + @Test + @Throws(Exception::class) + @Sql("/cinemasFill.sql") + fun updateCinemaTest() { + val cinema = service.findAll().random() + print(cinema.id) + + cinema.name = UUID.randomUUID().toString() + + mvc.perform(MockMvcRequestBuilders.post("/cinemas/update") + .contentType(MediaType.APPLICATION_JSON) + .content(ObjectMapper().writeValueAsString(cinema))) + .andExpect(status().isFound) + .andExpect(redirectedUrl("/cinemas/list")) + + val updatedCinema = service.findById(cinema.id!!) + assertThat(cinema == updatedCinema) + } + + @Test + @Throws(Exception::class) + fun editNonExistingIdRedirectToCreateTest() { + mvc.perform(MockMvcRequestBuilders.get("/cinemas/edit")) + .andExpect(status().isOk) + .andExpect(model().attribute("action", Matchers.equalTo("Create"))) + .andExpect(model().attribute("cinema", Matchers.notNullValue(Cinema::class.java))) + } + + @Test + @Throws(Exception::class) + @Sql("/cinemasFill.sql") + fun editPageTest() { + val randomCinemaId = service.findAll().map { e -> e.id }.distinct().random() + mvc.perform(MockMvcRequestBuilders.get("/cinemas/edit?id=${randomCinemaId}")) + .andExpect(status().isOk) + .andExpect(model().attribute("action", Matchers.equalTo("Edit"))) + .andExpect(model().attribute("cinema", Matchers.notNullValue(Cinema::class.java))) + } + + @Test + @Throws(Exception::class) + @Sql("/cinemasFill.sql") + fun listPageTest() { + mvc.perform(MockMvcRequestBuilders.get("/cinemas/list")) + .andExpect(status().isOk) + .andExpect(model().attribute("cinemas", Matchers.notNullValue(MutableCollection::class.java))) + .andExpect(model().attribute("cinemas", CoreMatchers.everyItem(Matchers.notNullValue(Cinema::class.java)))) + } + + @Test + @Throws(Exception::class) + fun listEmptyPageTest() { + mvc.perform(MockMvcRequestBuilders.get("/cinemas/list")) + .andExpect(status().isOk) + .andExpect(model().attribute("cinemas", Matchers.notNullValue(MutableCollection::class.java))) + } + + @Test + @Throws(Exception::class) + fun editInvalidUUIDTest() { + mvc.perform(MockMvcRequestBuilders.get("/cinemas/edit?id=totallyNotAnUUID")) + .andExpect(MockMvcResultMatchers.status().isBadRequest) + } +} diff --git a/src/test/kotlin/com/s3ai/corporate_app2/controllers/TicketsTest.kt b/src/test/kotlin/com/s3ai/corporate_app2/controllers/TicketsTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..9a0b14735ca98106de3271b0e7487d3f2c86111f --- /dev/null +++ b/src/test/kotlin/com/s3ai/corporate_app2/controllers/TicketsTest.kt @@ -0,0 +1,102 @@ +package com.s3ai.corporate_app2.controllers + +import com.fasterxml.jackson.databind.ObjectMapper +import com.s3ai.corporate_app2.Ticket +import com.s3ai.corporate_app2.TicketService +import com.s3ai.corporate_app2.User +import org.assertj.core.api.Assertions.assertThat +import org.hamcrest.CoreMatchers +import org.hamcrest.Matchers +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.http.MediaType +import org.springframework.test.context.jdbc.Sql +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders +import org.springframework.test.web.servlet.result.MockMvcResultMatchers +import java.util.* + + +@SpringBootTest +@AutoConfigureMockMvc +class TicketsTest { + @Autowired + private lateinit var service: TicketService + + @Autowired + private lateinit var controller: TicketsController + + @Autowired + private lateinit var mvc: MockMvc + + @Test + @Throws(Exception::class) + fun contextLoads() { + assertThat(controller).isNotNull + } + + @Test + @Throws(Exception::class) + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun updateTicketTest() { + val ticket = service.findAll().random() + print(ticket.id) + + ticket.movie = UUID.randomUUID().toString() + + mvc.perform(MockMvcRequestBuilders.post("/tickets/update") + .contentType(MediaType.APPLICATION_JSON) + .content(ObjectMapper().writeValueAsString(ticket))) + .andExpect(MockMvcResultMatchers.status().isFound) + .andExpect(MockMvcResultMatchers.redirectedUrl("/tickets/list")) + + val updatedTicket = service.findById(ticket.id!!) + assertThat(ticket == updatedTicket) + } + + @Test + @Throws(Exception::class) + fun editNonExistingIdRedirectToCreateTest() { + mvc.perform(MockMvcRequestBuilders.get("/tickets/edit")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andExpect(MockMvcResultMatchers.model().attribute("action", Matchers.equalTo("Create"))) + .andExpect(MockMvcResultMatchers.model().attribute("ticket", Matchers.notNullValue(Ticket::class.java))) + } + + @Test + @Throws(Exception::class) + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun editPageTest() { + val randomTicketId = service.findAll().map { e -> e.id }.distinct().random() + mvc.perform(MockMvcRequestBuilders.get("/tickets/edit?id=${randomTicketId}")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andExpect(MockMvcResultMatchers.model().attribute("action", Matchers.equalTo("Edit"))) + .andExpect(MockMvcResultMatchers.model().attribute("ticket", Matchers.notNullValue(Ticket::class.java))) + } + + @Test + @Throws(Exception::class) + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun listPageTest() { + mvc.perform(MockMvcRequestBuilders.get("/tickets/list")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andExpect(MockMvcResultMatchers.model().attribute("tickets", CoreMatchers.everyItem(Matchers.notNullValue(Ticket::class.java)))) + } + + @Test + @Throws(Exception::class) + fun listEmptyPageTest() { + mvc.perform(MockMvcRequestBuilders.get("/tickets/list")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andExpect(MockMvcResultMatchers.model().attribute("tickets", Matchers.notNullValue(MutableCollection::class.java))) + } + + @Test + @Throws(Exception::class) + fun editInvalidUUIDTest() { + mvc.perform(MockMvcRequestBuilders.get("/tickets/edit?id=totallyNotAnUUID")) + .andExpect(MockMvcResultMatchers.status().isBadRequest) + } +} \ No newline at end of file diff --git a/src/test/kotlin/com/s3ai/corporate_app2/controllers/UsersTest.kt b/src/test/kotlin/com/s3ai/corporate_app2/controllers/UsersTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..f58ead09f91aa5476fe0c571e19e434f58402951 --- /dev/null +++ b/src/test/kotlin/com/s3ai/corporate_app2/controllers/UsersTest.kt @@ -0,0 +1,103 @@ +package com.s3ai.corporate_app2.controllers + +import com.fasterxml.jackson.databind.ObjectMapper +import com.s3ai.corporate_app2.Cinema +import com.s3ai.corporate_app2.User +import com.s3ai.corporate_app2.UserService +import org.assertj.core.api.Assertions.assertThat +import org.hamcrest.CoreMatchers +import org.hamcrest.CoreMatchers.everyItem +import org.hamcrest.Matchers +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.http.MediaType +import org.springframework.test.context.jdbc.Sql +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders +import org.springframework.test.web.servlet.result.MockMvcResultMatchers +import java.util.* + + +@SpringBootTest +@AutoConfigureMockMvc +class UsersTest { + @Autowired + private lateinit var service: UserService + + @Autowired + private lateinit var controller: UsersController + + @Autowired + private lateinit var mvc: MockMvc + + @Test + @Throws(Exception::class) + fun contextLoads() { + assertThat(controller).isNotNull + } + + @Test + @Throws(Exception::class) + @Sql("/usersFill.sql") + fun updateUserTest() { + val user = service.findAll().random() + print(user.id) + + user.name = UUID.randomUUID().toString() + + mvc.perform(MockMvcRequestBuilders.post("/users/update") + .contentType(MediaType.APPLICATION_JSON) + .content(ObjectMapper().writeValueAsString(user))) + .andExpect(MockMvcResultMatchers.status().isFound) + .andExpect(MockMvcResultMatchers.redirectedUrl("/users/list")) + + val updatedUser = service.findById(user.id!!) + assertThat(user == updatedUser) + } + + @Test + @Throws(Exception::class) + fun editNonExistingIdRedirectToCreateTest() { + mvc.perform(MockMvcRequestBuilders.get("/users/edit")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andExpect(MockMvcResultMatchers.model().attribute("action", Matchers.equalTo("Create"))) + .andExpect(MockMvcResultMatchers.model().attribute("user", Matchers.notNullValue(User::class.java))) + } + + @Test + @Throws(Exception::class) + @Sql("/usersFill.sql") + fun editPageTest() { + val randomUserId = service.findAll().map { e -> e.id }.distinct().random() + mvc.perform(MockMvcRequestBuilders.get("/users/edit?id=${randomUserId}")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andExpect(MockMvcResultMatchers.model().attribute("action", Matchers.equalTo("Edit"))) + .andExpect(MockMvcResultMatchers.model().attribute("user", Matchers.notNullValue(User::class.java))) + } + + @Test + @Throws(Exception::class) + @Sql("/usersFill.sql") + fun listPageTest() { + mvc.perform(MockMvcRequestBuilders.get("/users/list")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andExpect(MockMvcResultMatchers.model().attribute("users", everyItem(Matchers.notNullValue(User::class.java)))) + } + + @Test + @Throws(Exception::class) + fun listEmptyPageTest() { + mvc.perform(MockMvcRequestBuilders.get("/users/list")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andExpect(MockMvcResultMatchers.model().attribute("users", Matchers.notNullValue(MutableCollection::class.java))) + } + + @Test + @Throws(Exception::class) + fun editInvalidUUIDTest() { + mvc.perform(MockMvcRequestBuilders.get("/users/edit?id=totallyNotAnUUID")) + .andExpect(MockMvcResultMatchers.status().isBadRequest) + } +} diff --git a/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiTest.kt b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..f2692518bd8857143bc1b807f8c49ae8bbac6f75 --- /dev/null +++ b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiTest.kt @@ -0,0 +1,78 @@ +package com.s3ai.corporate_app2.controllers.rest + +import com.s3ai.corporate_app2.CinemaService +import com.s3ai.corporate_app2.TicketService +import org.assertj.core.api.Assertions +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.hasItem +import org.hamcrest.core.IsNot.not +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.jdbc.Sql +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.MvcResult +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get +import org.springframework.test.web.servlet.result.MockMvcResultMatchers +import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status +import java.util.* + +@SpringBootTest +@AutoConfigureMockMvc +class CinemaApiTest { + @Autowired + private lateinit var service: CinemaService + + @Autowired + private lateinit var ticketService: TicketService + + @Autowired + private lateinit var mvc: MockMvc + + @Test + @Throws(Exception::class) + fun contextLoads() { + Assertions.assertThat(mvc).isNotNull + Assertions.assertThat(service).isNotNull + } + + @Test + @Sql("/cinemasFill.sql") + fun fillTest() { + mvc.perform(get("/api/cinemas/fill")) + .andDo { e: MvcResult -> println(e.response) } + .andExpect(status().isOk) + assertThat(service.findAll().size, equalTo(401)) + } + + @Test + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun deleteTest() { + val randomCinemaId = ticketService.findAll().map { e -> e.cinema?.id }.distinct().random() + print(randomCinemaId) + mvc.perform(delete("/api/cinemas/delete?id=${randomCinemaId}")) + .andExpect(status().isOk) + val tickets = ticketService.findAll().map { e -> e.cinema!!.id }.distinct() + assertThat(tickets, not(hasItem(randomCinemaId))) + } + + @Test + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun deleteNonExistingIdReturns404Test() { + val randomCinemaId = UUID.randomUUID() + print(randomCinemaId) + mvc.perform(delete("/api/cinemas/delete?id=${randomCinemaId}")) + .andExpect(status().isNotFound) + } + + @Test + @Throws(Exception::class) + fun deleteInvalidUUIDTest() { + mvc.perform(delete("/api/cinemas/delete?id=totallyNotAnUUID")) + .andExpect(status().isBadRequest) + } +} \ No newline at end of file diff --git a/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiTest.kt b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..b493ac1a651e2107b84b98e66f3949e517039be7 --- /dev/null +++ b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiTest.kt @@ -0,0 +1,70 @@ +package com.s3ai.corporate_app2.controllers.rest + +import com.s3ai.corporate_app2.TicketService +import org.assertj.core.api.Assertions +import org.hamcrest.MatcherAssert +import org.hamcrest.Matchers +import org.hamcrest.core.IsNot +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.jdbc.Sql +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.MvcResult +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders +import org.springframework.test.web.servlet.result.MockMvcResultMatchers +import java.util.* + +@SpringBootTest +@AutoConfigureMockMvc +class TicketApiTest { + @Autowired + private lateinit var service: TicketService + + @Autowired + private lateinit var mvc: MockMvc + + @Test + @Throws(Exception::class) + fun contextLoads() { + Assertions.assertThat(mvc).isNotNull + Assertions.assertThat(service).isNotNull + } + + @Test + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun fillTest() { + mvc.perform(MockMvcRequestBuilders.get("/api/tickets/fill")) + .andDo { e: MvcResult -> println(e.response) } + .andExpect(MockMvcResultMatchers.status().isOk) + MatcherAssert.assertThat(service.findAll().size, Matchers.equalTo(401)) + } + + @Test + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun deleteTest() { + val randomTicketId = service.findAll().map { e -> e.id }.distinct().random() + print(randomTicketId) + mvc.perform(MockMvcRequestBuilders.delete("/api/tickets/delete?id=${randomTicketId}")) + .andExpect(MockMvcResultMatchers.status().isOk) + val tickets = service.findAll().map { e -> e.id }.distinct() + MatcherAssert.assertThat(tickets, IsNot.not(Matchers.hasItem(randomTicketId))) + } + + @Test + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun deleteNonExistingIdReturns404Test() { + val randomTicketId = UUID.randomUUID() + print(randomTicketId) + mvc.perform(MockMvcRequestBuilders.delete("/api/tickets/delete?id=${randomTicketId}")) + .andExpect(MockMvcResultMatchers.status().isNotFound) + } + + @Test + @Throws(Exception::class) + fun deleteInvalidUUIDTest() { + mvc.perform(MockMvcRequestBuilders.delete("/api/tickets/delete?id=totallyNotAnUUID")) + .andExpect(MockMvcResultMatchers.status().isBadRequest) + } +} \ No newline at end of file diff --git a/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiTest.kt b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..55ee715ba587b189d34b3f930169adb6c6e7dbe4 --- /dev/null +++ b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiTest.kt @@ -0,0 +1,74 @@ +package com.s3ai.corporate_app2.controllers.rest + +import com.s3ai.corporate_app2.UserService +import com.s3ai.corporate_app2.TicketService +import org.assertj.core.api.Assertions +import org.hamcrest.MatcherAssert +import org.hamcrest.Matchers +import org.hamcrest.core.IsNot +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.jdbc.Sql +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.MvcResult +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders +import org.springframework.test.web.servlet.result.MockMvcResultMatchers +import java.util.* + +@SpringBootTest +@AutoConfigureMockMvc +class UserApiTest { + @Autowired + private lateinit var service: UserService + + @Autowired + private lateinit var ticketService: TicketService + + @Autowired + private lateinit var mvc: MockMvc + + @Test + @Throws(Exception::class) + fun contextLoads() { + Assertions.assertThat(mvc).isNotNull + Assertions.assertThat(service).isNotNull + } + + @Test + @Sql("/usersFill.sql") + fun fillTest() { + mvc.perform(MockMvcRequestBuilders.get("/api/users/fill")) + .andDo { e: MvcResult -> println(e.response) } + .andExpect(MockMvcResultMatchers.status().isOk) + MatcherAssert.assertThat(service.findAll().size, Matchers.equalTo(401)) + } + + @Test + @Sql("/usersFill.sql", "/cinemasFill.sql", "/ticketsFill.sql") + fun deleteTest() { + val randomUserId = ticketService.findAll().map { e -> e.user?.id }.distinct().random() + print(randomUserId) + mvc.perform(MockMvcRequestBuilders.delete("/api/users/delete?id=${randomUserId}")) + .andExpect(MockMvcResultMatchers.status().isOk) + val tickets = ticketService.findAll().map { e -> e.user!!.id }.distinct() + MatcherAssert.assertThat(tickets, IsNot.not(Matchers.hasItem(randomUserId))) + } + + @Test + @Sql("/usersFill.sql", "/cinemasFill.sql", "/ticketsFill.sql") + fun deleteNonExistingIdReturns404Test() { + val randomUserId = UUID.randomUUID() + print(randomUserId) + mvc.perform(MockMvcRequestBuilders.delete("/api/users/delete?id=${randomUserId}")) + .andExpect(MockMvcResultMatchers.status().isNotFound) + } + + @Test + @Throws(Exception::class) + fun deleteInvalidUUIDTest() { + mvc.perform(MockMvcRequestBuilders.delete("/api/users/delete?id=totallyNotAnUUID")) + .andExpect(MockMvcResultMatchers.status().isBadRequest) + } +} \ No newline at end of file diff --git a/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/formats/CinemasFormattingTests.kt b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/formats/CinemasFormattingTests.kt new file mode 100644 index 0000000000000000000000000000000000000000..5428d37656617d791a2a8d38f3fdf0aab91e7e73 --- /dev/null +++ b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/formats/CinemasFormattingTests.kt @@ -0,0 +1,84 @@ +package com.s3ai.corporate_app2.controllers.rest.formats + +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.databind.MapperFeature +import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule +import com.fasterxml.jackson.dataformat.xml.XmlMapper +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import com.fasterxml.jackson.module.kotlin.registerKotlinModule +import com.s3ai.corporate_app2.Cinema +import com.s3ai.corporate_app2.CinemaService +import com.s3ai.corporate_app2.kotlinJsonMapper +import com.s3ai.corporate_app2.kotlinXmlMapper +import org.assertj.core.api.Assertions +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.MatcherAssert.assertThat +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.jdbc.Sql +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders +import org.springframework.test.web.servlet.result.MockMvcResultMatchers + + +@SpringBootTest +@AutoConfigureMockMvc +class CinemasFormattingTests { + @Autowired + private lateinit var service: CinemaService + + @Autowired + private lateinit var mvc: MockMvc + + @Test + @Throws(Exception::class) + fun contextLoads() { + Assertions.assertThat(mvc).isNotNull + Assertions.assertThat(service).isNotNull + } + + @Test + @Sql("/cinemasFill.sql") + fun allJSONTest() { + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/json/cinemas/all")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val cinemas: List<Cinema> = kotlinJsonMapper.readValue(mvcResult.response.contentAsString) + assertThat(cinemas.size, equalTo(100)) + } + + @Test + @Sql("/cinemasFill.sql") + fun itemJSONTest() { + val randomCinema = service.findAll().random() + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/json/cinemas/item/${randomCinema.id}")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val parsedCinema: Cinema = kotlinJsonMapper.readValue(mvcResult.response.contentAsString) + assertThat(parsedCinema.toString(), equalTo(randomCinema.toString())) + } + + @Test + @Sql("/cinemasFill.sql") + fun allXMLTest() { + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/xml/cinemas/all")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val cinemas: List<Cinema> = kotlinXmlMapper.readValue(mvcResult.response.contentAsString) + assertThat(cinemas.size, equalTo(100)) + } + + @Test + @Sql("/cinemasFill.sql") + fun itemXMLTest() { + val randomCinema = service.findAll().random() + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/xml/cinemas/item/${randomCinema.id}")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val parsedCinema: Cinema = kotlinXmlMapper.readValue(mvcResult.response.contentAsString) + assertThat(parsedCinema.toString(), equalTo(randomCinema.toString())) + } +} \ No newline at end of file diff --git a/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/formats/TicketsFormattingTests.kt b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/formats/TicketsFormattingTests.kt new file mode 100644 index 0000000000000000000000000000000000000000..2af121d0cada32827f2dc4632132b4022b384778 --- /dev/null +++ b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/formats/TicketsFormattingTests.kt @@ -0,0 +1,78 @@ +package com.s3ai.corporate_app2.controllers.rest.formats + +import com.fasterxml.jackson.module.kotlin.readValue +import com.s3ai.corporate_app2.Ticket +import com.s3ai.corporate_app2.TicketService +import com.s3ai.corporate_app2.kotlinJsonMapper +import com.s3ai.corporate_app2.kotlinXmlMapper +import org.assertj.core.api.Assertions +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.MatcherAssert.assertThat +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.jdbc.Sql +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders +import org.springframework.test.web.servlet.result.MockMvcResultMatchers + + +@SpringBootTest +@AutoConfigureMockMvc +class TicketsFormattingTests { + @Autowired + private lateinit var service: TicketService + + @Autowired + private lateinit var mvc: MockMvc + + @Test + @Throws(Exception::class) + fun contextLoads() { + Assertions.assertThat(mvc).isNotNull + Assertions.assertThat(service).isNotNull + } + + @Test + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun allJSONTest() { + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/json/tickets/all")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val cinemas: List<Ticket> = kotlinJsonMapper.readValue(mvcResult.response.contentAsString) + assertThat(cinemas.size, equalTo(100)) + } + + @Test + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun itemJSONTest() { + val randomTicket = service.findAll().random() + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/json/tickets/item/${randomTicket.id}")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val parsedTicket: Ticket = kotlinJsonMapper.readValue(mvcResult.response.contentAsString) + assertThat(parsedTicket.toString(), equalTo(randomTicket.toString())) + } + + @Test + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun allXMLTest() { + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/xml/tickets/all")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val cinemas: List<Ticket> = kotlinXmlMapper.readValue(mvcResult.response.contentAsString) + assertThat(cinemas.size, equalTo(100)) + } + + @Test + @Sql("/cinemasFill.sql", "/usersFill.sql", "/ticketsFill.sql") + fun itemXMLTest() { + val randomTicket = service.findAll().random() + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/xml/tickets/item/${randomTicket.id}")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val parsedTicket: Ticket = kotlinXmlMapper.readValue(mvcResult.response.contentAsString) + assertThat(parsedTicket.toString(), equalTo(randomTicket.toString())) + } +} \ No newline at end of file diff --git a/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/formats/UsersFormattingTests.kt b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/formats/UsersFormattingTests.kt new file mode 100644 index 0000000000000000000000000000000000000000..a6cd837e536d68cd4acbdde5c6bdbb0c998d45cc --- /dev/null +++ b/src/test/kotlin/com/s3ai/corporate_app2/controllers/rest/formats/UsersFormattingTests.kt @@ -0,0 +1,83 @@ +package com.s3ai.corporate_app2.controllers.rest.formats + +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.databind.MapperFeature +import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule +import com.fasterxml.jackson.dataformat.xml.XmlMapper +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import com.fasterxml.jackson.module.kotlin.registerKotlinModule +import com.s3ai.corporate_app2.* +import com.s3ai.corporate_app2.kotlinJsonMapper +import com.s3ai.corporate_app2.kotlinXmlMapper +import org.assertj.core.api.Assertions +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.MatcherAssert.assertThat +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.jdbc.Sql +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders +import org.springframework.test.web.servlet.result.MockMvcResultMatchers + + +@SpringBootTest +@AutoConfigureMockMvc +class UsersFormattingTests { + @Autowired + private lateinit var service: UserService + + @Autowired + private lateinit var mvc: MockMvc + + @Test + @Throws(Exception::class) + fun contextLoads() { + Assertions.assertThat(mvc).isNotNull + Assertions.assertThat(service).isNotNull + } + + @Test + @Sql("/usersFill.sql") + fun allJSONTest() { + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/json/users/all")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val cinemas: List<User> = kotlinJsonMapper.readValue(mvcResult.response.contentAsString) + assertThat(cinemas.size, equalTo(100)) + } + + @Test + @Sql("/usersFill.sql") + fun itemJSONTest() { + val randomUser = service.findAll().random() + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/json/users/item/${randomUser.id}")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val parsedUser: User = kotlinJsonMapper.readValue(mvcResult.response.contentAsString) + assertThat(parsedUser.toString(), equalTo(randomUser.toString())) + } + + @Test + @Sql("/usersFill.sql") + fun allXMLTest() { + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/xml/users/all")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val cinemas: List<User> = kotlinXmlMapper.readValue(mvcResult.response.contentAsString) + assertThat(cinemas.size, equalTo(100)) + } + + @Test + @Sql("/usersFill.sql") + fun itemXMLTest() { + val randomUser = service.findAll().random() + val mvcResult = mvc.perform(MockMvcRequestBuilders.get("/api/xml/users/item/${randomUser.id}")) + .andExpect(MockMvcResultMatchers.status().isOk) + .andReturn() + val parsedUser: User = kotlinXmlMapper.readValue(mvcResult.response.contentAsString) + assertThat(parsedUser.toString(), equalTo(randomUser.toString())) + } +} \ No newline at end of file