package com.example.wfwebapi.controller; import com.example.wfwebapi.model.Caracter; import com.example.wfwebapi.model.Image; import com.example.wfwebapi.repository.CaracterRepository; import com.example.wfwebapi.repository.ImageRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.http.*; import java.util.Objects; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) class CaracterControllerTest { @LocalServerPort private int port; @Autowired private TestRestTemplate restTemplate; @Autowired private CaracterRepository caracterRepository; @Autowired private ImageRepository imageRepository; private Image image; private String getUrl(String path) { return "http://localhost:" + port + "/api/v1/caracter" + path; } @BeforeEach void setup() { caracterRepository.deleteAll(); imageRepository.deleteAll(); image = new Image(); image.setImgPath("path/to/image.png"); imageRepository.save(image); } @Test void testCreateAndGetCaracterById() { Caracter caracter = new Caracter(); caracter.setCaracter("Déterminé"); caracter.setImage(image); ResponseEntity postResponse = restTemplate.postForEntity(getUrl(""), caracter, Caracter.class); assertEquals(HttpStatus.OK, postResponse.getStatusCode()); Long id = Objects.requireNonNull(postResponse.getBody()).getId(); ResponseEntity getResponse = restTemplate.getForEntity(getUrl("/" + id), Caracter.class); assertEquals(HttpStatus.OK, getResponse.getStatusCode()); assertEquals("Déterminé", getResponse.getBody().getCaracter()); } @Test void testGetAllCaracters() { Caracter c = new Caracter(); c.setCaracter("Créatif"); c.setImage(image); caracterRepository.save(c); ResponseEntity response = restTemplate.getForEntity(getUrl("/"), Caracter[].class); assertEquals(HttpStatus.OK, response.getStatusCode()); assertTrue(response.getBody().length >= 1); } @Test void testUpdateCaracter() { Caracter c = new Caracter(); c.setCaracter("Patient"); c.setImage(image); c = caracterRepository.save(c); c.setCaracter("Impulsif"); HttpEntity request = new HttpEntity<>(c); ResponseEntity response = restTemplate.exchange(getUrl(""), HttpMethod.PUT, request, Caracter.class); assertEquals(HttpStatus.OK, response.getStatusCode()); assertEquals("Impulsif", response.getBody().getCaracter()); } @Test void testDeleteCaracter() { Caracter c = new Caracter(); c.setCaracter("Sérieux"); c.setImage(image); c = caracterRepository.save(c); ResponseEntity response = restTemplate.exchange(getUrl("?id=" + c.getId()), HttpMethod.DELETE, null, Void.class); assertEquals(HttpStatus.OK, response.getStatusCode()); assertFalse(caracterRepository.existsById(c.getId())); } @Test void testGetCaracterNotFound() { ResponseEntity response = restTemplate.getForEntity(getUrl("/999999"), String.class); assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); assertTrue(response.getBody().contains("Caracter non trouvé")); } @Test void testDeleteCaracterNotFound() { ResponseEntity response = restTemplate.exchange(getUrl("?id=999999"), HttpMethod.DELETE, null, String.class); assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); assertTrue(response.getBody().contains("Caracter non trouvé")); } }