diff --git a/screenplay-exercises (2).iml b/screenplay-exercises (2).iml new file mode 100644 index 0000000..52e7480 --- /dev/null +++ b/screenplay-exercises (2).iml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/serenitylabs/tutorials/trains/questions/LiveUpdateIncidents.java b/src/main/java/serenitylabs/tutorials/trains/questions/LiveUpdateIncidents.java index c833834..4ee2880 100644 --- a/src/main/java/serenitylabs/tutorials/trains/questions/LiveUpdateIncidents.java +++ b/src/main/java/serenitylabs/tutorials/trains/questions/LiveUpdateIncidents.java @@ -3,11 +3,28 @@ import net.serenitybdd.screenplay.Question; import net.serenitybdd.screenplay.questions.Text; import serenitylabs.tutorials.trains.ui.LiveUpdates; +import serenitylabs.tutorials.trains.ui.UpdateType; +import java.util.Collection; import java.util.List; +import static serenitylabs.tutorials.trains.ui.UpdateType.*; + public class LiveUpdateIncidents { public static Question> forLineUpdates() { - return actor -> Text.of(LiveUpdates.LINE_UPDATES).viewedBy(actor).asList(); + return actor -> Text.of(LiveUpdates.messageForUpdatesOfType(LineUpdates)).viewedBy(actor).asList(); + } + + public static Question> forGeneralUpdates() { + return actor -> Text.of(LiveUpdates.messageForUpdatesOfType(GeneralUpdates)).viewedBy(actor).asList(); + } + + public static Question> forTrainCancellations() { + return actor -> Text.of(LiveUpdates.messageForUpdatesOfType(TrainCancellation)).viewedBy(actor).asList(); + } + + public static Question> forStationUpdates() { + return actor -> Text.of(LiveUpdates.messageForUpdatesOfType(StationUpdates)).viewedBy(actor).asList(); } } + diff --git a/src/main/java/serenitylabs/tutorials/trains/tasks/ChosenTo.java b/src/main/java/serenitylabs/tutorials/trains/tasks/ChosenTo.java index 58e3adc..34779ef 100644 --- a/src/main/java/serenitylabs/tutorials/trains/tasks/ChosenTo.java +++ b/src/main/java/serenitylabs/tutorials/trains/tasks/ChosenTo.java @@ -3,9 +3,11 @@ import net.serenitybdd.screenplay.Actor; import net.serenitybdd.screenplay.Performable; import net.serenitybdd.screenplay.Task; +import net.serenitybdd.screenplay.actions.Click; import net.serenitybdd.screenplay.actions.Open; import net.thucydides.core.annotations.Step; import serenitylabs.tutorials.trains.ui.MainMenu; +import serenitylabs.tutorials.trains.ui.TicketTypeForm; import static net.serenitybdd.screenplay.Tasks.instrumented; diff --git a/src/main/java/serenitylabs/tutorials/trains/tasks/ViewTheLiveUpdates.java b/src/main/java/serenitylabs/tutorials/trains/tasks/ViewTheLiveUpdates.java index c92152a..12d802a 100644 --- a/src/main/java/serenitylabs/tutorials/trains/tasks/ViewTheLiveUpdates.java +++ b/src/main/java/serenitylabs/tutorials/trains/tasks/ViewTheLiveUpdates.java @@ -7,18 +7,42 @@ import net.serenitybdd.screenplay.actions.Click; import net.thucydides.core.annotations.Step; import serenitylabs.tutorials.trains.ui.LiveUpdates; +import serenitylabs.tutorials.trains.ui.UpdateType; + +import javax.sound.midi.Instrument; + +import static net.serenitybdd.screenplay.Tasks.instrumented; +import static serenitylabs.tutorials.trains.ui.UpdateType.*; public class ViewTheLiveUpdates implements Task { + private final UpdateType updateType; + + public ViewTheLiveUpdates(UpdateType updateType) { + this.updateType = updateType; + } + @Override @Step("{0} views the live updates for #updateType") public void performAs(T actor) { actor.attemptsTo( - Click.on(LiveUpdates.LINE_UPDATE_TOGGLE) + Click.on(LiveUpdates.toggleForUpdatesOfType(updateType)) ); } public static Performable forLineUpdate() { - return Instrumented.instanceOf(ViewTheLiveUpdates.class).newInstance(); + return Instrumented.instanceOf(ViewTheLiveUpdates.class).withProperties(LineUpdates); + } + + public static Performable forGeneralUpdates() { + return Instrumented.instanceOf(ViewTheLiveUpdates.class).withProperties(GeneralUpdates); + } + + public static Performable forTrainCancellations() { + return Instrumented.instanceOf(ViewTheLiveUpdates.class).withProperties(TrainCancellation); + } + + public static Performable forStationUpdates() { + return Instrumented.instanceOf(ViewTheLiveUpdates.class).withProperties(StationUpdates); } } diff --git a/src/main/java/serenitylabs/tutorials/trains/ui/LiveUpdates.java b/src/main/java/serenitylabs/tutorials/trains/ui/LiveUpdates.java index ee4e63f..801009c 100644 --- a/src/main/java/serenitylabs/tutorials/trains/ui/LiveUpdates.java +++ b/src/main/java/serenitylabs/tutorials/trains/ui/LiveUpdates.java @@ -2,9 +2,38 @@ import net.serenitybdd.screenplay.targets.Target; +import java.util.HashMap; + +import static serenitylabs.tutorials.trains.ui.UpdateType.*; + public class LiveUpdates { public static final Target LINE_UPDATE_BADGE = Target.the("Line updates badge").locatedBy("#line_updatesCount"); - public static final Target LINE_UPDATE_TOGGLE = Target.the("Line updates button").locatedBy("//span[contains(.,'Line Updates')]"); - public static final Target LINE_UPDATES = Target.the("Line updates").locatedBy("#line_updates .incident"); + public static final Target GENERAL_UPDATE_BADGE = Target.the("General updates badge").locatedBy("#general_updatesCount"); + public static final Target TRAIN_CANCELLATION_BADGE = Target.the("Train cancellation update badge").locatedBy("#train_cancel_updatesCount"); + public static final Target STATION_UPDATES_BADGE = Target.the("Station updates badge").locatedBy("#station_updatesCount"); + + public static HashMap UPDATE_TOGGLE = new HashMap<>(); + public static HashMap UPDATE_MESSAGES = new HashMap<>(); + + static { + UPDATE_TOGGLE.put(LineUpdates, Target.the("Line updates button").locatedBy("//span[contains(.,'Line Updates')]")); + UPDATE_TOGGLE.put(GeneralUpdates, Target.the("General updates button").locatedBy("#general_updates_btn")); + UPDATE_TOGGLE.put(TrainCancellation, Target.the("Train cancellation updates button").locatedBy("#train_cancel_updates_btn")); + UPDATE_TOGGLE.put(StationUpdates, Target.the("Station update button").locatedBy("#station_updates_btn")); + + UPDATE_MESSAGES.put(LineUpdates, Target.the("Line updates").locatedBy("#line_updates .incident")); + UPDATE_MESSAGES.put(GeneralUpdates, Target.the("General updates").locatedBy("#general_updates .incident")); + UPDATE_MESSAGES.put(TrainCancellation, Target.the("train Cancellation updates").locatedBy("#train_cancel_updates .incident")); + UPDATE_MESSAGES.put(StationUpdates, Target.the("Station updates").locatedBy("#station_updates .incident")); + + } + + public static Target toggleForUpdatesOfType(UpdateType updateType) { + return UPDATE_TOGGLE.get(updateType); + } + + public static Target messageForUpdatesOfType(UpdateType updateType) { + return UPDATE_MESSAGES.get(updateType); + } } diff --git a/src/main/java/serenitylabs/tutorials/trains/ui/UpdateType.java b/src/main/java/serenitylabs/tutorials/trains/ui/UpdateType.java new file mode 100644 index 0000000..5174ca5 --- /dev/null +++ b/src/main/java/serenitylabs/tutorials/trains/ui/UpdateType.java @@ -0,0 +1,8 @@ +package serenitylabs.tutorials.trains.ui; + +/** + * Created by vdheer on 9/24/2016. + */ +public enum UpdateType { + LineUpdates, GeneralUpdates, TrainCancellation, StationUpdates; +} diff --git a/src/test/java/serenitylabs/tutorials/trains/WhenCheckingForLiveUpdates.java b/src/test/java/serenitylabs/tutorials/trains/WhenCheckingForLiveUpdates.java index c1a076b..2998167 100644 --- a/src/test/java/serenitylabs/tutorials/trains/WhenCheckingForLiveUpdates.java +++ b/src/test/java/serenitylabs/tutorials/trains/WhenCheckingForLiveUpdates.java @@ -18,6 +18,7 @@ import static net.serenitybdd.screenplay.GivenWhenThen.*; import static net.serenitybdd.screenplay.questions.AggregateQuestions.theTotalNumberOf; import static org.hamcrest.Matchers.equalTo; + @RunWith(SerenityRunner.class) public class WhenCheckingForLiveUpdates { @@ -52,6 +53,49 @@ public void line_updates_should_be_available() { @Test public void general_updates_should_be_available() { - // TODO + givenThat(tracy).has(ChosenTo.checkTheLiveUpdates()); + + when(tracy).attemptsTo(ViewTheLiveUpdates.forGeneralUpdates()); + + int generalUpdateCount = Text.of(LiveUpdates.GENERAL_UPDATE_BADGE).viewedBy(tracy).asInteger(); + + then(tracy).should( + eventually( + seeThat( + theTotalNumberOf(LiveUpdateIncidents.forGeneralUpdates()), + equalTo(generalUpdateCount)) + )); + } + + @Test + public void train_cancellation_updates_should_be_available() { + givenThat(tracy).has(ChosenTo.checkTheLiveUpdates()); + when(tracy).attemptsTo(ViewTheLiveUpdates.forTrainCancellations()); + + int trainCancellationCount = Text.of(LiveUpdates.TRAIN_CANCELLATION_BADGE).viewedBy(tracy).asInteger(); + + then(tracy).should( + eventually( + seeThat( + theTotalNumberOf(LiveUpdateIncidents.forTrainCancellations()), + equalTo(trainCancellationCount)))); + } + + @Test + public void station_updates_should_be_able() { + givenThat(tracy).has(ChosenTo.checkTheLiveUpdates()); + + int stationUpdatesCount = Text.of(LiveUpdates.STATION_UPDATES_BADGE).viewedBy(tracy).asInteger(); + + when(tracy).attemptsTo(ViewTheLiveUpdates.forStationUpdates()); + + then(tracy).should( + eventually( + seeThat( + theTotalNumberOf(LiveUpdateIncidents.forStationUpdates()), + equalTo(stationUpdatesCount) + ) + ) + ); } }