diff --git a/.DS_Store b/.DS_Store
index b34ff9fb7ab7bac80218603e75eb3e94dcaa52b3..ba74a64a02c66ace044f28447659e60b3738a64c 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/src/.DS_Store b/src/.DS_Store
index 07b7d1bec1546013598ce9f2d89ad1661d54332f..f086cb122c11ee14147895d8d9f5e1404bf27b11 100644
Binary files a/src/.DS_Store and b/src/.DS_Store differ
diff --git a/src/tp07/.DS_Store b/src/tp07/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..fd14c3e0de183ddebdc748cd5541fab8614f699b
Binary files /dev/null and b/src/tp07/.DS_Store differ
diff --git a/src/tp07/tpOO-07-res/BidirectionalPhoneBookTest.java b/src/tp07/tpOO-07-res/BidirectionalPhoneBookTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc2aad595554affc37a782b0c401aa7cb8e2387c
--- /dev/null
+++ b/src/tp07/tpOO-07-res/BidirectionalPhoneBookTest.java
@@ -0,0 +1,189 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class BidirectionalPhoneBookTest {
+    public String s1, s2, s3;
+    public String name1, name2, name3;
+    public ProPhoneNumber ppn1, ppn2, ppn3, ppn4, ppn5;
+    public BidirectionalPhoneBook bpb1;
+
+    @BeforeEach
+    void initialization() {
+        s1 = "1234";
+        s2 = "1111";
+        s3 = "2222";
+        name1 = "alice";
+        name2 = "bruno";
+        name3 = "clément";
+        ppn1 = new ProPhoneNumber(s1, UniversityDepartment.IUT);
+        ppn2 = new ProPhoneNumber(s1, UniversityDepartment.FST);
+        ppn3 = new ProPhoneNumber(s2, UniversityDepartment.IUT);
+        ppn4 = new ProPhoneNumber(s1, UniversityDepartment.IUT);
+        ppn5 = new ProPhoneNumber(s3, UniversityDepartment.IUT);
+        bpb1 = new BidirectionalPhoneBook();
+    }
+
+    @Test
+    void testAdd() {
+        assertEquals(0, bpb1.getNbEntries());
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertFalse(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertFalse(bpb1.add(name2, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertFalse(bpb1.add(name1, UniversityDepartment.IUT, s2));
+        assertEquals(1, bpb1.getNbEntries());
+        assertTrue(bpb1.add(name2, UniversityDepartment.IUT, s2));
+        assertEquals(2, bpb1.getNbEntries());
+    }
+
+    @Test
+    void testAlreadyRegistered() {
+        assertEquals(0, bpb1.getNbEntries());
+        assertFalse(bpb1.alreadyRegistered(name1));
+        assertFalse(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertFalse(bpb1.alreadyRegistered(name2));
+        assertFalse(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s2));
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertTrue(bpb1.alreadyRegistered(name1));
+        assertTrue(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertFalse(bpb1.alreadyRegistered(name2));
+        assertFalse(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s2));
+        assertTrue(bpb1.add(name2, UniversityDepartment.IUT, s2));
+        assertEquals(2, bpb1.getNbEntries());
+        assertTrue(bpb1.alreadyRegistered(name1));
+        assertTrue(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertTrue(bpb1.alreadyRegistered(name2));
+        assertTrue(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s2));
+    }
+
+    @Test
+    void testGetProPhoneNumberFromName() {
+        assertEquals(0, bpb1.getNbEntries());
+        assertNull(bpb1.getProPhoneNumberFromName(name1));
+        assertNull(bpb1.getProPhoneNumberFromName(name2));
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertEquals(ppn1, bpb1.getProPhoneNumberFromName(name1));
+        assertNull(bpb1.getProPhoneNumberFromName(name2));
+        assertTrue(bpb1.add(name2, UniversityDepartment.FST, s1));
+        assertEquals(2, bpb1.getNbEntries());
+        assertEquals(ppn1, bpb1.getProPhoneNumberFromName(name1));
+        assertEquals(ppn2, bpb1.getProPhoneNumberFromName(name2));
+    }
+
+    @Test
+    void testGetNameFromFiveDigits() {
+        assertEquals(0, bpb1.getNbEntries());
+        assertNull(bpb1.getNameFromFiveDigits(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertNull(bpb1.getNameFromFiveDigits(UniversityDepartment.FST.getDiallingCode()+s1));
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertEquals(name1, bpb1.getNameFromFiveDigits(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertNull(bpb1.getNameFromFiveDigits(UniversityDepartment.FST.getDiallingCode()+s1));
+        assertTrue(bpb1.add(name2, UniversityDepartment.FST, s1));
+        assertEquals(2, bpb1.getNbEntries());
+        assertEquals(name1, bpb1.getNameFromFiveDigits(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertEquals(name2, bpb1.getNameFromFiveDigits(UniversityDepartment.FST.getDiallingCode()+s1));
+    }
+
+    @Test
+    void testListing() {
+        String resultIUT = UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator");
+        String resultFST = UniversityDepartment.FST.getLabelLong() + System.getProperty("line.separator");
+        String resultFH = UniversityDepartment.FH.getLabelLong() + System.getProperty("line.separator");
+        assertEquals(0, bpb1.getNbEntries());
+        assertEquals(resultIUT, bpb1.listing(UniversityDepartment.IUT));
+        assertEquals(resultFST, bpb1.listing(UniversityDepartment.FST));
+        assertEquals(resultFH, bpb1.listing(UniversityDepartment.FH));
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        resultIUT += name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        assertEquals(1, bpb1.getNbEntries());
+        assertEquals(resultIUT, bpb1.listing(UniversityDepartment.IUT));
+        assertEquals(resultFST, bpb1.listing(UniversityDepartment.FST));
+        assertEquals(resultFH, bpb1.listing(UniversityDepartment.FH));
+        assertTrue(bpb1.add(name2, UniversityDepartment.FST, s1));
+        resultFST += name2 + ":" + ppn2.internToString() + System.getProperty("line.separator");
+        assertEquals(2, bpb1.getNbEntries());
+        assertEquals(resultIUT, bpb1.listing(UniversityDepartment.IUT));
+        assertEquals(resultFST, bpb1.listing(UniversityDepartment.FST));
+        assertEquals(resultFH, bpb1.listing(UniversityDepartment.FH));
+        assertTrue(bpb1.add(name3, UniversityDepartment.IUT, s3));
+        resultIUT = UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator")+ name3 + ":" + ppn5.internToString() + System.getProperty("line.separator") + name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        assertEquals(3, bpb1.getNbEntries());
+        assertEquals(resultIUT, bpb1.listing(UniversityDepartment.IUT));
+        assertEquals(resultFST, bpb1.listing(UniversityDepartment.FST));
+        assertEquals(resultFH, bpb1.listing(UniversityDepartment.FH));
+    }
+
+    @Test
+    void testListing2() {
+        // empty listing
+        String result = "";
+        for(int i=0; i<UniversityDepartment.values().length; i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }
+        assertEquals(0, bpb1.getNbEntries());
+        assertEquals(result, bpb1.listing());
+        // first addition (IUT)
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        {result = "";
+        for(int i=0; i<UniversityDepartment.IUT.ordinal(); i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }
+        result += UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator");
+        result += name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        for(int i=UniversityDepartment.IUT.ordinal()+1; i<UniversityDepartment.values().length; i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }}
+        assertEquals(1, bpb1.getNbEntries());
+        assertEquals(result, bpb1.listing());
+        // second addition (FST)
+        assertTrue(bpb1.add(name2, UniversityDepartment.FST, s1));
+        {result = "";
+        for(int i=0; i<UniversityDepartment.FST.ordinal(); i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }
+        result += UniversityDepartment.FST.getLabelLong() + System.getProperty("line.separator");
+        result += name2 + ":" + ppn2.internToString() + System.getProperty("line.separator");
+        result += UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator");
+        result += name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        for(int i=UniversityDepartment.IUT.ordinal()+1; i<UniversityDepartment.values().length; i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }}
+        assertEquals(2, bpb1.getNbEntries());
+        assertEquals(result, bpb1.listing());
+        // third addition (IUT)
+        assertTrue(bpb1.add(name3, UniversityDepartment.IUT, s3));
+        {result = "";
+        for(int i=0; i<UniversityDepartment.FST.ordinal(); i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }
+        result += UniversityDepartment.FST.getLabelLong() + System.getProperty("line.separator");
+        result += name2 + ":" + ppn2.internToString() + System.getProperty("line.separator");
+        result += UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator");
+        result += name3 + ":" + ppn5.internToString() + System.getProperty("line.separator");
+        result += name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        for(int i=UniversityDepartment.IUT.ordinal()+1; i<UniversityDepartment.values().length; i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }}
+        assertEquals(3, bpb1.getNbEntries());
+        assertEquals(result, bpb1.listing());
+    }
+}
diff --git a/src/tp07/tpOO-07-res/BreedingFarmTest.java b/src/tp07/tpOO-07-res/BreedingFarmTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..49f8df8f0f60b7b6e2a8ba01ebf93ed6f989cc4b
--- /dev/null
+++ b/src/tp07/tpOO-07-res/BreedingFarmTest.java
@@ -0,0 +1,164 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class BreedingFarmTest {
+    int id1, id2, id3, id4, id5, id6, size1;
+    double w1, w2, w3;
+    Duck d1, d2;
+    Hen h1, h2;
+    Goose g1, g2;
+    BreedingFarm bf1, bf2;
+
+    @BeforeEach
+    void testInitialization() {
+        id1=1; id2=2; id3=10; id4=20; id5=100; id6=200;
+        size1=3;
+        w1=3.0; w2=6.0; w3=15.0;
+        d1 = new Duck(id1, w1);
+        d2 = new Duck(id2, w2);
+        h1 = new Hen(id3, w1);
+        h2 = new Hen(id4, w2);
+        g1 = new Goose(id5, w2);
+        g2 = new Goose(id6, w3);
+        bf1 = new BreedingFarm(size1);
+        bf2 = new BreedingFarm();
+    }
+
+    @Test
+    void testAdd() {
+        // bf1 --> élevage taille max = size1
+        // bf2 --> élevage taille max par défaut
+        assertEquals(0, bf1.getFarmSize());
+        assertEquals(0, bf2.getFarmSize());
+        bf1.add(d1); bf2.add(d1);
+        assertEquals(1, bf1.getFarmSize());
+        assertEquals(1, bf2.getFarmSize());
+        bf1.add(h1); bf2.add(h1);
+        assertEquals(2, bf1.getFarmSize());
+        assertEquals(2, bf2.getFarmSize());
+        bf1.add(g1); bf2.add(g1);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(3, bf2.getFarmSize());
+        bf1.add(d2); bf2.add(d2);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(4, bf2.getFarmSize());
+    }
+
+    @Test
+    void testGetNbDuck() {
+        assertEquals(0, bf1.getNbDuck());
+        bf1.add(d1);
+        assertEquals(1, bf1.getFarmSize());
+        assertEquals(1, bf1.getNbDuck());
+        bf1.add(h1);
+        assertEquals(2, bf1.getFarmSize());
+        assertEquals(1, bf1.getNbDuck());
+        bf1.add(d2);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(2, bf1.getNbDuck());
+    }
+
+    @Test
+    void testSearch() {
+        bf1.add(d1); bf1.add(h1); bf1.add(g1);
+        assertEquals(3, bf1.getFarmSize());
+        assertSame(d1, bf1.search(id1));
+        assertNull(bf1.search(id2));
+        assertSame(h1, bf1.search(id3));
+        assertNull(bf1.search(id4));
+        assertSame(g1, bf1.search(id5));
+        assertNull(bf1.search(id6));
+    }
+
+    @Test
+    void testGetDuck() {
+        bf1.add(d1); bf1.add(h1); bf1.add(d2);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(2, bf1.getNbDuck());
+        assertSame(d1, bf1.getDuck(1));
+        assertSame(d2, bf1.getDuck(2));
+        assertNull(bf1.getDuck(3));
+    }
+
+    @Test
+    void testUpdateWeight() {
+        bf1.add(d1); bf1.add(h1); bf1.add(g1);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(w1, d1.getWeight());
+        bf1.updateWeight(id1, w2);
+        assertEquals(w2, d1.getWeight());
+    }
+
+    @Test
+    void testIsFatEnough() {
+        assertFalse(d1.isFatEnough());
+        assertTrue(d2.isFatEnough());
+        assertFalse(h1.isFatEnough());
+        assertTrue(h2.isFatEnough());
+        assertFalse(g1.isFatEnough());
+        assertTrue(g2.isFatEnough());
+    }
+
+    @Test
+    void testPotentialProfit() {
+        double profit = 0.0;
+        assertEquals(0, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(d1); // too thin
+        assertEquals(1, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(d2); // can be slaughtered
+        profit += d2.getWeight() * d2.getPriceKg();
+        assertEquals(2, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(h1); // too thin
+        assertEquals(3, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(h2); // can be slaughtered
+        profit += h2.getWeight() * h2.getPriceKg();
+        assertEquals(4, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(g1); // too thin
+        assertEquals(5, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(g2); // can be slaughtered
+        profit += g2.getWeight() * g2.getPriceKg();
+        assertEquals(6, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+    }
+
+    @Test
+    void testSlaughtering() {
+        List<Poultry> toSlaughter = new ArrayList<Poultry>();
+        bf2.add(d1); bf2.add(h1);
+        assertEquals(2, bf2.getFarmSize());
+        toSlaughter = bf2.slaughtering();
+        assertEquals(2, bf2.getFarmSize());
+        assertEquals(0, toSlaughter.size());
+        bf2.add(d2);
+        assertEquals(3, bf2.getFarmSize());
+        toSlaughter = bf2.slaughtering();
+        assertEquals(2, bf2.getFarmSize());
+        assertEquals(1, toSlaughter.size());
+        assertEquals(d2, toSlaughter.get(0));
+        bf2.add(d2); bf2.add(h2);
+        assertEquals(4, bf2.getFarmSize());
+        toSlaughter = bf2.slaughtering();
+        assertEquals(2, bf2.getFarmSize());
+        assertEquals(2, toSlaughter.size());
+        assertEquals(d2, toSlaughter.get(0));
+        assertEquals(h2, toSlaughter.get(1));
+    }
+
+}
diff --git a/src/tp07/tpOO-07-res/DuckTest.java b/src/tp07/tpOO-07-res/DuckTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b8dbb13110524e6e237683dc3e78ed6910f2878
--- /dev/null
+++ b/src/tp07/tpOO-07-res/DuckTest.java
@@ -0,0 +1,56 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class DuckTest {
+    public int id1, id2, id3;
+    public double w1, w2, w3;
+    public Duck d1, d2, d3;
+
+    @BeforeEach
+    void testInitialization() {
+        id1=10; id2=20; id3=30;
+        w1=1.0; w2=2.0; w3=3.0;
+        d1 = new Duck(id1, w1);
+        d2 = new Duck(id2, w2);
+        d3 = new Duck(id3, w3);
+    }
+
+    @Test
+    void testGetIdentity() {
+        assertEquals(id1, d1.getIdentity());
+        assertEquals(id2, d2.getIdentity());
+        assertEquals(id3, d3.getIdentity());
+    }
+
+    @Test
+    void testSetIdentity() {
+        assertEquals(id1, d1.getIdentity());
+        d1.setIdentity(id2);
+        assertEquals(id2, d1.getIdentity());
+    }
+
+    @Test
+    void testGetWeight() {
+        assertEquals(w1, d1.getWeight());
+        assertEquals(w2, d2.getWeight());
+        assertEquals(w3, d3.getWeight());
+    }
+
+    @Test
+    void testSetWeight() {
+        assertEquals(w1, d1.getWeight());
+        d1.setWeight(w2);
+        assertEquals(w2, d1.getWeight());
+    }
+
+    @Test
+    void testGetPrice() {
+        assertEquals(w1*d1.getPriceKg(), d1.getPrice());
+        assertEquals(w2*d2.getPriceKg(), d2.getPrice());
+        assertEquals(w3*d3.getPriceKg(), d3.getPrice());
+    }
+}
diff --git a/src/tp07/tpOO-07-res/GooseTest.java b/src/tp07/tpOO-07-res/GooseTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ee4b0453e53933a1d81933e4aaa5c63b73bc7ab
--- /dev/null
+++ b/src/tp07/tpOO-07-res/GooseTest.java
@@ -0,0 +1,56 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class GooseTest {
+    public int id1, id2, id3;
+    public double w1, w2, w3;
+    public Goose g1, g2, g3;
+
+    @BeforeEach
+    void testInitialization() {
+        id1=10; id2=20; id3=30;
+        w1=1.0; w2=2.0; w3=3.0;
+        g1 = new Goose(id1, w1);
+        g2 = new Goose(id2, w2);
+        g3 = new Goose(id3, w3);
+    }
+
+    @Test
+    void testGetIdentity() {
+        assertEquals(id1, g1.getIdentity());
+        assertEquals(id2, g2.getIdentity());
+        assertEquals(id3, g3.getIdentity());
+    }
+
+    @Test
+    void testSetIdentity() {
+        assertEquals(id1, g1.getIdentity());
+        g1.setIdentity(id2);
+        assertEquals(id2, g1.getIdentity());
+    }
+
+    @Test
+    void testGetWeight() {
+        assertEquals(w1, g1.getWeight());
+        assertEquals(w2, g2.getWeight());
+        assertEquals(w3, g3.getWeight());
+    }
+
+    @Test
+    void testSetWeight() {
+        assertEquals(w1, g1.getWeight());
+        g1.setWeight(w2);
+        assertEquals(w2, g1.getWeight());
+    }
+
+    @Test
+    void testGetPrice() {
+        assertEquals(w1*g1.getPriceKg(), g1.getPrice());
+        assertEquals(w2*g2.getPriceKg(), g2.getPrice());
+        assertEquals(w3*g3.getPriceKg(), g3.getPrice());
+    }
+}
diff --git a/src/tp07/tpOO-07-res/HenTest.java b/src/tp07/tpOO-07-res/HenTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..29d883c13ccc3aaf6c612632e48c6787da33c993
--- /dev/null
+++ b/src/tp07/tpOO-07-res/HenTest.java
@@ -0,0 +1,56 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class HenTest {
+    public int id1, id2, id3;
+    public double w1, w2, w3;
+    public Hen h1, h2, h3;
+
+    @BeforeEach
+    void testInitialization() {
+        id1=10; id2=20; id3=30;
+        w1=1.0; w2=2.0; w3=3.0;
+        h1 = new Hen(id1, w1);
+        h2 = new Hen(id2, w2);
+        h3 = new Hen(id3, w3);
+    }
+
+    @Test
+    void testGetIdentity() {
+        assertEquals(id1, h1.getIdentity());
+        assertEquals(id2, h2.getIdentity());
+        assertEquals(id3, h3.getIdentity());
+    }
+
+    @Test
+    void testSetIdentity() {
+        assertEquals(id1, h1.getIdentity());
+        h1.setIdentity(id2);
+        assertEquals(id2, h1.getIdentity());
+    }
+
+    @Test
+    void testGetWeight() {
+        assertEquals(w1, h1.getWeight());
+        assertEquals(w2, h2.getWeight());
+        assertEquals(w3, h3.getWeight());
+    }
+
+    @Test
+    void testSetWeight() {
+        assertEquals(w1, h1.getWeight());
+        h1.setWeight(w2);
+        assertEquals(w2, h1.getWeight());
+    }
+
+    @Test
+    void testGetPrice() {
+        assertEquals(w1*h1.getPriceKg(), h1.getPrice());
+        assertEquals(w2*h2.getPriceKg(), h2.getPrice());
+        assertEquals(w3*h3.getPriceKg(), h3.getPrice());
+    }
+}
diff --git a/src/tp07/tpOO-07-res/ProPhoneNumberTest.java b/src/tp07/tpOO-07-res/ProPhoneNumberTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..18bc73ce047438c200982d701c838a6429532e5d
--- /dev/null
+++ b/src/tp07/tpOO-07-res/ProPhoneNumberTest.java
@@ -0,0 +1,73 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class ProPhoneNumberTest {
+    public String s1, s2;
+    public ProPhoneNumber un, deux, trois, quatre;
+
+    @BeforeEach
+    void initialization() {
+        s1 = "1234";
+        s2 = "1111";
+        un = new ProPhoneNumber(s1, UniversityDepartment.IUT);
+        deux = new ProPhoneNumber(s1, UniversityDepartment.FST);
+        trois = new ProPhoneNumber(s2, UniversityDepartment.IUT);
+        quatre = new ProPhoneNumber(s1, UniversityDepartment.IUT);
+    }
+
+    @Test
+    void testEquals() {
+        assertTrue(un.equals(un));
+        assertFalse(un.equals(deux));
+        assertFalse(un.equals(trois));
+        assertTrue(un.equals(quatre));
+        assertFalse(deux.equals(trois));
+        assertFalse(deux.equals(quatre));
+    }
+
+    @Test
+    void testEquals2() {
+        assertTrue(un.equals(s1));
+        assertFalse(un.equals(s2));
+        assertTrue(deux.equals(s1));
+        assertFalse(deux.equals(s2));
+    }
+
+    @Test
+    void testInternToString() {
+        String res = "31234(" + UniversityDepartment.IUT.getLabelShort() + ")";
+        assertEquals(res, un.internToString());
+        res = "21234(" + UniversityDepartment.FST.getLabelShort() + ")";
+        assertEquals(res, deux.internToString());
+        res = "31111(" + UniversityDepartment.IUT.getLabelShort() + ")";
+        assertEquals(res, trois.internToString());
+        res = "31234(" + UniversityDepartment.IUT.getLabelShort() + ")";
+        assertEquals(res, quatre.internToString());
+    }
+
+    @Test
+    void testExternToString() {
+        String res = "+33.3.20.03.12.34 (" + UniversityDepartment.IUT.getLabelLong() + ")";
+        assertEquals(res, un.externToString());
+        res = "+33.3.20.02.12.34 (" + UniversityDepartment.FST.getLabelLong() + ")";
+        assertEquals(res, deux.externToString());
+        res = "+33.3.20.03.11.11 (" + UniversityDepartment.IUT.getLabelLong() + ")";
+        assertEquals(res, trois.externToString());
+        res = "+33.3.20.03.12.34 (" + UniversityDepartment.IUT.getLabelLong() + ")";
+        assertEquals(res, quatre.externToString());
+    }
+
+    @Test
+    void testGetDepartment() {
+        assertEquals(UniversityDepartment.IUT, un.getDepartment());
+        assertEquals(UniversityDepartment.FST, deux.getDepartment());
+        assertEquals(UniversityDepartment.IUT, trois.getDepartment());
+        assertEquals(UniversityDepartment.IUT, quatre.getDepartment());
+    }
+}
diff --git a/src/tp07/tpOO-07-res/UniversityDepartment.java b/src/tp07/tpOO-07-res/UniversityDepartment.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba3e6362fe6b7d60f708ef8b09f87351606597d9
--- /dev/null
+++ b/src/tp07/tpOO-07-res/UniversityDepartment.java
@@ -0,0 +1,16 @@
+package tp07; // à adapter éventuellement selon la structure de votre projet
+
+public enum UniversityDepartment {
+    F3S(1,"Faculté des Sciences de Santé et du Sport"),
+    FST(2,"Faculté des Sciences et Technologies"),
+    IUT(3,"Institut Universitaire de Technologies"),
+    FSJPS(4,"Faculté des Sciences Juridiques, Politiques et Sociales"),
+    FSEST(5,"Faculté des Sciences Économiques, Sociales et des Territoires"),
+    FH(6,"Faculté des Humanités"),
+    FLCS(7,"Faculté des Langues, Cultures et Sociétés"),
+    FPSEF(8,"Faculté de Psychologie, Sciences de l’Education et de la Formation");
+
+   public UniversityDepartment(int DialingCode, String LabelShort, String LabelLong){
+    
+   }
+}
diff --git a/src/tp07/tpOO-07-res/tp07-res.jar b/src/tp07/tpOO-07-res/tp07-res.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6926c42ee68ba1e984e142fe33e8dd818aae5833
Binary files /dev/null and b/src/tp07/tpOO-07-res/tp07-res.jar differ