diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/footballteamobject/DuplicatePlayerException.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/footballteamobject/DuplicatePlayerException.java new file mode 100644 index 000000000..8ce51b41c --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/footballteamobject/DuplicatePlayerException.java @@ -0,0 +1,7 @@ +package com.codedifferently.footballteamobject; + +public class DuplicatePlayerException extends Exception { + public DuplicatePlayerException(String message) { + super(message); + } +} diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/footballteamobject/FootballTeam.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/footballteamobject/FootballTeam.java new file mode 100644 index 000000000..bdd8225c4 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/footballteamobject/FootballTeam.java @@ -0,0 +1,106 @@ +package com.codedifferently.footballteamobject; + +import java.util.HashMap; +import java.util.Map; + +public class FootballTeam { + + public static class DuplicatePlayerException extends Exception { + public DuplicatePlayerException(String message) { + super(message); + } + } + + private int playerCount; + private int jerseyNumber50AndOver; + private int jerseyNumberUnder50; + private Map players = new HashMap<>(); + private final String teamName; + private final String location; + private final Conference conference; + + public FootballTeam( + String teamName, String location, Conference conference, Map players) { + this.teamName = teamName; + this.location = location; + this.conference = conference; + this.players = players; + } + + public enum Conference { + // Power Five Conferences + ACC, + BIG_12, + BIG_10, + PAC_12, + SEC, + // Group of Five Conferences + AMERICAN, + CONFERENCE_USA, + MAC, + MOUNTAIN_WEST, + SUN_BELT + } + + public boolean isPowerFive() { + if (conference == Conference.ACC + || conference == Conference.BIG_12 + || conference == Conference.BIG_10 + || conference == Conference.PAC_12 + || conference == Conference.SEC) { + return true; + } + return false; + } + + public String getTeamName() { + return teamName; + } + + public String getLocation() { + return location; + } + + public Conference getConference() { + return conference; + } + + public int getPlayerCount() { + return playerCount; + } + + public Map getPlayers() { + return players; + } + + public void addPlayer(int number, String name) throws DuplicatePlayerException { + if (players.containsKey(number)) { + throw new DuplicatePlayerException("A player with that number already exists."); + } + players.put(number, name); + playerCount++; + } + + public void removePlayer(int number) { + players.remove(number); + playerCount--; + } + + public void tallyJerseyNumbers() { + for (Map.Entry entry : players.entrySet()) { + if (entry.getKey() < 50) { + jerseyNumberUnder50++; + } else { + jerseyNumber50AndOver++; + } + } + } + + public int getJerseyNumber50AndOver() { + return jerseyNumber50AndOver; + } + + public int getJerseyNumberUnder50() { + return jerseyNumberUnder50; + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/footballteamobject/FootballTeamTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/footballteamobject/FootballTeamTest.java new file mode 100644 index 000000000..6ae22f0f5 --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/footballteamobject/FootballTeamTest.java @@ -0,0 +1,98 @@ +package com.codedifferently.footballteamobject; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.codedifferently.footballteamobject.FootballTeam.Conference; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class FootballTeamTest { + FootballTeam team; + private Map players; + + @BeforeEach + void setUp() { + team = new FootballTeam("Alabama", "Tuscaloosa", FootballTeam.Conference.SEC, new HashMap<>()); + players = new HashMap<>(); + players.put(2, "Derrick Henry"); + } + + @Test + public void testGetTeamName_ReturnsCorrectName() { + assertEquals("Alabama", team.getTeamName()); + } + + @Test + public void testGetTeamName_ReturnsNonNull() { + assertNotNull(team.getTeamName()); + } + + @Test + public void testAddPlayer() throws FootballTeam.DuplicatePlayerException { + team.addPlayer(1, "John Doe"); + assertEquals(1, team.getPlayerCount()); + assertEquals("John Doe", team.getPlayers().get(1)); + } + + @Test + public void testRemovePlayer() throws FootballTeam.DuplicatePlayerException { + team.addPlayer(1, "John Doe"); + team.removePlayer(1); + assertEquals(0, team.getPlayerCount()); + assertFalse(team.getPlayers().containsKey(1)); + } + + @Test + public void testTallyJerseyNumbers_Under50() throws FootballTeam.DuplicatePlayerException { + team.addPlayer(1, "Player 1"); + team.tallyJerseyNumbers(); + assertEquals(1, team.getJerseyNumberUnder50()); + } + + @Test + public void testPowerFiveConferences() { + FootballTeam team = new FootballTeam("Team Name", "Location", Conference.ACC, new HashMap<>()); + assertTrue(team.isPowerFive()); + team = new FootballTeam("Team Name", "Location", Conference.BIG_12, new HashMap<>()); + assertTrue(team.isPowerFive()); + team = new FootballTeam("Team Name", "Location", Conference.BIG_10, new HashMap<>()); + assertTrue(team.isPowerFive()); + team = new FootballTeam("Team Name", "Location", Conference.PAC_12, new HashMap<>()); + assertTrue(team.isPowerFive()); + team = new FootballTeam("Team Name", "Location", Conference.SEC, new HashMap<>()); + assertTrue(team.isPowerFive()); + } + + @Test + public void testGroupOfFiveConferences() { + FootballTeam team = + new FootballTeam("Team Name", "Location", Conference.AMERICAN, new HashMap<>()); + assertFalse(team.isPowerFive()); + team = new FootballTeam("Team Name", "Location", Conference.CONFERENCE_USA, new HashMap<>()); + assertFalse(team.isPowerFive()); + team = new FootballTeam("Team Name", "Location", Conference.MAC, new HashMap<>()); + assertFalse(team.isPowerFive()); + team = new FootballTeam("Team Name", "Location", Conference.MOUNTAIN_WEST, new HashMap<>()); + assertFalse(team.isPowerFive()); + team = new FootballTeam("Team Name", "Location", Conference.SUN_BELT, new HashMap<>()); + assertFalse(team.isPowerFive()); + } + + @Test + void testDuplicatePlayerException() { + String message = "A player with that number already exists."; + DuplicatePlayerException exception = new DuplicatePlayerException(message); + assertThatThrownBy( + () -> { + throw exception; + }) + .isInstanceOf(DuplicatePlayerException.class) + .hasMessage(message); + } +}