Package net.thucydides.core.model

Source Code of net.thucydides.core.model.WhenGroupingUserStoriesByFeature$SubvertedFeature

package net.thucydides.core.model;


import net.thucydides.core.annotations.Feature;
import net.thucydides.core.model.features.ApplicationFeature;
import org.junit.Test;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;

class SimpleTestCase {};

public class WhenGroupingUserStoriesByFeature {

    @Feature
    class WidgetFeature {
         class PurchaseNewWidget{};
         class SearchWidgets{};
         class DisplayWidgets{};
    }

    @Feature
    class GizmoFeature {
         class PurchaseNewGizmo{};
         class SearchGizmos{};
         class DisplayGizmos{};
    }

    class MyApp {
         class PurchaseNewWidget{};
         class SearchWidgets{};
         class DisplayWidgets{};
    }

    @net.thucydides.core.annotations.Story(WidgetFeature.PurchaseNewWidget.class)
    class WhenUserPurchasesNewWidgetsTestCase {
        public void shouldDoThis(){}
        public void shouldDoThat(){}
    }

    @net.thucydides.core.annotations.Story(WidgetFeature.PurchaseNewWidget.class)
    class WhenUserPurchasesLotsOfNewWidgetsTestCase {
        public void shouldDoSomethingElse(){}
    }

    @Test
    public void a_user_story_can_belong_to_a_feature() {
        Class<?> userStoryClass = WidgetFeature.PurchaseNewWidget.class;

        net.thucydides.core.model.Story story = net.thucydides.core.model.Story.from(userStoryClass);
        ApplicationFeature feature = story.getFeature();
        assertThat(feature.getId(), is(WidgetFeature.class.getCanonicalName()));
    }

    @Test
    public void a_user_story_does_not_have_to_belong_to_a_feature() {
        Class<?> userStoryClass = SimpleTestCase.class;

        net.thucydides.core.model.Story story = net.thucydides.core.model.Story.from(userStoryClass);
        ApplicationFeature feature = story.getFeature();
        assertThat(feature, is(nullValue()));
    }

    @Test
    public void a_feature_can_be_defined_by_providing_a_feature_class() {
        ApplicationFeature feature = ApplicationFeature.from(WidgetFeature.class);

        assertThat(feature.getId(), is(WidgetFeature.class.getCanonicalName()));
        assertThat(feature.getName(), is("Widget feature"));
    }

    @Test
    public void a_feature_can_also_be_defined_by_providing_the_class_path_and_name() {
        ApplicationFeature feature = new ApplicationFeature(WidgetFeature.class.getCanonicalName(), "Widget feature");

        assertThat(feature.getId(), is(WidgetFeature.class.getCanonicalName()));
        assertThat(feature.getName(), is("Widget feature"));
    }

    @Test
    public void the_feature_name_is_by_default_the_human_readable_form_of_the_feature_class() {
        ApplicationFeature feature = ApplicationFeature.from(WidgetFeature.class);
        assertThat(feature.getName(), is("Widget feature"));
    }

    @Test
    public void the_feature_name_can_be_ovverriden() {
        ApplicationFeature feature = new ApplicationFeature(WidgetFeature.class.getCanonicalName(), "My special widget feature");
        assertThat(feature.getName(), is("My special widget feature"));
    }

    @Test
    public void a_user_story_can_be_nested_in_a_class_that_is_not_a_feature() {
        Class<?> userStoryClass = MyApp.PurchaseNewWidget.class;

        net.thucydides.core.model.Story story = net.thucydides.core.model.Story.from(userStoryClass);
        assertThat(story.getFeature(), is(nullValue()));
//        Class<?> featureClass = story.getFeatureClass();
//        assertThat(featureClass, is(nullValue()));
    }

    @Test
    public void a_user_story_can_return_the_name_of_its_feature() {
        Class<?> userStoryClass = WidgetFeature.PurchaseNewWidget.class;

        net.thucydides.core.model.Story story = net.thucydides.core.model.Story.from(userStoryClass);

        assertThat(story.getFeature().getName(), is("Widget feature"));
    }

    @Test
    public void a_feature_is_equal_to_itself() {
        ApplicationFeature feature = ApplicationFeature.from(WidgetFeature.class);
        assertThat(feature.equals(feature), is(true));
    }

    class SubvertedFeature extends ApplicationFeature {
        protected SubvertedFeature(final Class<?> featureClass) {
            super(featureClass);
        }
    };

    @Test
    public void a_feature_can_be_equal_to_another_subclassed_feature_instance() {
        ApplicationFeature feature = ApplicationFeature.from(WidgetFeature.class);
        SubvertedFeature subvertedFeature = new SubvertedFeature(WidgetFeature.class);
        assertThat(feature.equals(subvertedFeature), is(true));
    }

    @Test
    public void a_feature_can_only_be_equal_to_another_feature_instance() {
        ApplicationFeature feature = ApplicationFeature.from(WidgetFeature.class);
        Object notAFeature = new Object();
        assertThat(feature.equals(notAFeature), is(false));
    }

    @Test
    public void features_referring_to_the_same_feature_class_are_identical() {
        ApplicationFeature feature1 = ApplicationFeature.from(WidgetFeature.class);
        ApplicationFeature feature2 = ApplicationFeature.from(WidgetFeature.class);

        assertThat(feature1, is(feature2));
        assertThat(feature1.hashCode(), is(feature2.hashCode()));
    }

    @Test
    public void features_referring_to_different_feature_classes_are_different() {
        ApplicationFeature feature1 = ApplicationFeature.from(WidgetFeature.class);
        ApplicationFeature feature2 = ApplicationFeature.from(GizmoFeature.class);

        assertThat(feature1, is(not(feature2)));
        assertThat(feature1.hashCode(), is(not(feature2.hashCode())));
    }

    @Test
    public void features_referring_to_the_same_feature_id_and_name_are_identical() {
        ApplicationFeature feature1 = new ApplicationFeature("id","name");
        ApplicationFeature feature2 = new ApplicationFeature("id","name");

        assertThat(feature1, is(feature2));
        assertThat(feature1.hashCode(), is(feature2.hashCode()));
    }

    @Test
    public void features_referring_to_different_feature_id_are_different() {
        ApplicationFeature feature1 = new ApplicationFeature("id","name");
        ApplicationFeature feature2 = new ApplicationFeature("id2","name");

        assertThat(feature1, is(not(feature2)));
        assertThat(feature1.hashCode(), is(not(feature2.hashCode())));
    }

    @Test
    public void features_referring_to_different_feature_names_are_different() {
        ApplicationFeature feature1 = new ApplicationFeature("id","name");
        ApplicationFeature feature2 = new ApplicationFeature("id","name2");

        assertThat(feature1, is(not(feature2)));
        assertThat(feature1.hashCode(), is(not(feature2.hashCode())));
    }

    @Test
    public void a_user_story_can_return_the_corresponding_feature_class() {
        Class<?> userStoryClass = WidgetFeature.PurchaseNewWidget.class;

        net.thucydides.core.model.Story story = net.thucydides.core.model.Story.from(userStoryClass);
        ApplicationFeature feature = ApplicationFeature.from(WidgetFeature.class);

        assertThat(story.getFeature(), is(feature));
    }

    @Test
    public void a_user_story_can_return_the_corresponding_feature_class_using_id_and_name() {
        net.thucydides.core.model.Story story = Story.withId("story.class","AStory", "feature.class","AFeature");

        ApplicationFeature feature = new ApplicationFeature("feature.class","AFeature");

        assertThat(story.getFeature(), is(feature));
    }
}
TOP

Related Classes of net.thucydides.core.model.WhenGroupingUserStoriesByFeature$SubvertedFeature

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.