diff --git a/src/main/java/segelzwerg/sporttooolbox/web/pace/PaceService.java b/src/main/java/segelzwerg/sporttooolbox/web/pace/PaceService.java index 20f4e69c..06022c84 100644 --- a/src/main/java/segelzwerg/sporttooolbox/web/pace/PaceService.java +++ b/src/main/java/segelzwerg/sporttooolbox/web/pace/PaceService.java @@ -7,6 +7,10 @@ import segelzwerg.sporttooolbox.SpeedCalculator; import segelzwerg.sporttooolbox.web.speed.SpeedForm; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + /** * Pace calculating service @@ -14,6 +18,8 @@ @Component public class PaceService { + List validPaceUnits = new ArrayList<>(Arrays.asList("minutesPerKilometer", "minutesPerHundredMeters")); + /** * calulates pace * @@ -23,6 +29,9 @@ public class PaceService { public Pace calculatePace(SpeedForm form) { String majorUnit = ((majorUnit = form.getDistanceMajorUnit()) != null) ? majorUnit : "kilometer"; String minorUnit = ((minorUnit = form.getDistanceMinorUnit()) != null) ? minorUnit : "meter"; + String resultUnit = ((resultUnit = form.getResultUnit()) != null) ? resultUnit : "minutesPerKilometer"; + + checkValidUnit(validPaceUnits, resultUnit); int major = form.getMajor(); int minor = form.getMinor(); Distance distance = Distance.createWithOtherThanSIUnits(major, minor, majorUnit, minorUnit); @@ -36,4 +45,10 @@ public Pace calculatePace(SpeedForm form) { return speedCalculator.computePace(); } + + private void checkValidUnit(List validUnits, String unit) { + if (!validUnits.contains(unit)) { + throw new IllegalArgumentException("This is not a valid unit: " + unit); + } + } } diff --git a/src/main/java/segelzwerg/sporttooolbox/web/speed/SpeedForm.java b/src/main/java/segelzwerg/sporttooolbox/web/speed/SpeedForm.java index f8b78855..2523e735 100644 --- a/src/main/java/segelzwerg/sporttooolbox/web/speed/SpeedForm.java +++ b/src/main/java/segelzwerg/sporttooolbox/web/speed/SpeedForm.java @@ -11,4 +11,5 @@ public class SpeedForm { private int second; private String distanceMajorUnit; private String distanceMinorUnit; + private String resultUnit; } diff --git a/src/main/java/segelzwerg/sporttooolbox/web/speed/SpeedService.java b/src/main/java/segelzwerg/sporttooolbox/web/speed/SpeedService.java index 41824099..470106c7 100644 --- a/src/main/java/segelzwerg/sporttooolbox/web/speed/SpeedService.java +++ b/src/main/java/segelzwerg/sporttooolbox/web/speed/SpeedService.java @@ -6,11 +6,16 @@ import segelzwerg.sporttooolbox.IUnits.Time; import segelzwerg.sporttooolbox.SpeedCalculator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + /** * Speed calculating service */ @Component public class SpeedService { + List validSpeedUnits = new ArrayList<>(Arrays.asList("kilometerPerHour", "milesPerHour", "knots")); /** * Calculate speed @@ -19,8 +24,13 @@ public class SpeedService { * @return calculated speed */ public Speed calculateSpeed(SpeedForm form) { + String majorUnit = ((majorUnit = form.getDistanceMajorUnit()) != null) ? majorUnit : "kilometer"; String minorUnit = ((minorUnit = form.getDistanceMinorUnit()) != null) ? minorUnit : "meter"; + String resultUnit = ((resultUnit = form.getResultUnit()) != null) ? resultUnit : "kilometerPerHour"; + + checkValidUnit(validSpeedUnits, resultUnit); + int major = form.getMajor(); int minor = form.getMinor(); Distance distance = Distance.createWithOtherThanSIUnits(major, minor, majorUnit, minorUnit); @@ -35,5 +45,10 @@ public Speed calculateSpeed(SpeedForm form) { return speedCalculator.computeSpeed(); } + private void checkValidUnit(List validUnits, String unit) { + if (!validUnits.contains(unit)) { + throw new IllegalArgumentException("This is not a valid unit: " + unit); + } + } } diff --git a/src/main/resources/templates/PaceForm.html b/src/main/resources/templates/PaceForm.html index 09314a03..fb1437ec 100644 --- a/src/main/resources/templates/PaceForm.html +++ b/src/main/resources/templates/PaceForm.html @@ -60,6 +60,14 @@

Pace Calculator

type="text" value="0"> +
+ + +
@@ -72,7 +80,7 @@

Pace Calculator

Pace

- The average pace is 30 Minutes + The average pace is 30 Minutes per Kilometer for travelling 30 - + Speed Calculator type="text" value="0">

+
+ + +
@@ -73,7 +81,8 @@

Speed Calculator

Speed

- The average speed is 30 km/h + The average speed is 30 km/H for travelling 30 kilometer and 0 meter in diff --git a/src/test/java/segelzwerg/sporttooolbox/web/pace/PaceServiceTest.java b/src/test/java/segelzwerg/sporttooolbox/web/pace/PaceServiceTest.java index a1ea1266..b69cbef9 100644 --- a/src/test/java/segelzwerg/sporttooolbox/web/pace/PaceServiceTest.java +++ b/src/test/java/segelzwerg/sporttooolbox/web/pace/PaceServiceTest.java @@ -46,4 +46,11 @@ void invalidMinorUnit() { assertThrows(IllegalArgumentException.class, () -> paceService.calculatePace(paceForm)); } + + @Test + void invalidResultUnit() { + paceForm.setResultUnit("abc"); + + assertThrows(IllegalArgumentException.class, () -> paceService.calculatePace(paceForm)); + } } \ No newline at end of file diff --git a/src/test/java/segelzwerg/sporttooolbox/web/speed/SpeedServiceTest.java b/src/test/java/segelzwerg/sporttooolbox/web/speed/SpeedServiceTest.java index e2fb3c0a..0c7a6ccc 100644 --- a/src/test/java/segelzwerg/sporttooolbox/web/speed/SpeedServiceTest.java +++ b/src/test/java/segelzwerg/sporttooolbox/web/speed/SpeedServiceTest.java @@ -45,4 +45,11 @@ void invalidMinorUnit() { assertThrows(IllegalArgumentException.class, () -> speedService.calculateSpeed(speedForm)); } + + @Test + void invalidResultUnit() { + speedForm.setResultUnit("abc"); + + assertThrows(IllegalArgumentException.class, () -> speedService.calculateSpeed(speedForm)); + } } \ No newline at end of file