From 471595060a31246d7c9b6accb89dc960a2244046 Mon Sep 17 00:00:00 2001 From: Morph01 Date: Thu, 4 Dec 2025 08:16:12 +0100 Subject: [PATCH] feat: changes in tests --- .../epul4a/fotosharing/model/Utilisateur.java | 8 ++- .../CascadeDeleteIntegrationTest.java | 37 ++++++----- .../PhotoUploadIntegrationTest.java | 63 ++++++++++--------- 3 files changed, 56 insertions(+), 52 deletions(-) diff --git a/src/main/java/local/epul4a/fotosharing/model/Utilisateur.java b/src/main/java/local/epul4a/fotosharing/model/Utilisateur.java index 4e2836e..1704511 100644 --- a/src/main/java/local/epul4a/fotosharing/model/Utilisateur.java +++ b/src/main/java/local/epul4a/fotosharing/model/Utilisateur.java @@ -25,9 +25,11 @@ public class Utilisateur { private boolean actif = true; - @OneToMany(mappedBy = "proprietaire") - private List< - Photo> photos; + @OneToMany(mappedBy = "proprietaire", cascade = CascadeType.ALL, orphanRemoval = true) + private List photos; + + @OneToMany(mappedBy = "auteur", cascade = CascadeType.ALL, orphanRemoval = true) + private List commentaires; // Getters & Setters avec lombok diff --git a/src/test/java/local/epul4a/fotosharing/integration/CascadeDeleteIntegrationTest.java b/src/test/java/local/epul4a/fotosharing/integration/CascadeDeleteIntegrationTest.java index eb32461..901a239 100644 --- a/src/test/java/local/epul4a/fotosharing/integration/CascadeDeleteIntegrationTest.java +++ b/src/test/java/local/epul4a/fotosharing/integration/CascadeDeleteIntegrationTest.java @@ -25,7 +25,6 @@ import static org.junit.jupiter.api.Assertions.*; */ @SpringBootTest @ActiveProfiles("test") -@Transactional class CascadeDeleteIntegrationTest { @Autowired @@ -55,7 +54,7 @@ class CascadeDeleteIntegrationTest { userA.setEmail("userA@example.com"); userA.setNom("A"); userA.setPrenom("User"); - userA.setPassword(passwordEncoder.encode("password")); + userA.setMotDePasse(passwordEncoder.encode("password")); userA = utilisateurRepository.save(userA); // Créer User B @@ -63,7 +62,7 @@ class CascadeDeleteIntegrationTest { userB.setEmail("userB@example.com"); userB.setNom("B"); userB.setPrenom("User"); - userB.setPassword(passwordEncoder.encode("password")); + userB.setMotDePasse(passwordEncoder.encode("password")); userB = utilisateurRepository.save(userB); } @@ -90,8 +89,8 @@ class CascadeDeleteIntegrationTest { assertEquals(2, photoRepository.findByProprietaire_Email(userB.getEmail()).size()); // When - Supprimer User A - utilisateurRepository.delete(userA); - utilisateurRepository.flush(); + utilisateurRepository.deleteById(userA.getId()); + // Then - Les photos de User A doivent être supprimées assertEquals(2, photoRepository.count(), @@ -122,8 +121,8 @@ class CascadeDeleteIntegrationTest { assertEquals(3, commentaireRepository.count()); // When - Supprimer User A - utilisateurRepository.delete(userA); - utilisateurRepository.flush(); + utilisateurRepository.deleteById(userA.getId()); + // Then - Les commentaires de User A doivent être supprimés assertEquals(1, commentaireRepository.count(), @@ -153,8 +152,8 @@ class CascadeDeleteIntegrationTest { assertEquals(2, commentaireRepository.count()); // When - Supprimer User A (et donc sa photo) - utilisateurRepository.delete(userA); - utilisateurRepository.flush(); + utilisateurRepository.deleteById(userA.getId()); + // Then - La photo ET tous ses commentaires doivent être supprimés assertEquals(0, photoRepository.count(), @@ -189,8 +188,8 @@ class CascadeDeleteIntegrationTest { assertEquals(5, commentaireRepository.count()); // When - Supprimer User A - utilisateurRepository.delete(userA); - utilisateurRepository.flush(); + utilisateurRepository.deleteById(userA.getId()); + // Then - Vérifier les suppressions assertEquals(1, photoRepository.count(), @@ -205,7 +204,7 @@ class CascadeDeleteIntegrationTest { "Seul le commentaire 'B sur B' doit rester"); Commentaire lastComment = remainingComments.get(0); - assertEquals("B sur B", lastComment.getTexte()); + assertEquals("B sur B", lastComment.getContenu()); assertEquals(userB.getId(), lastComment.getAuteur().getId()); assertEquals(photoB.getId(), lastComment.getPhoto().getId()); } @@ -217,7 +216,7 @@ class CascadeDeleteIntegrationTest { userC.setEmail("userC@example.com"); userC.setNom("C"); userC.setPrenom("User"); - userC.setPassword(passwordEncoder.encode("password")); + userC.setMotDePasse(passwordEncoder.encode("password")); userC = utilisateurRepository.save(userC); // Given - Chaque utilisateur a des photos et commentaires @@ -235,8 +234,8 @@ class CascadeDeleteIntegrationTest { assertEquals(3, commentaireRepository.count()); // When - Supprimer User A - utilisateurRepository.delete(userA); - utilisateurRepository.flush(); + utilisateurRepository.deleteById(userA.getId()); + // Then - User B et C ne doivent pas être affectés assertEquals(2, utilisateurRepository.count(), @@ -261,9 +260,9 @@ class CascadeDeleteIntegrationTest { assertEquals(2, photoRepository.count()); // When - Supprimer les deux utilisateurs - utilisateurRepository.delete(userA); - utilisateurRepository.delete(userB); - utilisateurRepository.flush(); + utilisateurRepository.deleteById(userA.getId()); + utilisateurRepository.deleteById(userB.getId()); + // Then - Tout doit être supprimé assertEquals(0, utilisateurRepository.count()); @@ -287,7 +286,7 @@ class CascadeDeleteIntegrationTest { private Commentaire createCommentaire(String texte, Utilisateur auteur, Photo photo) { Commentaire commentaire = new Commentaire(); - commentaire.setTexte(texte); + commentaire.setContenu(texte); commentaire.setAuteur(auteur); commentaire.setPhoto(photo); commentaire.setDateCommentaire(LocalDateTime.now()); diff --git a/src/test/java/local/epul4a/fotosharing/integration/PhotoUploadIntegrationTest.java b/src/test/java/local/epul4a/fotosharing/integration/PhotoUploadIntegrationTest.java index e1fa27b..f319b96 100644 --- a/src/test/java/local/epul4a/fotosharing/integration/PhotoUploadIntegrationTest.java +++ b/src/test/java/local/epul4a/fotosharing/integration/PhotoUploadIntegrationTest.java @@ -62,7 +62,7 @@ class PhotoUploadIntegrationTest { testUser.setEmail("testupload@example.com"); testUser.setNom("Upload"); testUser.setPrenom("Test"); - testUser.setPassword(passwordEncoder.encode("password")); + testUser.setMotDePasse(passwordEncoder.encode("password")); testUser = utilisateurRepository.save(testUser); } @@ -247,42 +247,45 @@ class PhotoUploadIntegrationTest { // ===================== Méthodes Utilitaires ===================== /** - * Crée un tableau de bytes représentant un JPEG valide minimal + * Crée un tableau de bytes représentant un JPEG valide */ private byte[] createValidJpegBytes() { - // Magic number JPEG + données minimales pour créer une image valide - return new byte[]{ - (byte) 0xFF, (byte) 0xD8, (byte) 0xFF, (byte) 0xE0, // JPEG header - 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, // JFIF marker - 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, - (byte) 0xFF, (byte) 0xDB, 0x00, 0x43, 0x00, // Quantization table - 0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 0x07, - 0x07, 0x07, 0x09, 0x09, 0x08, 0x0A, 0x0C, 0x14, - 0x0D, 0x0C, 0x0B, 0x0B, 0x0C, 0x19, 0x12, 0x13, - 0x0F, 0x14, 0x1D, 0x1A, 0x1F, 0x1E, 0x1D, 0x1A, - 0x1C, 0x1C, 0x20, 0x24, 0x2E, 0x27, 0x20, 0x22, - 0x2C, 0x23, 0x1C, 0x1C, 0x28, 0x37, 0x29, 0x2C, - 0x30, 0x31, 0x34, 0x34, 0x34, 0x1F, 0x27, 0x39, - 0x3D, 0x38, 0x32, 0x3C, 0x2E, 0x33, 0x34, 0x32, - (byte) 0xFF, (byte) 0xD9 // End of image - }; + try { + // Créer une vraie image JPEG avec BufferedImage + java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(100, 100, java.awt.image.BufferedImage.TYPE_INT_RGB); + java.awt.Graphics2D g = image.createGraphics(); + g.setColor(java.awt.Color.BLUE); + g.fillRect(0, 0, 100, 100); + g.dispose(); + + // Convertir en bytes + java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); + javax.imageio.ImageIO.write(image, "jpg", baos); + return baos.toByteArray(); + } catch (Exception e) { + throw new RuntimeException("Erreur création image test", e); + } } /** - * Crée un tableau de bytes représentant un PNG valide minimal + * Crée un tableau de bytes représentant un PNG valide */ private byte[] createValidPngBytes() { - // Magic number PNG + données minimales - return new byte[]{ - (byte) 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, // PNG signature - 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, // IHDR chunk - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, // 1x1 pixel - 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, (byte) 0xC4, (byte) 0x89, - 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41, 0x54, // IDAT chunk - 0x78, (byte) 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, // IEND chunk - (byte) 0xAE, 0x42, 0x60, (byte) 0x82 - }; + try { + // Créer une vraie image PNG avec BufferedImage + java.awt.image.BufferedImage image = new java.awt.image.BufferedImage(100, 100, java.awt.image.BufferedImage.TYPE_INT_ARGB); + java.awt.Graphics2D g = image.createGraphics(); + g.setColor(java.awt.Color.RED); + g.fillRect(0, 0, 100, 100); + g.dispose(); + + // Convertir en bytes + java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); + javax.imageio.ImageIO.write(image, "png", baos); + return baos.toByteArray(); + } catch (Exception e) { + throw new RuntimeException("Erreur création image test", e); + } } }