From d0f420e9c0ce015e2bbe72d000e9ab2abccbd85f Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Fri, 5 Jul 2024 18:02:27 +0200 Subject: [PATCH] test invalid command case, and btw, nice to see "InvalidCommandNameProvided: The available commands are [MOVE_FORWARD, MOVE_BACKWARDS, TURN_LEFT, TURN_RIGHT]" in response --- .../marsrover/api/commands/RoverCommandFactory.java | 6 +++++- .../commands/RotableRiderRoverCommandFactory.java | 7 ++++++- .../codingtests/marsrover/test/MarsRoverTest.java | 11 +++++++++++ ...nRotableAndMoveCommandsOnDeployedRoverWithMap.java | 3 ++- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommandFactory.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommandFactory.java index c6cc917..110cddb 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommandFactory.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommandFactory.java @@ -9,5 +9,9 @@ public interface RoverCommandFactory { RoverCommandFactory provideWith(Rover rover); } - class InvalidCommandNameProvided extends RuntimeException{} + class InvalidCommandNameProvided extends RuntimeException{ + public InvalidCommandNameProvided(String explanation) { + super(explanation); + } + } } diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RotableRiderRoverCommandFactory.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RotableRiderRoverCommandFactory.java index 485f89d..fa13f58 100644 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RotableRiderRoverCommandFactory.java +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RotableRiderRoverCommandFactory.java @@ -6,6 +6,7 @@ import cat.hack3.codingtests.marsrover.api.Rover; import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; import cat.hack3.codingtests.marsrover.api.commands.RoverCommandFactory; +import java.util.Arrays; import java.util.Optional; public class RotableRiderRoverCommandFactory implements RoverCommandFactory { @@ -26,7 +27,7 @@ public class RotableRiderRoverCommandFactory implements RoverCommandFactory { @Override public RoverCommand create(String commandName) { var commandType = tryResolvingCommandTypeFrom(commandName) - .orElseThrow(InvalidCommandNameProvided::new); + .orElseThrow(() -> new InvalidCommandNameProvided(getAvailableCommandsExplanation())); return switch (commandType) { case MOVE_FORWARD -> new MoveForwardCommand(rover); case MOVE_BACKWARDS -> new MoveBackwardsCommand(rover); @@ -42,4 +43,8 @@ public class RotableRiderRoverCommandFactory implements RoverCommandFactory { return Optional.empty(); } } + + private String getAvailableCommandsExplanation() { + return String.format("The available commands are %s", Arrays.toString(RoverCommandType.values())); + } } diff --git a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java index 4caa2e8..63bbd59 100644 --- a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java +++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java @@ -2,6 +2,7 @@ package cat.hack3.codingtests.marsrover.test; import cat.hack3.codingtests.marsrover.api.cartography.Coordinates; import cat.hack3.codingtests.marsrover.api.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommandFactory.InvalidCommandNameProvided; import cat.hack3.codingtests.marsrover.test.context.GivenRotableAndMoveCommandsOnDeployedRoverWithMap; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -132,4 +133,14 @@ public class MarsRoverTest extends GivenRotableAndMoveCommandsOnDeployedRoverWit assertEquals(rover.getCurrentDirection(), EAST); } + @Test(expectedExceptions = InvalidCommandNameProvided.class) + public void invalidCommand() { + try { + commandFactory.create("FLY_TILL_THE_MOON").execute(); + } catch (InvalidCommandNameProvided e) { + e.printStackTrace(); + throw e; + } + } + } diff --git a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/context/GivenRotableAndMoveCommandsOnDeployedRoverWithMap.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/context/GivenRotableAndMoveCommandsOnDeployedRoverWithMap.java index fd3dd16..28dcd2e 100644 --- a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/context/GivenRotableAndMoveCommandsOnDeployedRoverWithMap.java +++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/context/GivenRotableAndMoveCommandsOnDeployedRoverWithMap.java @@ -6,6 +6,7 @@ import cat.hack3.codingtests.marsrover.api.commands.RoverCommandFactory; public class GivenRotableAndMoveCommandsOnDeployedRoverWithMap extends GivenMarsRoverDeployedOnMarsMap { public static final Class COMMAND_FACTORY_PROVIDER = RoverCommandFactory.Provider.class; + protected RoverCommandFactory commandFactory; protected RoverCommand moveForwardCommand; protected RoverCommand moveBackwardsCommand; protected RoverCommand turnLeftCommand; @@ -13,7 +14,7 @@ public class GivenRotableAndMoveCommandsOnDeployedRoverWithMap extends GivenMars public void setUp() { super.setUp(); - RoverCommandFactory commandFactory = getImplProviderOf(COMMAND_FACTORY_PROVIDER) + commandFactory = getImplProviderOf(COMMAND_FACTORY_PROVIDER) .provideWith(rover); moveForwardCommand = commandFactory.create("MOVE_FORWARD");