package net.thucydides.core.model; import org.junit.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; public class WhenDefiningUserStoriesForTests { class MyUserStories { class PurchaseNewWidget{}; class SearchWidgets{}; class DisplayWidgets{}; } @net.thucydides.core.annotations.Story(MyUserStories.PurchaseNewWidget.class) class WhenUserPurchasesNewWidgets { public void shouldDoThis(){} public void shouldDoThat(){} } @net.thucydides.core.annotations.Story(MyUserStories.PurchaseNewWidget.class) class WhenUserPurchasesLotsOfNewWidgets { } class WhenDoingSomethingElse { } @Test public void a_test_case_should_be_validating_a_user_story() { Class<?> userStoryClass = net.thucydides.core.model.Story.testedInTestCase(WhenUserPurchasesNewWidgets.class); assertThat(userStoryClass.getName(), is(MyUserStories.PurchaseNewWidget.class.getName())); } @Test public void but_not_all_test_cases_have_a_user_story() { Class<?> userStoryClass = net.thucydides.core.model.Story.testedInTestCase(WhenDoingSomethingElse.class); assertThat(userStoryClass, is(nullValue())); } @Test public void several_test_cases_can_test_the_same_user_story() { Class<?> userStoryClass = net.thucydides.core.model.Story.testedInTestCase(WhenUserPurchasesNewWidgets.class); Class<?> userStoryClass2 = net.thucydides.core.model.Story.testedInTestCase(WhenUserPurchasesLotsOfNewWidgets.class); assertThat(userStoryClass.getName(), is(userStoryClass2.getName())); } @Test public void a_user_story_is_identified_by_the_story_class() { net.thucydides.core.model.Story story = net.thucydides.core.model.Story.from(MyUserStories.PurchaseNewWidget.class); assertThat(story.getId(), is(MyUserStories.PurchaseNewWidget.class.getCanonicalName())); } @Test public void a_user_story_name_is_derived_from_the_story_class() { net.thucydides.core.model.Story story = net.thucydides.core.model.Story.from(MyUserStories.PurchaseNewWidget.class); assertThat(story.getName(), is("Purchase new widget")); } @Test public void a_user_story_can_be_created_using_a_class_name_that_no_longer_exists() { net.thucydides.core.model.Story story = net.thucydides.core.model.Story.withId("net.thucydides.core.model.ThisClassNoLongerExists", "This class no longer exists"); assertThat(story.getId(), is("net.thucydides.core.model.ThisClassNoLongerExists")); } @Test public void a_user_story_created_using_a_class_name_that_no_longer_exists_retains_the_story_name() { net.thucydides.core.model.Story story = net.thucydides.core.model.Story.withId("net.thucydides.core.model.ThisClassNoLongerExists", "This class no longer exists"); assertThat(story.getName(), is("This class no longer exists")); } @Test public void stories_with_the_same_story_class_are_identical() { net.thucydides.core.model.Story story1 = net.thucydides.core.model.Story.from(MyUserStories.PurchaseNewWidget.class); net.thucydides.core.model.Story story2 = net.thucydides.core.model.Story.from(MyUserStories.PurchaseNewWidget.class); assertThat(story1, is(story2)); } @Test public void stories_with_different_story_classes_are_not_identical() { net.thucydides.core.model.Story story1 = net.thucydides.core.model.Story.from(MyUserStories.DisplayWidgets.class); net.thucydides.core.model.Story story2 = net.thucydides.core.model.Story.from(MyUserStories.PurchaseNewWidget.class); assertThat(story1, is(not(story2))); } @Test public void stories_with_the_same_story_class_are_identical_even_if_the_class_is_no_longer_available() { net.thucydides.core.model.Story story1 = net.thucydides.core.model.Story.from(MyUserStories.PurchaseNewWidget.class); net.thucydides.core.model.Story story2 = net.thucydides.core.model.Story .withId("net.thucydides.core.model.WhenDefiningUserStoriesForTests.MyUserStories.PurchaseNewWidget", "Purchase new widget") .withPath("net.thucydides.core.model.WhenDefiningUserStoriesForTests.MyUserStories"); assertThat(story1, is(story2)); } @Test public void a_story_should_know_what_feature_it_belongs_to() { net.thucydides.core.model.Story story = net.thucydides.core.model.Story.from(MyUserStories.PurchaseNewWidget.class); } @Test public void a_story_can_be_defined_using_a_name_and_a_path() { net.thucydides.core.model.Story story = net.thucydides.core.model.Story.withIdAndPath("storyId","story name","a.b.c"); assertThat(story.getPath(), is("a.b.c")); } @Test public void a_story_path_for_a_class_is_derived_from_the_package() { net.thucydides.core.model.Story story = net.thucydides.core.model.Story.from(MyUserStories.PurchaseNewWidget.class); assertThat(story.getPath(), is("net.thucydides.core.model.WhenDefiningUserStoriesForTests.MyUserStories")); } }