package com.bddinaction.flyinghigh.junit; import com.bddinaction.flyinghigh.model.FrequentFlyer; import com.bddinaction.flyinghigh.model.Status; import net.thucydides.junit.runners.ThucydidesRunner; import net.thucydides.core.annotations.Steps; import net.thucydides.core.annotations.Step; import org.junit.Test; import org.junit.runner.RunWith; import static org.fest.assertions.api.Assertions.assertThat; @RunWith(ThucydidesRunner.class) public class CalculatingStatusBasedOnPointsScenario { @Steps private EarningStatusPointsSteps steps; @Test public void new_members_should_start_out_as_Bronze() { steps.user_is_not_a_Frequent_Flyer_member("Jill", "Smith"); steps.registers_on_the_Frequent_Flyer_program(); steps.should_have_status_of(Status.Bronze); } public class EarningStatusPointsSteps { String firstName; String lastName; FrequentFlyer member; @Step("Given {0} {1} is not a Frequent Flyer member") public void user_is_not_a_Frequent_Flyer_member(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } @Step("When she registers on the Frequent Flyer program") public void registers_on_the_Frequent_Flyer_program() { member = FrequentFlyer.withFrequentFlyerNumber("123456789") .named(firstName, lastName); } @Step("Then she should have a status of {0}") public void should_have_status_of(Status finalStatus) { assertThat(member.getStatus()).isEqualTo(finalStatus); } } }