You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WF-WEB-API/src/test/java/com/example/wfwebapi/controller/CaracterControllerTest.java

119 lines
4.0 KiB

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<Caracter> postResponse = restTemplate.postForEntity(getUrl(""), caracter, Caracter.class);
assertEquals(HttpStatus.OK, postResponse.getStatusCode());
Long id = Objects.requireNonNull(postResponse.getBody()).getId();
ResponseEntity<Caracter> 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<Caracter[]> 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<Caracter> request = new HttpEntity<>(c);
ResponseEntity<Caracter> 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<Void> 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<String> response = restTemplate.getForEntity(getUrl("/999999"), String.class);
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
assertTrue(response.getBody().contains("Caracter non trouvé"));
}
@Test
void testDeleteCaracterNotFound() {
ResponseEntity<String> response = restTemplate.exchange(getUrl("?id=999999"), HttpMethod.DELETE, null, String.class);
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
assertTrue(response.getBody().contains("Caracter non trouvé"));
}
}