From d6330fbc342f07b674b06841290907ef5a9f172f Mon Sep 17 00:00:00 2001 From: mercedes-mathews Date: Thu, 10 Apr 2025 16:25:50 +0000 Subject: [PATCH 1/3] feat: adds StrengthMachine class including tests and a custom exception --- .../MachineInUseException.java | 7 + .../strengthMachine/StrengthMachine.java | 102 +++++++++++ .../StrengthMachineTest.java | 171 ++++++++++++++++++ 3 files changed, 280 insertions(+) create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/MachineInUseException.java create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/StrengthMachine.java create mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthMachineTest/StrengthMachineTest.java diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/MachineInUseException.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/MachineInUseException.java new file mode 100644 index 000000000..a50e54d77 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/MachineInUseException.java @@ -0,0 +1,7 @@ +package com.codedifferently.lesson16.strengthMachine; + +public class MachineInUseException extends RuntimeException { + public MachineInUseException(String message) { + super(message); + } +} diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/StrengthMachine.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/StrengthMachine.java new file mode 100644 index 000000000..ca4b28dde --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/StrengthMachine.java @@ -0,0 +1,102 @@ +package com.codedifferently.lesson16.strengthMachine; + +import java.util.ArrayList; + +public class StrengthMachine { + private String name; + private int currentWeight; + private boolean inUse; + private ArrayList safetyTips; + private MuscleGroup targetMuscle; + + public enum MuscleGroup { + SHOULDERS, + CHEST, + ARMS, + LEGS, + BACK + } + + public StrengthMachine( + String name, + int currentWeight, + boolean inUse, + ArrayList safetyTips, + MuscleGroup targetMuscle) { + this.name = name; + this.currentWeight = currentWeight; + this.inUse = inUse; + this.safetyTips = safetyTips; + this.targetMuscle = targetMuscle; + } + + public StrengthMachine(String name, MuscleGroup targetMuscle) { + this.name = name; + this.currentWeight = 5; + this.inUse = false; + this.safetyTips = new ArrayList<>(); + this.targetMuscle = targetMuscle; + } + + public boolean isAvailable() { + return !inUse; + } + + public void increaseWeightGradually(int targetWeight) { + while (currentWeight < targetWeight) { + currentWeight += 5; + } + } + + public void addSafetyTip(String tip) { + safetyTips.add(tip); + } + + public void useMachine() { + if (isAvailable()) { + inUse = true; + } else { + throw new MachineInUseException("Cannot use - Machine currently in use"); + } + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getCurrentWeight() { + return currentWeight; + } + + public void setCurrentWeight(int currentWeight) { + this.currentWeight = currentWeight; + } + + public boolean getInUse() { + return inUse; + } + + public void setInUse(boolean inUse) { + this.inUse = inUse; + } + + public ArrayList getSafetyTips() { + return safetyTips; + } + + public void setSafetyTips(ArrayList safetyTips) { + this.safetyTips = safetyTips; + } + + public MuscleGroup getTargetMuscle() { + return targetMuscle; + } + + public void setTargetMuscle(MuscleGroup targetMuscle) { + this.targetMuscle = targetMuscle; + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthMachineTest/StrengthMachineTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthMachineTest/StrengthMachineTest.java new file mode 100644 index 000000000..7c0c510b5 --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthMachineTest/StrengthMachineTest.java @@ -0,0 +1,171 @@ +package com.codedifferently.lesson16.strengthMachineTest; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.codedifferently.lesson16.strengthMachine.MachineInUseException; +import com.codedifferently.lesson16.strengthMachine.StrengthMachine; +import com.codedifferently.lesson16.strengthMachine.StrengthMachine.MuscleGroup; +import java.util.ArrayList; +import java.util.Arrays; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class StrengthMachineTest { + + StrengthMachine strengthMachine; + + @BeforeEach + void setUp() { + strengthMachine = + new StrengthMachine( + "Leg Press", + 100, + false, + new ArrayList<>(Arrays.asList("Keep back straight.", "Use a spotter for heavy lifts.")), + StrengthMachine.MuscleGroup.LEGS); + } + + @Test + public void testIsAvailableTrue() { + assertTrue(strengthMachine.isAvailable()); + } + + @Test + public void testIsAvailableFalse() { + strengthMachine.useMachine(); + assertFalse(strengthMachine.isAvailable()); + } + + @Test + public void testIncreaseWeightGradually() { + strengthMachine.increaseWeightGradually(125); + int actual = strengthMachine.getCurrentWeight(); + assertThat(actual).isEqualTo(125); + } + + @Test + public void testAddSafetyTip() { + strengthMachine.addSafetyTip("Do not lock your joints."); + assertThat(strengthMachine.getSafetyTips().size()).isEqualTo(3); + } + + @Test + public void testUseMachineAvailable() { + strengthMachine.useMachine(); + assertFalse(strengthMachine.isAvailable()); + } + + @Test + public void testUseMachineException() { + strengthMachine.useMachine(); + + assertThatThrownBy(() -> strengthMachine.useMachine()) + .isInstanceOf(MachineInUseException.class) + .hasMessage("Cannot use - Machine currently in use"); + } + + @Test + public void testGetName() { + // Act + String actual = strengthMachine.getName(); + + // Assert + assertThat(actual).isEqualTo("Leg Press"); + } + + @Test + public void testSetName() { + // Act + strengthMachine.setName("Leg Curl"); + String actual = strengthMachine.getName(); + + // Assert + assertThat(actual).isEqualTo("Leg Curl"); + } + + @Test + public void testGetCurrentWeight() { + // Act + int actual = strengthMachine.getCurrentWeight(); + + // Assert + assertThat(actual).isEqualTo(100); + } + + @Test + public void testSetCurrentWeight() { + // Act + strengthMachine.setCurrentWeight(150); + int actual = strengthMachine.getCurrentWeight(); + + // Assert + assertThat(actual).isEqualTo(150); + } + + @Test + public void testGetInUse() { + // Act + boolean actual = strengthMachine.getInUse(); + + // Assert + assertThat(actual).isEqualTo(false); + } + + @Test + public void testSetInUse() { + // Act + strengthMachine.setInUse(true); + boolean actual = strengthMachine.getInUse(); + + // Assert + assertThat(actual).isEqualTo(true); + } + + @Test + public void testGetSafetyTips() { + // Act + ArrayList actual = strengthMachine.getSafetyTips(); + + // Assert + assertThat(actual.size()).isEqualTo(2); + assertThat(actual.get(0)).isEqualTo("Keep back straight."); + assertThat(actual.get(1)).isEqualTo("Use a spotter for heavy lifts."); + } + + @Test + public void testSetSafetyTips() { + // Arrange + ArrayList newTips = + new ArrayList<>(Arrays.asList("Bend knees slightly.", "Do not lock your joints.")); + // Act + strengthMachine.setSafetyTips(newTips); + ArrayList actual = strengthMachine.getSafetyTips(); + + // Assert + assertThat(actual.size()).isEqualTo(2); + assertThat(actual.get(0)).isEqualTo("Bend knees slightly."); + assertThat(actual.get(1)).isEqualTo("Do not lock your joints."); + } + + @Test + public void testGetTargetMuscle() { + // Act + MuscleGroup actual = strengthMachine.getTargetMuscle(); + + // Assert + assertThat(actual).isEqualTo(StrengthMachine.MuscleGroup.LEGS); + } + + @Test + public void testSetTargetMuscle() { + // Act + strengthMachine.setTargetMuscle(StrengthMachine.MuscleGroup.BACK); + MuscleGroup actual = strengthMachine.getTargetMuscle(); + + // Assert + assertThat(actual).isEqualTo(StrengthMachine.MuscleGroup.BACK); + } +} From d26d23cb848f79416e92698e434b33c8872d328d Mon Sep 17 00:00:00 2001 From: mercedes-mathews Date: Fri, 11 Apr 2025 15:35:53 +0000 Subject: [PATCH 2/3] fix: adds temporary adjusted package names in main and test folders --- .../MachineInUseException.java | 2 +- .../StrengthMachine.java | 2 +- .../StrengthMachineTest.java | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) rename lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/{strengthMachine => strengthmachine1}/MachineInUseException.java (71%) rename lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/{strengthMachine => strengthmachine1}/StrengthMachine.java (97%) rename lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/{strengthMachineTest => strengthmachine1}/StrengthMachineTest.java (93%) diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/MachineInUseException.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/MachineInUseException.java similarity index 71% rename from lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/MachineInUseException.java rename to lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/MachineInUseException.java index a50e54d77..30dd0fecc 100644 --- a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/MachineInUseException.java +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/MachineInUseException.java @@ -1,4 +1,4 @@ -package com.codedifferently.lesson16.strengthMachine; +package com.codedifferently.lesson16.strengthmachine1; public class MachineInUseException extends RuntimeException { public MachineInUseException(String message) { diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/StrengthMachine.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachine.java similarity index 97% rename from lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/StrengthMachine.java rename to lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachine.java index ca4b28dde..01edd1a34 100644 --- a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthMachine/StrengthMachine.java +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachine.java @@ -1,4 +1,4 @@ -package com.codedifferently.lesson16.strengthMachine; +package com.codedifferently.lesson16.strengthmachine1; import java.util.ArrayList; diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthMachineTest/StrengthMachineTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachineTest.java similarity index 93% rename from lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthMachineTest/StrengthMachineTest.java rename to lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachineTest.java index 7c0c510b5..e5a814227 100644 --- a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthMachineTest/StrengthMachineTest.java +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachineTest.java @@ -1,13 +1,11 @@ -package com.codedifferently.lesson16.strengthMachineTest; +package com.codedifferently.lesson16.strengthmachine1; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import com.codedifferently.lesson16.strengthMachine.MachineInUseException; -import com.codedifferently.lesson16.strengthMachine.StrengthMachine; -import com.codedifferently.lesson16.strengthMachine.StrengthMachine.MuscleGroup; +import com.codedifferently.lesson16.strengthmachine1.StrengthMachine.MuscleGroup; import java.util.ArrayList; import java.util.Arrays; import org.junit.jupiter.api.BeforeEach; From c7c7f4e262a88a91d9de228c601cb03583b2db65 Mon Sep 17 00:00:00 2001 From: mercedes-mathews Date: Fri, 11 Apr 2025 15:38:13 +0000 Subject: [PATCH 3/3] fix: adjusted package names in main and test folders --- .../MachineInUseException.java | 2 +- .../StrengthMachine.java | 2 +- .../StrengthMachineTest.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/{strengthmachine1 => strengthmachine}/MachineInUseException.java (71%) rename lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/{strengthmachine1 => strengthmachine}/StrengthMachine.java (97%) rename lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/{strengthmachine1 => strengthmachine}/StrengthMachineTest.java (96%) diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/MachineInUseException.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine/MachineInUseException.java similarity index 71% rename from lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/MachineInUseException.java rename to lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine/MachineInUseException.java index 30dd0fecc..1ff8f543c 100644 --- a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/MachineInUseException.java +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine/MachineInUseException.java @@ -1,4 +1,4 @@ -package com.codedifferently.lesson16.strengthmachine1; +package com.codedifferently.lesson16.strengthmachine; public class MachineInUseException extends RuntimeException { public MachineInUseException(String message) { diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachine.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine/StrengthMachine.java similarity index 97% rename from lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachine.java rename to lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine/StrengthMachine.java index 01edd1a34..538823880 100644 --- a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachine.java +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/strengthmachine/StrengthMachine.java @@ -1,4 +1,4 @@ -package com.codedifferently.lesson16.strengthmachine1; +package com.codedifferently.lesson16.strengthmachine; import java.util.ArrayList; diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachineTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthmachine/StrengthMachineTest.java similarity index 96% rename from lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachineTest.java rename to lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthmachine/StrengthMachineTest.java index e5a814227..79039a9ca 100644 --- a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthmachine1/StrengthMachineTest.java +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/strengthmachine/StrengthMachineTest.java @@ -1,11 +1,11 @@ -package com.codedifferently.lesson16.strengthmachine1; +package com.codedifferently.lesson16.strengthmachine; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import com.codedifferently.lesson16.strengthmachine1.StrengthMachine.MuscleGroup; +import com.codedifferently.lesson16.strengthmachine.StrengthMachine.MuscleGroup; import java.util.ArrayList; import java.util.Arrays; import org.junit.jupiter.api.BeforeEach;