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)
+ )
+ )
+ );
}
}