package sft.integration.set; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import sft.Decorate; import sft.DefaultConfiguration; import sft.Displayable; import sft.SimpleFunctionalTest; import sft.Text; import sft.UseCase; import sft.decorators.Breadcrumb; import sft.decorators.Group; import sft.integration.fixtures.JavaResource; import sft.integration.set.sut.CommonUseCase; import sft.integration.set.sut.CustomConfiguration; import sft.integration.set.sut.UseCaseWithSpecificConfiguration; import sft.report.HtmlResources; @RunWith(SimpleFunctionalTest.class) @Decorate(decorator = Breadcrumb.class) public class Settings { private static final String AVAILABLE_SETTINGS = "Available settings"; @Displayable private String files; private UseCase useCase; @Decorate(decorator = Group.class,parameters = AVAILABLE_SETTINGS) public HtmlReportSettings htmlReportSettings = new HtmlReportSettings(); @Decorate(decorator = Group.class,parameters = AVAILABLE_SETTINGS) public SourceAndClassSettings sourceAndClassSettings = new SourceAndClassSettings(); @Test public void configurationMechanism() throws Exception { allSettingsOfAnUseCaseAreHoldByTheClassDefaultConfiguration(); toModifySettingsYouHaveToCreateAnInheritedClassFromDefaultConfigurationAndChangeSettingInTheConstructor(); thenYouCanInjectConfigurationByAnnotatedUseCaseJavaClassWithUsingCustomConfiguration(); allRelatedUseCasesWillUseThisConfiguration(); } private void allSettingsOfAnUseCaseAreHoldByTheClassDefaultConfiguration() throws Exception { useCase = new UseCase(CommonUseCase.class); Assert.assertEquals(DefaultConfiguration.class, useCase.configuration.getClass()); Assert.assertEquals(DefaultConfiguration.class, useCase.subUseCases.get(0).subUseCase.configuration.getClass()); Assert.assertEquals(DefaultConfiguration.class, useCase.subUseCases.get(1).subUseCase.configuration.getClass()); } @Text("To modify settings you have to create an inherited class from DefaultConfiguration and change setting in the constructor") private void toModifySettingsYouHaveToCreateAnInheritedClassFromDefaultConfigurationAndChangeSettingInTheConstructor() throws Exception { new HtmlResources().ensureIsCreated(); files = "<div class=\"resources\">" + new JavaResource(CustomConfiguration.class).getOpenResourceHtmlLink(this.getClass(), "custom configuration", "alert-info") + new JavaResource(UseCaseWithSpecificConfiguration.class).getOpenResourceHtmlLink(this.getClass(), "use case using custom configuration", "alert-info") + "</div>"; } @Text("Then you can inject configuration by annotated UseCase java class with: @Using( CustomConfiguration.class ).") private void thenYouCanInjectConfigurationByAnnotatedUseCaseJavaClassWithUsingCustomConfiguration() throws Exception { useCase = new UseCase(UseCaseWithSpecificConfiguration.class); Assert.assertEquals(CustomConfiguration.class, useCase.configuration.getClass()); } private void allRelatedUseCasesWillUseThisConfiguration() { Assert.assertEquals(CustomConfiguration.class, useCase.subUseCases.get(0).subUseCase.configuration.getClass()); Assert.assertEquals(CustomConfiguration.class, useCase.subUseCases.get(1).subUseCase.configuration.getClass()); } }