diff --git a/java/src/main/java/it/tug/Main/AskResult.java b/java/src/main/java/it/tug/Main/AskResult.java new file mode 100644 index 0000000..6eec8e0 --- /dev/null +++ b/java/src/main/java/it/tug/Main/AskResult.java @@ -0,0 +1,11 @@ +package it.tug.Main; + +public abstract class AskResult { + public AskResult onOk(PermissionAction action) { + return this; + } + + public AskResult onFail(PermissionAction action) { + return this; + } +} diff --git a/java/src/main/java/it/tug/Main/FailAskResult.java b/java/src/main/java/it/tug/Main/FailAskResult.java new file mode 100644 index 0000000..06b2eac --- /dev/null +++ b/java/src/main/java/it/tug/Main/FailAskResult.java @@ -0,0 +1,9 @@ +package it.tug.Main; + +public class FailAskResult extends AskResult { + @Override + public AskResult onFail(PermissionAction action){ + action.execute(); + return this; + } +} diff --git a/java/src/main/java/it/tug/Main/Formatter.java b/java/src/main/java/it/tug/Main/Formatter.java index 92d91c6..8d59090 100644 --- a/java/src/main/java/it/tug/Main/Formatter.java +++ b/java/src/main/java/it/tug/Main/Formatter.java @@ -3,20 +3,26 @@ public class Formatter { private Service service; + private String doTheJobResult; public Formatter(Service service) { this.service = service; } public String doTheJob(String theInput) { - String response = service.askForPermission(); - switch (response) { - case "FAIL": - return "error"; - case "OK": - return String.format("%s%s", theInput, theInput); - default: - return null; - } + final String localInput = theInput; + service + .askForPermission() + .onFail(new PermissionAction() { + public void execute(){ + doTheJobResult = "error"; + } + }) + .onOk(new PermissionAction() { + public void execute(){ + doTheJobResult = String.format("%s%s", localInput, localInput); + } + }); + return doTheJobResult; } } diff --git a/java/src/main/java/it/tug/Main/OkAskResult.java b/java/src/main/java/it/tug/Main/OkAskResult.java new file mode 100644 index 0000000..b8ffd84 --- /dev/null +++ b/java/src/main/java/it/tug/Main/OkAskResult.java @@ -0,0 +1,9 @@ +package it.tug.Main; + +public class OkAskResult extends AskResult { + @Override + public AskResult onOk(PermissionAction action) { + action.execute(); + return this; + } +} diff --git a/java/src/main/java/it/tug/Main/PermissionAction.java b/java/src/main/java/it/tug/Main/PermissionAction.java new file mode 100644 index 0000000..3c510e5 --- /dev/null +++ b/java/src/main/java/it/tug/Main/PermissionAction.java @@ -0,0 +1,5 @@ +package it.tug.Main; + +public interface PermissionAction { + void execute(); +} diff --git a/java/src/main/java/it/tug/Main/Service.java b/java/src/main/java/it/tug/Main/Service.java index 8845681..7ab6b25 100644 --- a/java/src/main/java/it/tug/Main/Service.java +++ b/java/src/main/java/it/tug/Main/Service.java @@ -1,5 +1,5 @@ package it.tug.Main; public interface Service { - String askForPermission(); + AskResult askForPermission(); } diff --git a/java/src/test/java/it/tug/FormatterTest.java b/java/src/test/java/it/tug/FormatterTest.java index e568f67..ede3c33 100644 --- a/java/src/test/java/it/tug/FormatterTest.java +++ b/java/src/test/java/it/tug/FormatterTest.java @@ -3,8 +3,7 @@ import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import it.tug.Main.Formatter; -import it.tug.Main.Service; +import it.tug.Main.*; import org.junit.Before; import org.junit.Test; @@ -19,31 +18,34 @@ public void setup() { service = mock(Service.class); sut = new Formatter(service); } - + @Test public void shouldReturnAnErrorMessageIfServiceReturnsNull() { - when(this.service.askForPermission()).thenReturn("FAIL"); - + when(this.service.askForPermission()) + .thenReturn(new FailAskResult()); + String actual = sut.doTheJob("foo"); - + assertEquals("error", actual); } @Test public void shouldReturnAnTheStringDoubledIfServiceReturnsOK() { - when(this.service.askForPermission()).thenReturn("OK"); - + when(this.service.askForPermission()) + .thenReturn(new OkAskResult()); + String actual = sut.doTheJob("foobar"); - + assertEquals("foobarfoobar", actual); } - + @Test public void shouldReturnNullIfServiceRepliesDifferentlyThanOKOrFAIL() { - when(this.service.askForPermission()).thenReturn("luchino"); - + when(this.service.askForPermission()) + .thenReturn(new AskResult(){}); + String actual = sut.doTheJob("foobar"); - + assertEquals(null, actual); } }