diff --git a/.drone.yaml b/.drone.yml
similarity index 100%
rename from .drone.yaml
rename to .drone.yml
diff --git a/pom.xml b/pom.xml
index d1cece5..0c421f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,6 +29,37 @@
h2
runtime
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.10.0
+ test
+
+
+
+
+ org.mockito
+ mockito-core
+ 5.10.0
+ test
+
+
+
+
+ org.mockito
+ mockito-junit-jupiter
+ 5.10.0
+ test
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
org.springframework.boot
spring-boot-starter-hateoas
@@ -78,6 +109,16 @@
false
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.1.2
+
+
+ **/*Test.java
+
+
+
org.springframework.boot
spring-boot-maven-plugin
diff --git a/src/main/java/com/example/wfwebapi/controller/FavoriteController.java b/src/main/java/com/example/wfwebapi/controller/FavoriteController.java
index 3c938d8..a87a426 100644
--- a/src/main/java/com/example/wfwebapi/controller/FavoriteController.java
+++ b/src/main/java/com/example/wfwebapi/controller/FavoriteController.java
@@ -4,7 +4,11 @@ import java.util.List;
import com.example.wfwebapi.exception.ResourceNotFoundException;
import com.example.wfwebapi.model.Favorite;
import com.example.wfwebapi.model.FavoriteId;
+import com.example.wfwebapi.model.User;
+import com.example.wfwebapi.model.Quote;
import com.example.wfwebapi.repository.FavoriteRepository;
+import com.example.wfwebapi.repository.UserRepository;
+import com.example.wfwebapi.repository.QuoteRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -15,6 +19,12 @@ public class FavoriteController {
@Autowired
private FavoriteRepository favoriteRepository;
+ @Autowired
+ private UserRepository userRepository;
+
+ @Autowired
+ private QuoteRepository quoteRepository;
+
@GetMapping("/{userId}")
public List getFavoritesByUser(@PathVariable Long userId) {
return favoriteRepository.findByUser_Id(userId);
@@ -22,8 +32,15 @@ public class FavoriteController {
@PostMapping
public Favorite addFavorite(@RequestParam Long user, @RequestParam Long quote) {
+ User u = userRepository.findById(user)
+ .orElseThrow(() -> new ResourceNotFoundException("Utilisateur non trouvé : " + user));
+ Quote q = quoteRepository.findById(quote)
+ .orElseThrow(() -> new ResourceNotFoundException("Citation non trouvée : " + quote));
+
Favorite favorite = new Favorite();
favorite.setId(new FavoriteId(user, quote));
+ favorite.setUser(u);
+ favorite.setQuote(q);
return favoriteRepository.save(favorite);
}
diff --git a/src/main/java/com/example/wfwebapi/controller/QuizController.java b/src/main/java/com/example/wfwebapi/controller/QuizController.java
index 504c6af..9287ad2 100644
--- a/src/main/java/com/example/wfwebapi/controller/QuizController.java
+++ b/src/main/java/com/example/wfwebapi/controller/QuizController.java
@@ -37,6 +37,7 @@ public class QuizController {
.map(q -> {
q.setTitle(updatedQuiz.getTitle());
q.setImage(updatedQuiz.getImage());
+ q.setNbQuest(updatedQuiz.getNbQuest()); // ✅ champ maintenant mis à jour
return quizRepository.save(q);
}).orElseThrow(() -> new ResourceNotFoundException("Quiz non trouvé : " + updatedQuiz.getId()));
}
diff --git a/src/main/java/com/example/wfwebapi/controller/QuoteController.java b/src/main/java/com/example/wfwebapi/controller/QuoteController.java
index c287f57..7b4c647 100644
--- a/src/main/java/com/example/wfwebapi/controller/QuoteController.java
+++ b/src/main/java/com/example/wfwebapi/controller/QuoteController.java
@@ -32,7 +32,8 @@ public class QuoteController {
@GetMapping("/all")
public CollectionModel> getAllQuotes(@RequestParam int index, @RequestParam int count) {
List> quotes = quoteRepository.findAll(PageRequest.of(index, count))
- .stream().map(assembler::toModel)
+ .stream()
+ .map(assembler::toModel)
.collect(Collectors.toList());
return CollectionModel.of(quotes);
}
@@ -40,7 +41,6 @@ public class QuoteController {
@GetMapping("/dailyquote")
public EntityModel getDailyQuote(@RequestParam int year, @RequestParam int month,
@RequestParam int day, @RequestParam String lang) {
- // Exemple : renvoi la première citation correspondant à la langue
Quote quote = quoteRepository.findAll().stream()
.filter(q -> q.getLangue().equalsIgnoreCase(lang))
.findFirst()
@@ -50,8 +50,8 @@ public class QuoteController {
@PostMapping
public EntityModel createQuote(@RequestBody Quote newQuote) {
- Quote quote = quoteRepository.save(newQuote);
- return assembler.toModel(quote);
+ Quote saved = quoteRepository.save(newQuote);
+ return assembler.toModel(saved);
}
@PutMapping
@@ -67,14 +67,16 @@ public class QuoteController {
q.setSource(updatedQuote.getSource());
q.setUserVerif(updatedQuote.getUserVerif());
return quoteRepository.save(q);
- }).orElseThrow(() -> new ResourceNotFoundException("Citation non trouvée : " + updatedQuote.getId()));
+ })
+ .orElseThrow(() -> new ResourceNotFoundException("Citation non trouvée : " + updatedQuote.getId()));
return assembler.toModel(quote);
}
@DeleteMapping("/delete")
public void deleteQuote(@RequestParam Long idQuote) {
- if (!quoteRepository.existsById(idQuote))
+ if (!quoteRepository.existsById(idQuote)) {
throw new ResourceNotFoundException("Citation non trouvée : " + idQuote);
+ }
quoteRepository.deleteById(idQuote);
}
}
diff --git a/src/test/java/com/example/wfwebapi/assembler/QuoteModelAssemblerTest.java b/src/test/java/com/example/wfwebapi/assembler/QuoteModelAssemblerTest.java
new file mode 100644
index 0000000..1b4cb81
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/assembler/QuoteModelAssemblerTest.java
@@ -0,0 +1,54 @@
+package com.example.wfwebapi.assembler;
+
+import com.example.wfwebapi.controller.QuoteController;
+import com.example.wfwebapi.model.Quote;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.hateoas.EntityModel;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
+
+class QuoteModelAssemblerTest {
+
+ private QuoteModelAssembler assembler;
+ private Quote quote;
+ private EntityModel model;
+
+ @BeforeEach
+ void setUp() {
+ assembler = new QuoteModelAssembler();
+ quote = new Quote();
+ quote.setId(1L);
+ model = assembler.toModel(quote);
+ }
+
+ @Test
+ void testModelContent() {
+ assertEquals(quote, model.getContent());
+ }
+
+ @Test
+ void testHasSelfLink() {
+ assertTrue(model.getLinks().hasLink("self"));
+ }
+
+ @Test
+ void testHasQuotesLink() {
+ assertTrue(model.getLinks().hasLink("quotes"));
+ }
+
+ @Test
+ void testSelfLinkHref() {
+ String expectedHref = linkTo(methodOn(QuoteController.class).getQuoteById(1L)).withSelfRel().getHref();
+ String actualHref = model.getRequiredLink("self").getHref();
+ assertEquals(expectedHref, actualHref);
+ }
+
+ @Test
+ void testQuotesLinkHref() {
+ String expectedHref = linkTo(methodOn(QuoteController.class).getAllQuotes(0, 10)).withRel("quotes").getHref();
+ String actualHref = model.getRequiredLink("quotes").getHref();
+ assertEquals(expectedHref, actualHref);
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/AdminControllerTest.java b/src/test/java/com/example/wfwebapi/controller/AdminControllerTest.java
new file mode 100644
index 0000000..34139e6
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/AdminControllerTest.java
@@ -0,0 +1,51 @@
+package com.example.wfwebapi.controller;
+
+import com.example.wfwebapi.exception.ResourceNotFoundException;
+import com.example.wfwebapi.model.Admin;
+import com.example.wfwebapi.repository.AdminRepository;
+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.server.LocalServerPort;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class AdminControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired
+ private AdminRepository adminRepository;
+
+ private String baseUrl() {
+ return "http://localhost:" + port + "/api/v1/admin/";
+ }
+
+ @Test
+ void testGetAdminFound() {
+ Admin admin = new Admin();
+ admin.setUserId(999L);
+ adminRepository.save(admin);
+
+ RestTemplate restTemplate = new RestTemplate();
+ ResponseEntity response = restTemplate.getForEntity(baseUrl() + "999", Admin.class);
+
+ assertEquals(200, response.getStatusCodeValue());
+ assertEquals(999L, response.getBody().getUserId());
+ }
+
+ @Test
+ void testGetAdminNotFound() {
+ RestTemplate restTemplate = new RestTemplate();
+
+ Exception exception = assertThrows(Exception.class, () ->
+ restTemplate.getForEntity(baseUrl() + "123456", Admin.class)
+ );
+
+ assertTrue(exception.getMessage().contains("404"));
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/AuthControllerTest.java b/src/test/java/com/example/wfwebapi/controller/AuthControllerTest.java
new file mode 100644
index 0000000..269d9f0
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/AuthControllerTest.java
@@ -0,0 +1,111 @@
+package com.example.wfwebapi.controller;
+
+import com.example.wfwebapi.model.Image;
+import com.example.wfwebapi.model.User;
+import com.example.wfwebapi.repository.ImageRepository;
+import com.example.wfwebapi.repository.UserRepository;
+import com.example.wfwebapi.security.JwtTokenProvider;
+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 static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class AuthControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired
+ private AuthController authController;
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Autowired
+ private ImageRepository imageRepository;
+
+ @Autowired
+ private JwtTokenProvider tokenProvider;
+
+ @Autowired
+ private TestRestTemplate restTemplate;
+
+ private String getUrl(String path) {
+ return "http://localhost:" + port + "/api/v1/auth" + path;
+ }
+
+ @BeforeEach
+ void setup() {
+ userRepository.deleteAll();
+ imageRepository.deleteAll();
+
+ Image image = new Image();
+ image.setImgPath("fake/path.png");
+ image = imageRepository.save(image);
+
+ User user = new User();
+ user.setUsername("john");
+ user.setPassword("password123");
+ user.setEmail("john@example.com");
+ user.setCreation(java.time.LocalDate.now());
+ user.setImage(image);
+
+ userRepository.save(user);
+ }
+
+ @Test
+ void contextLoads() {
+ assertNotNull(authController);
+ assertNotNull(userRepository);
+ assertNotNull(tokenProvider);
+ }
+
+ @Test
+ void testLoginSuccess() {
+ AuthController.AuthRequest request = new AuthController.AuthRequest();
+ request.setUsername("john");
+ request.setPassword("password123");
+
+ ResponseEntity response = restTemplate.postForEntity(
+ getUrl("/login"), request, AuthController.AuthResponse.class
+ );
+
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ assertNotNull(response.getBody());
+ assertNotNull(response.getBody().getToken());
+ }
+
+ @Test
+ void testLoginInvalidPassword() {
+ AuthController.AuthRequest request = new AuthController.AuthRequest();
+ request.setUsername("john");
+ request.setPassword("wrongpass");
+
+ ResponseEntity response = restTemplate.postForEntity(
+ getUrl("/login"), request, String.class
+ );
+
+ assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
+ assertEquals("Mot de passe invalide", response.getBody());
+ }
+
+ @Test
+ void testLoginUserNotFound() {
+ AuthController.AuthRequest request = new AuthController.AuthRequest();
+ request.setUsername("unknown");
+ request.setPassword("any");
+
+ ResponseEntity response = restTemplate.postForEntity(
+ getUrl("/login"), request, String.class
+ );
+
+ assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
+ assertTrue(response.getBody().contains("Utilisateur non trouvé"));
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/CaracterControllerTest.java b/src/test/java/com/example/wfwebapi/controller/CaracterControllerTest.java
new file mode 100644
index 0000000..165965b
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/CaracterControllerTest.java
@@ -0,0 +1,118 @@
+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é"));
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/CommentaryControllerTest.java b/src/test/java/com/example/wfwebapi/controller/CommentaryControllerTest.java
new file mode 100644
index 0000000..2563550
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/CommentaryControllerTest.java
@@ -0,0 +1,138 @@
+package com.example.wfwebapi.controller;
+
+import com.example.wfwebapi.model.*;
+import com.example.wfwebapi.repository.*;
+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.time.LocalDate;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class CommentaryControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired private TestRestTemplate restTemplate;
+
+ @Autowired private CommentaryRepository commentaryRepository;
+ @Autowired private QuoteRepository quoteRepository;
+ @Autowired private UserRepository userRepository;
+ @Autowired private ImageRepository imageRepository;
+ @Autowired private CaracterRepository caracterRepository;
+ @Autowired private SourceRepository sourceRepository;
+
+ private Quote quote;
+ private User user;
+
+ private String getUrl(String path) {
+ return "http://localhost:" + port + "/api/v1/commentary" + path;
+ }
+
+ @BeforeEach
+ void setup() {
+ clearDatabase();
+
+ Image image = new Image();
+ image.setImgPath("test.png");
+ imageRepository.save(image);
+
+ user = new User();
+ user.setUsername("user");
+ user.setEmail("user@mail.com");
+ user.setPassword("pass");
+ user.setCreation(LocalDate.now());
+ user.setImage(image);
+ userRepository.save(user);
+
+ Caracter caracter = new Caracter();
+ caracter.setCaracter("Fort");
+ caracter.setImage(image);
+ caracterRepository.save(caracter);
+
+ Source source = new Source();
+ source.setTitle("source");
+ source.setDateS(2000);
+ sourceRepository.save(source);
+
+ quote = new Quote();
+ quote.setContent("Ceci est une citation.");
+ quote.setLangue("fr");
+ quote.setIsValide(true);
+ quote.setLikes(0);
+ quote.setReason("valid");
+ quote.setCaracter(caracter);
+ quote.setSource(source);
+ quote.setUserVerif(user);
+ quoteRepository.save(quote);
+ }
+
+ void clearDatabase() {
+ commentaryRepository.deleteAll();
+ quoteRepository.deleteAll();
+ caracterRepository.deleteAll();
+ sourceRepository.deleteAll();
+ userRepository.deleteAll();
+ imageRepository.deleteAll();
+ }
+
+ @Test
+ void testAddAndGetCommentary() {
+ Commentary commentary = new Commentary();
+ commentary.setUser(user);
+ commentary.setComment("Super citation !");
+ commentary.setDateC(LocalDate.now());
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+
+ HttpEntity request = new HttpEntity<>(commentary, headers);
+
+ ResponseEntity postResponse = restTemplate.postForEntity(
+ getUrl("?quote=" + quote.getId()), request, Commentary.class);
+
+ assertEquals(HttpStatus.OK, postResponse.getStatusCode());
+ assertNotNull(postResponse.getBody().getId());
+
+ ResponseEntity getResponse = restTemplate.getForEntity(
+ getUrl("/" + quote.getId()), Commentary[].class);
+
+ assertEquals(HttpStatus.OK, getResponse.getStatusCode());
+ assertEquals(1, getResponse.getBody().length);
+ }
+
+ @Test
+ void testDeleteCommentary() {
+ Commentary commentary = new Commentary();
+ commentary.setUser(user);
+ commentary.setQuote(quote);
+ commentary.setComment("À supprimer");
+ commentary.setDateC(LocalDate.now());
+ commentaryRepository.save(commentary);
+
+ ResponseEntity deleteResponse = restTemplate.exchange(
+ getUrl("?id=" + quote.getId()), HttpMethod.DELETE, null, Void.class);
+
+ assertEquals(HttpStatus.OK, deleteResponse.getStatusCode());
+
+ List remaining = commentaryRepository.findByQuote_Id(quote.getId());
+ assertTrue(remaining.isEmpty());
+ }
+
+ @Test
+ void testDeleteCommentaryNotFound() {
+ ResponseEntity response = restTemplate.exchange(
+ getUrl("?id=99999"), HttpMethod.DELETE, null, String.class);
+
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Aucun commentaire trouvé"));
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/DailyQuoteControllerTest.java b/src/test/java/com/example/wfwebapi/controller/DailyQuoteControllerTest.java
new file mode 100644
index 0000000..ee036f2
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/DailyQuoteControllerTest.java
@@ -0,0 +1,103 @@
+package com.example.wfwebapi.controller;
+
+import com.example.wfwebapi.model.*;
+import com.example.wfwebapi.repository.*;
+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.time.LocalDate;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class DailyQuoteControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired private TestRestTemplate restTemplate;
+
+ @Autowired private DailyQuoteRepository dailyQuoteRepository;
+ @Autowired private QuoteRepository quoteRepository;
+ @Autowired private UserRepository userRepository;
+ @Autowired private ImageRepository imageRepository;
+ @Autowired private CaracterRepository caracterRepository;
+ @Autowired private SourceRepository sourceRepository;
+
+ private Quote quote;
+
+ private String getUrl() {
+ return "http://localhost:" + port + "/api/v1/dailyquote";
+ }
+
+ @BeforeEach
+ void setup() {
+ dailyQuoteRepository.deleteAll();
+ quoteRepository.deleteAll();
+ caracterRepository.deleteAll();
+ sourceRepository.deleteAll();
+ userRepository.deleteAll();
+ imageRepository.deleteAll();
+
+ Image image = new Image();
+ image.setImgPath("daily.png");
+ imageRepository.save(image);
+
+ User user = new User();
+ user.setUsername("dailyUser");
+ user.setPassword("pwd");
+ user.setEmail("daily@mail.com");
+ user.setCreation(LocalDate.now());
+ user.setImage(image);
+ userRepository.save(user);
+
+ Caracter caracter = new Caracter();
+ caracter.setCaracter("Calme");
+ caracter.setImage(image);
+ caracterRepository.save(caracter);
+
+ Source source = new Source();
+ source.setTitle("Livre A");
+ source.setDateS(2001);
+ sourceRepository.save(source);
+
+ quote = new Quote();
+ quote.setContent("Chaque jour est un cadeau.");
+ quote.setLangue("fr");
+ quote.setIsValide(true);
+ quote.setLikes(10);
+ quote.setReason("approuvée");
+ quote.setUserVerif(user);
+ quote.setCaracter(caracter);
+ quote.setSource(source);
+ quoteRepository.save(quote);
+
+ DailyQuote dailyQuote = new DailyQuote();
+ dailyQuote.setCitationId(quote.getId()); // CORRECT : ne pas faire setQuote()
+ dailyQuoteRepository.save(dailyQuote);
+ }
+
+ @Test
+ void testGetDailyQuote() {
+ ResponseEntity response = restTemplate.getForEntity(getUrl(), DailyQuote.class);
+
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ assertNotNull(response.getBody());
+ assertEquals(quote.getId(), response.getBody().getCitationId());
+ }
+
+ @Test
+ void testGetDailyQuoteNotFound() {
+ dailyQuoteRepository.deleteAll();
+
+ ResponseEntity response = restTemplate.getForEntity(getUrl(), String.class);
+
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Aucune DailyQuote définie"));
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/FavoriteControllerTest.java b/src/test/java/com/example/wfwebapi/controller/FavoriteControllerTest.java
new file mode 100644
index 0000000..293c269
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/FavoriteControllerTest.java
@@ -0,0 +1,133 @@
+package com.example.wfwebapi.controller;
+
+import com.example.wfwebapi.model.*;
+import com.example.wfwebapi.repository.*;
+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.time.LocalDate;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class FavoriteControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired private TestRestTemplate restTemplate;
+
+ @Autowired private FavoriteRepository favoriteRepository;
+ @Autowired private QuoteRepository quoteRepository;
+ @Autowired private UserRepository userRepository;
+ @Autowired private ImageRepository imageRepository;
+ @Autowired private CaracterRepository caracterRepository;
+ @Autowired private SourceRepository sourceRepository;
+
+ private User user;
+ private Quote quote;
+
+ private String getUrl(String path) {
+ return "http://localhost:" + port + "/api/v1/favorite" + path;
+ }
+
+ @BeforeEach
+ void setup() {
+ favoriteRepository.deleteAll();
+ quoteRepository.deleteAll();
+ caracterRepository.deleteAll();
+ sourceRepository.deleteAll();
+ userRepository.deleteAll();
+ imageRepository.deleteAll();
+
+ Image image = new Image();
+ image.setImgPath("fav.png");
+ imageRepository.save(image);
+
+ user = new User();
+ user.setUsername("testuser");
+ user.setPassword("secret");
+ user.setEmail("test@ex.com");
+ user.setCreation(LocalDate.now());
+ user.setImage(image);
+ userRepository.save(user);
+
+ Caracter caracter = new Caracter();
+ caracter.setCaracter("Sérieux");
+ caracter.setImage(image);
+ caracterRepository.save(caracter);
+
+ Source source = new Source();
+ source.setTitle("Source X");
+ source.setDateS(1999);
+ sourceRepository.save(source);
+
+ quote = new Quote();
+ quote.setContent("La connaissance est le pouvoir.");
+ quote.setLangue("fr");
+ quote.setIsValide(true);
+ quote.setLikes(100);
+ quote.setReason("Validée");
+ quote.setCaracter(caracter);
+ quote.setSource(source);
+ quote.setUserVerif(user);
+ quoteRepository.save(quote);
+ }
+
+ @Test
+ void testAddAndGetFavorite() {
+ ResponseEntity postResponse = restTemplate.postForEntity(
+ getUrl("?user=" + user.getId() + ""e=" + quote.getId()),
+ null,
+ Void.class
+ );
+
+ assertEquals(HttpStatus.OK, postResponse.getStatusCode());
+
+ ResponseEntity getResponse = restTemplate.getForEntity(
+ getUrl("/" + user.getId()),
+ Favorite[].class
+ );
+
+ assertEquals(HttpStatus.OK, getResponse.getStatusCode());
+ assertEquals(1, getResponse.getBody().length);
+ assertEquals(quote.getId(), getResponse.getBody()[0].getQuote().getId());
+ }
+
+ @Test
+ void testDeleteFavorite() {
+ Favorite favorite = new Favorite();
+ favorite.setId(new FavoriteId(user.getId(), quote.getId()));
+ favorite.setUser(user);
+ favorite.setQuote(quote);
+ favoriteRepository.save(favorite);
+
+ ResponseEntity response = restTemplate.exchange(
+ getUrl("?user=" + user.getId() + ""e=" + quote.getId()),
+ HttpMethod.DELETE,
+ null,
+ Void.class
+ );
+
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ assertFalse(favoriteRepository.existsById(new FavoriteId(user.getId(), quote.getId())));
+ }
+
+ @Test
+ void testDeleteFavoriteNotFound() {
+ ResponseEntity response = restTemplate.exchange(
+ getUrl("?user=9999"e=9999"),
+ HttpMethod.DELETE,
+ null,
+ String.class
+ );
+
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Favorite non trouvée"));
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/ImageControllerTest.java b/src/test/java/com/example/wfwebapi/controller/ImageControllerTest.java
new file mode 100644
index 0000000..18f6d81
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/ImageControllerTest.java
@@ -0,0 +1,102 @@
+package com.example.wfwebapi.controller;
+
+import com.example.wfwebapi.model.Image;
+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 static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class ImageControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired private TestRestTemplate restTemplate;
+ @Autowired private ImageRepository imageRepository;
+
+ private String getUrl(String path) {
+ return "http://localhost:" + port + "/api/v1/image" + path;
+ }
+
+ @BeforeEach
+ void setup() {
+ imageRepository.deleteAll();
+ }
+
+ @Test
+ void testCreateAndGetImage() {
+ Image image = new Image();
+ image.setImgPath("assets/img/test.png");
+
+ ResponseEntity postResponse = restTemplate.postForEntity(
+ getUrl(""), image, Image.class);
+
+ assertEquals(HttpStatus.OK, postResponse.getStatusCode());
+ Image created = postResponse.getBody();
+ assertNotNull(created);
+ assertNotNull(created.getId());
+
+ ResponseEntity getResponse = restTemplate.getForEntity(
+ getUrl("/" + created.getId()), Image.class);
+
+ assertEquals(HttpStatus.OK, getResponse.getStatusCode());
+ assertEquals("assets/img/test.png", getResponse.getBody().getImgPath());
+ }
+
+ @Test
+ void testUpdateImage() {
+ Image image = new Image();
+ image.setImgPath("original.png");
+ image = imageRepository.save(image);
+
+ image.setImgPath("updated.png");
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ HttpEntity entity = new HttpEntity<>(image, headers);
+
+ ResponseEntity putResponse = restTemplate.exchange(
+ getUrl(""), HttpMethod.PUT, entity, Image.class);
+
+ assertEquals(HttpStatus.OK, putResponse.getStatusCode());
+ assertEquals("updated.png", putResponse.getBody().getImgPath());
+ }
+
+ @Test
+ void testDeleteImage() {
+ Image image = new Image();
+ image.setImgPath("todelete.png");
+ image = imageRepository.save(image);
+
+ ResponseEntity deleteResponse = restTemplate.exchange(
+ getUrl("?id=" + image.getId()), HttpMethod.DELETE, null, Void.class);
+
+ assertEquals(HttpStatus.OK, deleteResponse.getStatusCode());
+ assertFalse(imageRepository.existsById(image.getId()));
+ }
+
+ @Test
+ void testGetImageNotFound() {
+ ResponseEntity response = restTemplate.getForEntity(
+ getUrl("/9999"), String.class);
+
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Image non trouvée"));
+ }
+
+ @Test
+ void testDeleteImageNotFound() {
+ ResponseEntity response = restTemplate.exchange(
+ getUrl("?id=9999"), HttpMethod.DELETE, null, String.class);
+
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Image non trouvée"));
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/QuestionControllerTest.java b/src/test/java/com/example/wfwebapi/controller/QuestionControllerTest.java
new file mode 100644
index 0000000..373bc0d
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/QuestionControllerTest.java
@@ -0,0 +1,112 @@
+package com.example.wfwebapi.controller;
+
+import com.example.wfwebapi.model.Question;
+import com.example.wfwebapi.repository.QuestionRepository;
+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 static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class QuestionControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired private TestRestTemplate restTemplate;
+ @Autowired private QuestionRepository questionRepository;
+
+ private String getUrl(String path) {
+ return "http://localhost:" + port + "/api/v1/question" + path;
+ }
+
+ @BeforeEach
+ void setup() {
+ questionRepository.deleteAll();
+ }
+
+ @Test
+ void testCreateAndGetQuestion() {
+ Question question = new Question();
+ question.setTexte("Quel est le langage de ce test ?");
+ question.setAnswerA("Python");
+ question.setAnswerB("Java");
+ question.setAnswerC("C++");
+ question.setAnswerD("JavaScript");
+ question.setCAnswer("Java");
+
+ ResponseEntity postResponse = restTemplate.postForEntity(getUrl(""), question, Question.class);
+ assertEquals(HttpStatus.OK, postResponse.getStatusCode());
+ assertNotNull(postResponse.getBody());
+ Long id = postResponse.getBody().getId();
+ assertNotNull(id);
+
+ ResponseEntity getResponse = restTemplate.getForEntity(getUrl("/" + id), Question.class);
+ assertEquals(HttpStatus.OK, getResponse.getStatusCode());
+ assertEquals("Java", getResponse.getBody().getCAnswer());
+ }
+
+ @Test
+ void testUpdateQuestion() {
+ Question q = new Question();
+ q.setTexte("Old Q");
+ q.setAnswerA("A");
+ q.setAnswerB("B");
+ q.setAnswerC("C");
+ q.setAnswerD("D");
+ q.setCAnswer("B");
+ q = questionRepository.save(q);
+
+ q.setTexte("Updated Q");
+ q.setCAnswer("A");
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ HttpEntity entity = new HttpEntity<>(q, headers);
+
+ ResponseEntity response = restTemplate.exchange(
+ getUrl(""), HttpMethod.PUT, entity, Question.class);
+
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ assertEquals("Updated Q", response.getBody().getTexte());
+ assertEquals("A", response.getBody().getCAnswer());
+ }
+
+ @Test
+ void testDeleteQuestion() {
+ Question q = new Question();
+ q.setTexte("À supprimer");
+ q.setAnswerA("1");
+ q.setAnswerB("2");
+ q.setAnswerC("3");
+ q.setAnswerD("4");
+ q.setCAnswer("2");
+ q = questionRepository.save(q);
+
+ ResponseEntity delete = restTemplate.exchange(
+ getUrl("?id=" + q.getId()), HttpMethod.DELETE, null, Void.class);
+
+ assertEquals(HttpStatus.OK, delete.getStatusCode());
+ assertFalse(questionRepository.existsById(q.getId()));
+ }
+
+ @Test
+ void testGetQuestionNotFound() {
+ ResponseEntity response = restTemplate.getForEntity(getUrl("/9999"), String.class);
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Question non trouvée"));
+ }
+
+ @Test
+ void testDeleteQuestionNotFound() {
+ ResponseEntity response = restTemplate.exchange(
+ getUrl("?id=9999"), HttpMethod.DELETE, null, String.class);
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Question non trouvée"));
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/QuizControllerTest.java b/src/test/java/com/example/wfwebapi/controller/QuizControllerTest.java
new file mode 100644
index 0000000..d44c038
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/QuizControllerTest.java
@@ -0,0 +1,130 @@
+package com.example.wfwebapi.controller;
+
+import com.example.wfwebapi.model.Image;
+import com.example.wfwebapi.model.Quiz;
+import com.example.wfwebapi.repository.ImageRepository;
+import com.example.wfwebapi.repository.QuizRepository;
+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 static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class QuizControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired private TestRestTemplate restTemplate;
+ @Autowired private QuizRepository quizRepository;
+ @Autowired private ImageRepository imageRepository;
+
+ private String getUrl(String path) {
+ return "http://localhost:" + port + "/api/v1/quiz" + path;
+ }
+
+ private Image image;
+
+ @BeforeEach
+ void setup() {
+ quizRepository.deleteAll();
+ imageRepository.deleteAll();
+
+ image = new Image();
+ image.setImgPath("quiz/image.png");
+ imageRepository.save(image);
+ }
+
+ @Test
+ void testCreateAndGetQuiz() {
+ Quiz quiz = new Quiz();
+ quiz.setTitle("Histoire");
+ quiz.setImage(image);
+ quiz.setNbQuest(5);
+
+ ResponseEntity postResponse = restTemplate.postForEntity(getUrl(""), quiz, Quiz.class);
+ assertEquals(HttpStatus.OK, postResponse.getStatusCode());
+ Quiz created = postResponse.getBody();
+ assertNotNull(created);
+ assertNotNull(created.getId());
+
+ ResponseEntity getResponse = restTemplate.getForEntity(getUrl("/" + created.getId()), Quiz.class);
+ assertEquals(HttpStatus.OK, getResponse.getStatusCode());
+ assertEquals("Histoire", getResponse.getBody().getTitle());
+ }
+
+ @Test
+ void testUpdateQuiz() {
+ Quiz quiz = new Quiz();
+ quiz.setTitle("Sciences");
+ quiz.setImage(image);
+ quiz.setNbQuest(10);
+ quiz = quizRepository.save(quiz);
+
+ quiz.setTitle("Sciences - Maj");
+ quiz.setNbQuest(12);
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ HttpEntity entity = new HttpEntity<>(quiz, headers);
+
+ ResponseEntity putResponse = restTemplate.exchange(getUrl(""), HttpMethod.PUT, entity, Quiz.class);
+ assertEquals(HttpStatus.OK, putResponse.getStatusCode());
+ assertEquals("Sciences - Maj", putResponse.getBody().getTitle());
+ assertEquals(12, putResponse.getBody().getNbQuest());
+ }
+
+ @Test
+ void testDeleteQuiz() {
+ Quiz quiz = new Quiz();
+ quiz.setTitle("À supprimer");
+ quiz.setImage(image);
+ quiz.setNbQuest(3);
+ quiz = quizRepository.save(quiz);
+
+ ResponseEntity deleteResponse = restTemplate.exchange(
+ getUrl("?id=" + quiz.getId()), HttpMethod.DELETE, null, Void.class);
+ assertEquals(HttpStatus.OK, deleteResponse.getStatusCode());
+ assertFalse(quizRepository.existsById(quiz.getId()));
+ }
+
+ @Test
+ void testGetQuizNotFound() {
+ ResponseEntity response = restTemplate.getForEntity(getUrl("/9999"), String.class);
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Quiz non trouvé"));
+ }
+
+ @Test
+ void testDeleteQuizNotFound() {
+ ResponseEntity response = restTemplate.exchange(
+ getUrl("?id=9999"), HttpMethod.DELETE, null, String.class);
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Quiz non trouvé"));
+ }
+
+ @Test
+ void testGetAllQuizzes() {
+ Quiz q1 = new Quiz();
+ q1.setTitle("Test 1");
+ q1.setImage(image);
+ q1.setNbQuest(5);
+
+ Quiz q2 = new Quiz();
+ q2.setTitle("Test 2");
+ q2.setImage(image);
+ q2.setNbQuest(10);
+
+ quizRepository.save(q1);
+ quizRepository.save(q2);
+
+ ResponseEntity response = restTemplate.getForEntity(getUrl(""), Quiz[].class);
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ assertEquals(2, response.getBody().length);
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/controller/QuoteControllerTest.java b/src/test/java/com/example/wfwebapi/controller/QuoteControllerTest.java
new file mode 100644
index 0000000..331a6cf
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/controller/QuoteControllerTest.java
@@ -0,0 +1,201 @@
+package com.example.wfwebapi.controller;
+
+import com.example.wfwebapi.model.*;
+import com.example.wfwebapi.repository.*;
+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.hateoas.EntityModel;
+import org.springframework.http.*;
+
+import java.util.LinkedHashMap;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class QuoteControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired private TestRestTemplate restTemplate;
+ @Autowired private QuoteRepository quoteRepository;
+ @Autowired private UserRepository userRepository;
+ @Autowired private SourceRepository sourceRepository;
+ @Autowired private CaracterRepository caracterRepository;
+
+ private User user;
+ private Source source;
+ private Caracter caracter;
+
+ private String getUrl(String path) {
+ return "http://localhost:" + port + "/api/v1/quote" + path;
+ }
+
+ @BeforeEach
+ void setup() {
+ quoteRepository.deleteAll();
+ userRepository.deleteAll();
+ sourceRepository.deleteAll();
+ caracterRepository.deleteAll();
+
+ Image img = new Image();
+ img.setImgPath("img.png");
+
+ caracter = new Caracter();
+ caracter.setCaracter("Test Character");
+ caracter.setImage(img);
+ caracter = caracterRepository.save(caracter);
+
+ source = new Source();
+ source.setTitle("Test Source");
+ source.setDateS(2020);
+ source = sourceRepository.save(source);
+
+ user = new User();
+ user.setUsername("verif");
+ user.setEmail("v@v.fr");
+ user.setPassword("pass");
+ user.setImage(img);
+ user.setCreation(java.time.LocalDate.now());
+ user = userRepository.save(user);
+ }
+
+ @Test
+ void testCreateAndGetQuote() {
+ Quote quote = new Quote();
+ quote.setContent("Ceci est une citation.");
+ quote.setLangue("fr");
+ quote.setLikes(15);
+ quote.setIsValide(true);
+ quote.setReason("valide");
+ quote.setCaracter(caracter);
+ quote.setSource(source);
+ quote.setUserVerif(user);
+
+ ResponseEntity postResponse = restTemplate.postForEntity(
+ getUrl(""), quote, EntityModel.class);
+ assertEquals(HttpStatus.OK, postResponse.getStatusCode());
+ assertNotNull(postResponse.getBody());
+
+ Long id = ((Number)((LinkedHashMap)postResponse.getBody().getContent()).get("id")).longValue();
+ ResponseEntity getResponse = restTemplate.getForEntity(
+ getUrl("/" + id), EntityModel.class);
+ assertEquals(HttpStatus.OK, getResponse.getStatusCode());
+ }
+
+ @Test
+ void testUpdateQuote() {
+ Quote quote = new Quote();
+ quote.setContent("Ancienne");
+ quote.setLangue("fr");
+ quote.setLikes(1);
+ quote.setIsValide(false);
+ quote.setReason("...");
+ quote.setCaracter(caracter);
+ quote.setSource(source);
+ quote.setUserVerif(user);
+ quote = quoteRepository.save(quote);
+
+ quote.setContent("Nouvelle version");
+ quote.setLangue("en");
+ quote.setLikes(100);
+ quote.setIsValide(true);
+ quote.setReason("modifiée");
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ HttpEntity request = new HttpEntity<>(quote, headers);
+
+ ResponseEntity response = restTemplate.exchange(
+ getUrl(""), HttpMethod.PUT, request, EntityModel.class);
+
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ }
+
+ @Test
+ void testDeleteQuote() {
+ Quote quote = new Quote();
+ quote.setContent("À supprimer");
+ quote.setLangue("fr");
+ quote.setLikes(0);
+ quote.setIsValide(false);
+ quote.setReason("test");
+ quote.setCaracter(caracter);
+ quote.setSource(source);
+ quote.setUserVerif(user);
+ quote = quoteRepository.save(quote);
+
+ ResponseEntity response = restTemplate.exchange(
+ getUrl("/delete?idQuote=" + quote.getId()), HttpMethod.DELETE, null, Void.class);
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ assertFalse(quoteRepository.existsById(quote.getId()));
+ }
+
+ @Test
+ void testGetQuoteNotFound() {
+ ResponseEntity response = restTemplate.getForEntity(
+ getUrl("/9999"), String.class);
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Citation non trouvée"));
+ }
+
+ @Test
+ void testGetAllQuotes() {
+ Quote quote1 = new Quote();
+ quote1.setContent("Q1");
+ quote1.setLangue("fr");
+ quote1.setLikes(5);
+ quote1.setIsValide(true);
+ quote1.setReason("ok");
+ quote1.setCaracter(caracter);
+ quote1.setSource(source);
+ quote1.setUserVerif(user);
+
+ Quote quote2 = new Quote();
+ quote2.setContent("Q2");
+ quote2.setLangue("en");
+ quote2.setLikes(10);
+ quote2.setIsValide(true);
+ quote2.setReason("ok");
+ quote2.setCaracter(caracter);
+ quote2.setSource(source);
+ quote2.setUserVerif(user);
+
+ quoteRepository.save(quote1);
+ quoteRepository.save(quote2);
+
+ ResponseEntity response = restTemplate.getForEntity(
+ getUrl("/all?index=0&count=10"), String.class);
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ }
+
+ @Test
+ void testGetDailyQuote() {
+ Quote quote = new Quote();
+ quote.setContent("Jour");
+ quote.setLangue("fr");
+ quote.setLikes(3);
+ quote.setIsValide(true);
+ quote.setReason("OK");
+ quote.setCaracter(caracter);
+ quote.setSource(source);
+ quote.setUserVerif(user);
+ quoteRepository.save(quote);
+
+ ResponseEntity response = restTemplate.getForEntity(
+ getUrl("/dailyquote?year=2023&month=12&day=1&lang=fr"), EntityModel.class);
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ }
+
+ @Test
+ void testGetDailyQuoteNotFound() {
+ ResponseEntity response = restTemplate.getForEntity(
+ getUrl("/dailyquote?year=2023&month=12&day=1&lang=zz"), String.class);
+ assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertTrue(response.getBody().contains("Aucune citation trouvée"));
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/AdminTest.java b/src/test/java/com/example/wfwebapi/model/AdminTest.java
new file mode 100644
index 0000000..cdfcd99
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/AdminTest.java
@@ -0,0 +1,20 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class AdminTest {
+
+ @Test
+ void testGettersAndSetters() {
+ Admin admin = new Admin();
+ User user = new User();
+
+ admin.setUserId(123L);
+ admin.setUser(user);
+
+ assertEquals(123L, admin.getUserId());
+ assertEquals(user, admin.getUser());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/CaracterTest.java b/src/test/java/com/example/wfwebapi/model/CaracterTest.java
new file mode 100644
index 0000000..dd26511
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/CaracterTest.java
@@ -0,0 +1,22 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class CaracterTest {
+
+ @Test
+ void testGettersAndSetters() {
+ Caracter caracter = new Caracter();
+ Image image = new Image();
+
+ caracter.setId(1L);
+ caracter.setCaracter("Guerrier");
+ caracter.setImage(image);
+
+ assertEquals(1L, caracter.getId());
+ assertEquals("Guerrier", caracter.getCaracter());
+ assertEquals(image, caracter.getImage());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/CommentaryTest.java b/src/test/java/com/example/wfwebapi/model/CommentaryTest.java
new file mode 100644
index 0000000..2dc61d2
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/CommentaryTest.java
@@ -0,0 +1,31 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import java.time.LocalDate;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class CommentaryTest {
+
+ @Test
+ void testGettersAndSetters() {
+ Commentary commentary = new Commentary();
+ Quote quote = new Quote();
+ User user = new User();
+ LocalDate date = LocalDate.of(2024, 4, 5);
+ String text = "Ceci est un commentaire";
+
+ commentary.setId(1L);
+ commentary.setQuote(quote);
+ commentary.setUser(user);
+ commentary.setDateC(date);
+ commentary.setComment(text);
+
+ assertEquals(1L, commentary.getId());
+ assertEquals(quote, commentary.getQuote());
+ assertEquals(user, commentary.getUser());
+ assertEquals(date, commentary.getDateC());
+ assertEquals(text, commentary.getComment());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/DailyQuoteTest.java b/src/test/java/com/example/wfwebapi/model/DailyQuoteTest.java
new file mode 100644
index 0000000..b74dbd1
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/DailyQuoteTest.java
@@ -0,0 +1,20 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class DailyQuoteTest {
+
+ @Test
+ void testGettersAndSetters() {
+ DailyQuote dailyQuote = new DailyQuote();
+ Quote quote = new Quote();
+
+ dailyQuote.setCitationId(1L);
+ dailyQuote.setQuote(quote);
+
+ assertEquals(1L, dailyQuote.getCitationId());
+ assertEquals(quote, dailyQuote.getQuote());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/FavoriteIdTest.java b/src/test/java/com/example/wfwebapi/model/FavoriteIdTest.java
new file mode 100644
index 0000000..5b3b46b
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/FavoriteIdTest.java
@@ -0,0 +1,37 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class FavoriteIdTest {
+
+ @Test
+ void testGettersAndSetters() {
+ FavoriteId id = new FavoriteId();
+ id.setUser(1L);
+ id.setQuote(2L);
+
+ assertEquals(1L, id.getUser());
+ assertEquals(2L, id.getQuote());
+ }
+
+ @Test
+ void testConstructor() {
+ FavoriteId id = new FavoriteId(3L, 4L);
+
+ assertEquals(3L, id.getUser());
+ assertEquals(4L, id.getQuote());
+ }
+
+ @Test
+ void testEqualsAndHashCode() {
+ FavoriteId id1 = new FavoriteId(1L, 2L);
+ FavoriteId id2 = new FavoriteId(1L, 2L);
+ FavoriteId id3 = new FavoriteId(2L, 1L);
+
+ assertEquals(id1, id2);
+ assertEquals(id1.hashCode(), id2.hashCode());
+ assertNotEquals(id1, id3);
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/FavoriteTest.java b/src/test/java/com/example/wfwebapi/model/FavoriteTest.java
new file mode 100644
index 0000000..1d46544
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/FavoriteTest.java
@@ -0,0 +1,24 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class FavoriteTest {
+
+ @Test
+ void testGettersAndSetters() {
+ Favorite favorite = new Favorite();
+ FavoriteId favoriteId = new FavoriteId();
+ User user = new User();
+ Quote quote = new Quote();
+
+ favorite.setId(favoriteId);
+ favorite.setUser(user);
+ favorite.setQuote(quote);
+
+ assertEquals(favoriteId, favorite.getId());
+ assertEquals(user, favorite.getUser());
+ assertEquals(quote, favorite.getQuote());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/ImageTest.java b/src/test/java/com/example/wfwebapi/model/ImageTest.java
new file mode 100644
index 0000000..54a186f
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/ImageTest.java
@@ -0,0 +1,18 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class ImageTest {
+
+ @Test
+ void testGettersAndSetters() {
+ Image image = new Image();
+ image.setId(1L);
+ image.setImgPath("/images/avatar.png");
+
+ assertEquals(1L, image.getId());
+ assertEquals("/images/avatar.png", image.getImgPath());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/QuestionTest.java b/src/test/java/com/example/wfwebapi/model/QuestionTest.java
new file mode 100644
index 0000000..c4dcca9
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/QuestionTest.java
@@ -0,0 +1,29 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class QuestionTest {
+
+ @Test
+ void testGettersAndSetters() {
+ Question question = new Question();
+
+ question.setId(1L);
+ question.setTexte("Quelle est la capitale de la France ?");
+ question.setAnswerA("Paris");
+ question.setAnswerB("Lyon");
+ question.setAnswerC("Marseille");
+ question.setAnswerD("Nice");
+ question.setCAnswer("Paris");
+
+ assertEquals(1L, question.getId());
+ assertEquals("Quelle est la capitale de la France ?", question.getTexte());
+ assertEquals("Paris", question.getAnswerA());
+ assertEquals("Lyon", question.getAnswerB());
+ assertEquals("Marseille", question.getAnswerC());
+ assertEquals("Nice", question.getAnswerD());
+ assertEquals("Paris", question.getCAnswer());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/QuizQuestionIdTest.java b/src/test/java/com/example/wfwebapi/model/QuizQuestionIdTest.java
new file mode 100644
index 0000000..fb7c5c8
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/QuizQuestionIdTest.java
@@ -0,0 +1,37 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class QuizQuestionIdTest {
+
+ @Test
+ void testGettersAndSetters() {
+ QuizQuestionId id = new QuizQuestionId();
+ id.setQuiz(1L);
+ id.setQuestion(2L);
+
+ assertEquals(1L, id.getQuiz());
+ assertEquals(2L, id.getQuestion());
+ }
+
+ @Test
+ void testConstructor() {
+ QuizQuestionId id = new QuizQuestionId(3L, 4L);
+
+ assertEquals(3L, id.getQuiz());
+ assertEquals(4L, id.getQuestion());
+ }
+
+ @Test
+ void testEqualsAndHashCode() {
+ QuizQuestionId id1 = new QuizQuestionId(1L, 2L);
+ QuizQuestionId id2 = new QuizQuestionId(1L, 2L);
+ QuizQuestionId id3 = new QuizQuestionId(2L, 1L);
+
+ assertEquals(id1, id2);
+ assertEquals(id1.hashCode(), id2.hashCode());
+ assertNotEquals(id1, id3);
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/QuizQuestionTest.java b/src/test/java/com/example/wfwebapi/model/QuizQuestionTest.java
new file mode 100644
index 0000000..3ed75bb
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/QuizQuestionTest.java
@@ -0,0 +1,24 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class QuizQuestionTest {
+
+ @Test
+ void testGettersAndSetters() {
+ QuizQuestion quizQuestion = new QuizQuestion();
+ QuizQuestionId id = new QuizQuestionId();
+ Quiz quiz = new Quiz();
+ Question question = new Question();
+
+ quizQuestion.setId(id);
+ quizQuestion.setQuiz(quiz);
+ quizQuestion.setQuestion(question);
+
+ assertEquals(id, quizQuestion.getId());
+ assertEquals(quiz, quizQuestion.getQuiz());
+ assertEquals(question, quizQuestion.getQuestion());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/QuizTest.java b/src/test/java/com/example/wfwebapi/model/QuizTest.java
new file mode 100644
index 0000000..324692d
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/QuizTest.java
@@ -0,0 +1,24 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class QuizTest {
+
+ @Test
+ void testGettersAndSetters() {
+ Quiz quiz = new Quiz();
+ Image image = new Image();
+
+ quiz.setId(1L);
+ quiz.setTitle("Histoire de France");
+ quiz.setImage(image);
+ quiz.setNbQuest(10);
+
+ assertEquals(1L, quiz.getId());
+ assertEquals("Histoire de France", quiz.getTitle());
+ assertEquals(image, quiz.getImage());
+ assertEquals(10, quiz.getNbQuest());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/QuoteTest.java b/src/test/java/com/example/wfwebapi/model/QuoteTest.java
new file mode 100644
index 0000000..fbe7187
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/QuoteTest.java
@@ -0,0 +1,36 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class QuoteTest {
+
+ @Test
+ void testGettersAndSetters() {
+ Quote quote = new Quote();
+ Caracter caracter = new Caracter();
+ Source source = new Source();
+ User user = new User();
+
+ quote.setId(1L);
+ quote.setContent("Ceci est une citation.");
+ quote.setLikes(42);
+ quote.setLangue("fr");
+ quote.setIsValide(true);
+ quote.setReason("Vérifiée manuellement");
+ quote.setCaracter(caracter);
+ quote.setSource(source);
+ quote.setUserVerif(user);
+
+ assertEquals(1L, quote.getId());
+ assertEquals("Ceci est une citation.", quote.getContent());
+ assertEquals(42, quote.getLikes());
+ assertEquals("fr", quote.getLangue());
+ assertTrue(quote.getIsValide());
+ assertEquals("Vérifiée manuellement", quote.getReason());
+ assertEquals(caracter, quote.getCaracter());
+ assertEquals(source, quote.getSource());
+ assertEquals(user, quote.getUserVerif());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/RecordQuizIdTest.java b/src/test/java/com/example/wfwebapi/model/RecordQuizIdTest.java
new file mode 100644
index 0000000..0aca0d5
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/RecordQuizIdTest.java
@@ -0,0 +1,37 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class RecordQuizIdTest {
+
+ @Test
+ void testGettersAndSetters() {
+ RecordQuizId id = new RecordQuizId();
+ id.setUser(1L);
+ id.setQuiz(2L);
+
+ assertEquals(1L, id.getUser());
+ assertEquals(2L, id.getQuiz());
+ }
+
+ @Test
+ void testConstructor() {
+ RecordQuizId id = new RecordQuizId(3L, 4L);
+
+ assertEquals(3L, id.getUser());
+ assertEquals(4L, id.getQuiz());
+ }
+
+ @Test
+ void testEqualsAndHashCode() {
+ RecordQuizId id1 = new RecordQuizId(1L, 2L);
+ RecordQuizId id2 = new RecordQuizId(1L, 2L);
+ RecordQuizId id3 = new RecordQuizId(2L, 1L);
+
+ assertEquals(id1, id2);
+ assertEquals(id1.hashCode(), id2.hashCode());
+ assertNotEquals(id1, id3);
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/RecordQuizTest.java b/src/test/java/com/example/wfwebapi/model/RecordQuizTest.java
new file mode 100644
index 0000000..9da2c14
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/RecordQuizTest.java
@@ -0,0 +1,28 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class RecordQuizTest {
+
+ @Test
+ void testGettersAndSetters() {
+ RecordQuiz record = new RecordQuiz();
+ RecordQuizId id = new RecordQuizId();
+ User user = new User();
+ Quiz quiz = new Quiz();
+
+ record.setId(id);
+ record.setUser(user);
+ record.setQuiz(quiz);
+ record.setNbPoint(8);
+ record.setTimeQ(120);
+
+ assertEquals(id, record.getId());
+ assertEquals(user, record.getUser());
+ assertEquals(quiz, record.getQuiz());
+ assertEquals(8, record.getNbPoint());
+ assertEquals(120, record.getTimeQ());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/SourceTest.java b/src/test/java/com/example/wfwebapi/model/SourceTest.java
new file mode 100644
index 0000000..e573229
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/SourceTest.java
@@ -0,0 +1,21 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class SourceTest {
+
+ @Test
+ void testGettersAndSetters() {
+ Source source = new Source();
+
+ source.setId(1L);
+ source.setTitle("Discours historique");
+ source.setDateS(1945);
+
+ assertEquals(1L, source.getId());
+ assertEquals("Discours historique", source.getTitle());
+ assertEquals(1945, source.getDateS());
+ }
+}
diff --git a/src/test/java/com/example/wfwebapi/model/UserTest.java b/src/test/java/com/example/wfwebapi/model/UserTest.java
new file mode 100644
index 0000000..f060fc4
--- /dev/null
+++ b/src/test/java/com/example/wfwebapi/model/UserTest.java
@@ -0,0 +1,31 @@
+package com.example.wfwebapi.model;
+
+import org.junit.jupiter.api.Test;
+
+import java.time.LocalDate;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class UserTest {
+
+ @Test
+ void testGettersAndSetters() {
+ User user = new User();
+ Image image = new Image();
+ LocalDate creationDate = LocalDate.of(2024, 1, 1);
+
+ user.setId(1L);
+ user.setUsername("testuser");
+ user.setEmail("test@example.com");
+ user.setPassword("securePassword123");
+ user.setImage(image);
+ user.setCreation(creationDate);
+
+ assertEquals(1L, user.getId());
+ assertEquals("testuser", user.getUsername());
+ assertEquals("test@example.com", user.getEmail());
+ assertEquals("securePassword123", user.getPassword());
+ assertEquals(image, user.getImage());
+ assertEquals(creationDate, user.getCreation());
+ }
+}