From 07f3cf28d06ae3b28ca72fcc9202e20995e7bdf5 Mon Sep 17 00:00:00 2001 From: NelltheWiz Date: Fri, 11 Apr 2025 17:00:03 +0000 Subject: [PATCH 1/2] feat: adds Chanels objects and class lesson 16 --- .../lesson16/Comedians/Comedians.java | 58 +++++++++++++++++++ .../lesson16/ComedianTest/ComediansTest.java | 3 + 2 files changed, 61 insertions(+) create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/Comedians/Comedians.java create mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/ComedianTest/ComediansTest.java diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/Comedians/Comedians.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/Comedians/Comedians.java new file mode 100644 index 000000000..f401cf75d --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/Comedians/Comedians.java @@ -0,0 +1,58 @@ +import java.util.List; +import java.util.Map; + +public class Comedians { + private final String fullName; + private final String nationality; + private final String style; + private final String activeYears; + private final List famousWorks; + private final double netWorth; + private final Map socialMediaFollowers; // e.g., {"Instagram": 1000000} + private final boolean isStillActive; + + public Comedians(String fullName, String nationality, String style, String activeYears, + List famousWorks, double netWorth, + Map socialMediaFollowers, boolean isStillActive) { + this.fullName = fullName; + this.nationality = nationality; + this.style = style; + this.activeYears = activeYears; + this.famousWorks = famousWorks; + this.netWorth = netWorth; + this.socialMediaFollowers = socialMediaFollowers; + this.isStillActive = isStillActive; + } + + public String getFullName() { + return fullName; + } + + public String getNationality() { + return nationality; + } + + public String getStyle() { + return style; + } + + public String getActiveYears() { + return activeYears; + } + + public List getFamousWorks() { + return famousWorks; + } + + public double getNetWorth() { + return netWorth; + } + + public Map getSocialMediaFollowers() { + return socialMediaFollowers; + } + + public boolean isStillActive() { + return isStillActive; + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/ComedianTest/ComediansTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/ComedianTest/ComediansTest.java new file mode 100644 index 000000000..f745ffc9d --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/ComedianTest/ComediansTest.java @@ -0,0 +1,3 @@ +public class ComediansTest { + +} From 3a073940153673acc6d93caf1b8a7b92ac5d8868 Mon Sep 17 00:00:00 2001 From: NelltheWiz Date: Fri, 11 Apr 2025 22:38:18 +0000 Subject: [PATCH 2/2] feat: refactor Comedians class structure and add validation for net worth --- .../lesson16/Comedians/Comedians.java | 58 ---------- .../lesson16/comedian/Comedians.java | 100 +++++++++++++++++ .../comedian/InvalidNetWorthException.java | 7 ++ .../lesson16/ComedianTest/ComediansTest.java | 3 - .../lesson16/comedianstest/ComediansTest.java | 104 ++++++++++++++++++ 5 files changed, 211 insertions(+), 61 deletions(-) delete mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/Comedians/Comedians.java create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/comedian/Comedians.java create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/comedian/InvalidNetWorthException.java delete mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/ComedianTest/ComediansTest.java create mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/comedianstest/ComediansTest.java diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/Comedians/Comedians.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/Comedians/Comedians.java deleted file mode 100644 index f401cf75d..000000000 --- a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/Comedians/Comedians.java +++ /dev/null @@ -1,58 +0,0 @@ -import java.util.List; -import java.util.Map; - -public class Comedians { - private final String fullName; - private final String nationality; - private final String style; - private final String activeYears; - private final List famousWorks; - private final double netWorth; - private final Map socialMediaFollowers; // e.g., {"Instagram": 1000000} - private final boolean isStillActive; - - public Comedians(String fullName, String nationality, String style, String activeYears, - List famousWorks, double netWorth, - Map socialMediaFollowers, boolean isStillActive) { - this.fullName = fullName; - this.nationality = nationality; - this.style = style; - this.activeYears = activeYears; - this.famousWorks = famousWorks; - this.netWorth = netWorth; - this.socialMediaFollowers = socialMediaFollowers; - this.isStillActive = isStillActive; - } - - public String getFullName() { - return fullName; - } - - public String getNationality() { - return nationality; - } - - public String getStyle() { - return style; - } - - public String getActiveYears() { - return activeYears; - } - - public List getFamousWorks() { - return famousWorks; - } - - public double getNetWorth() { - return netWorth; - } - - public Map getSocialMediaFollowers() { - return socialMediaFollowers; - } - - public boolean isStillActive() { - return isStillActive; - } -} diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/comedian/Comedians.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/comedian/Comedians.java new file mode 100644 index 000000000..f220c6466 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/comedian/Comedians.java @@ -0,0 +1,100 @@ +package com.codedifferently.lesson16.comedian; + +import java.util.List; +import java.util.Map; + +public class Comedians { + private final String fullName; + private final String nationality; + private final String activeYears; + private final List famousWorks; + private final double netWorth; + private final Map socialMediaFollowers; // e.g., {"Instagram": 1000000} + private final boolean isStillActive; + private final ComedyGenre comedyGenre; + + public enum ComedyGenre { + OBSERVATIONAL, + SATIRE, + IMPROV, + SLAPSTICK, + DARK, + PARODY + } + + public Comedians( + String fullName, + String nationality, + String activeYears, + List famousWorks, + double netWorth, + Map socialMediaFollowers, + boolean isStillActive, + ComedyGenre comedyGenre) { + this.fullName = fullName; + this.nationality = nationality; + this.activeYears = activeYears; + this.famousWorks = famousWorks; + this.netWorth = netWorth; + this.socialMediaFollowers = socialMediaFollowers; + this.isStillActive = isStillActive; + this.comedyGenre = comedyGenre; + } + + public String getFullName() { + return fullName; + } + + public String getNationality() { + return nationality; + } + + public String getActiveYears() { + return activeYears; + } + + public ComedyGenre getGenre() { + return comedyGenre; + } + + public List getFamousWorks() { + return famousWorks; + } + + public double getNetWorth() { + return netWorth; + } + + public Map getSocialMediaFollowers() { + return socialMediaFollowers; + } + + public boolean isStillActive() { + return isStillActive; + } + + public void validateNetWorth() throws InvalidNetWorthException { + if (netWorth < 0) { + throw new InvalidNetWorthException("Net worth cannot be negative!"); + } + } + + public String getCareerStatus() { + return isStillActive ? "Still active" : "Retired"; + } + + public void printFamousWorks() { + System.out.println("Famous Works:"); + for (String work : famousWorks) { + System.out.println("- " + work); + } + } + + public int totalFollowers() { + int total = 0; + for (int count : socialMediaFollowers.values()) { + total += count; + } + return total; + } +} diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/comedian/InvalidNetWorthException.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/comedian/InvalidNetWorthException.java new file mode 100644 index 000000000..51d629b54 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/comedian/InvalidNetWorthException.java @@ -0,0 +1,7 @@ +package com.codedifferently.lesson16.comedian; + +public class InvalidNetWorthException extends Exception { + public InvalidNetWorthException(String message) { + super(message); + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/ComedianTest/ComediansTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/ComedianTest/ComediansTest.java deleted file mode 100644 index f745ffc9d..000000000 --- a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/ComedianTest/ComediansTest.java +++ /dev/null @@ -1,3 +0,0 @@ -public class ComediansTest { - -} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/comedianstest/ComediansTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/comedianstest/ComediansTest.java new file mode 100644 index 000000000..7e4d869fe --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/comedianstest/ComediansTest.java @@ -0,0 +1,104 @@ +package com.codedifferently.lesson16.comedianstest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import com.codedifferently.lesson16.comedian.Comedians; +import com.codedifferently.lesson16.comedian.Comedians.ComedyGenre; +import com.codedifferently.lesson16.comedian.InvalidNetWorthException; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class ComediansTest { + + private Comedians testComedian; + + @BeforeEach + public void setUp() { + testComedian = + new Comedians( + "Dave Chappelle", + "USA", + "1991–present", + List.of("Killing Them Softly", "Sticks & Stones"), + 50000000, + Map.of("Instagram", 1000000, "Twitter", 500000), + true, + ComedyGenre.SATIRE); + } + + @Test + public void testFullName() { + assertEquals("Dave Chappelle", testComedian.getFullName()); + } + + @Test + public void testCareerStatus() { + assertEquals("Still active", testComedian.getCareerStatus()); + } + + @Test + public void testTotalFollowers() { + assertEquals(1500000, testComedian.totalFollowers()); + } + + @Test + public void testFamousWorksSize() { + assertEquals(2, testComedian.getFamousWorks().size()); + } + + @Test + public void testInvalidNetWorthThrowsException() { + Comedians brokeComedian = + new Comedians( + "Test Comic", + "USA", + "2010–present", + List.of("Set A"), + -1000.0, + Map.of("Instagram", 10000), + true, + ComedyGenre.DARK); + + assertThrows(InvalidNetWorthException.class, brokeComedian::validateNetWorth); + } + + @Test + public void testPrintFamousWorksOutput() { + // comments for CH to explain method from chatGPT Set up to capture System.out + ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + PrintStream originalOut = System.out; + System.setOut(new PrintStream(outContent)); + + // Call the method + testComedian.printFamousWorks(); + + // Restore original System.out + System.setOut(originalOut); + + // Expected output (make sure to include newline characters properly) + String expectedOutput = "Famous Works:\n- Killing Them Softly\n- Sticks & Stones\n"; + + // Compare output + assertEquals(expectedOutput, outContent.toString()); + } + + @Test + public void testGetNationality() { + assertEquals("USA", testComedian.getNationality()); + } + + @Test + public void testGetActiveYears() { + assertEquals("1991–present", testComedian.getActiveYears()); + } + + @Test + public void testGetGenre() { + assertEquals(ComedyGenre.SATIRE, testComedian.getGenre()); + } +}