package sft.integration.use; import org.jsoup.select.Elements; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import sft.Decorate; import sft.Displayable; import sft.FixturesHelper; import sft.SimpleFunctionalTest; import sft.Text; import sft.decorators.Breadcrumb; import sft.integration.fixtures.CssParser; import sft.integration.fixtures.JUnitHtmlHelper; import sft.integration.fixtures.JavaResource; import sft.integration.use.sut.UseCaseLinks; import sft.integration.use.sut.subUseCase.SubUseCaseFailed; import sft.integration.use.sut.subUseCase.SubUseCaseIgnored; import sft.integration.use.sut.subUseCase.SubUseCaseSucceeded; import java.io.IOException; /* Use cases can be link together by using public field. */ @RunWith(SimpleFunctionalTest.class) @Decorate(decorator = Breadcrumb.class) public class LinksUseCasesTogether { private CssParser sftCss; @FixturesHelper private JUnitHtmlHelper jUnitHtmlHelper = new JUnitHtmlHelper(); private Elements relatedUseCases; @Displayable private String subCasesJavaSources; @Test public void publicFieldAreEvaluateAsRelatedUseCase() throws IOException { byAddingPublicFieldsOfRelatedTestClassInYourFunctionalTestClass(); whenInvokingJUnit(); thenTheHtmlFilePresentLinksToRelatedUseCasesAsListItemInTheLastSection(); successfullRelatedUseCaseAreDisplayedWithGreenCheckMark(); failedRelatedUseCaseAreDisplayedWithRedCrossMark(); ignoredRelatedUseCaseAreDisplayedWithYellowInterrogationMark(); } private void byAddingPublicFieldsOfRelatedTestClassInYourFunctionalTestClass() throws IOException { jUnitHtmlHelper.run(this.getClass(), UseCaseLinks.class); JavaResource subSuccessfulUseCaseSource = new JavaResource(SubUseCaseSucceeded.class); JavaResource subFailedUseCaseSource = new JavaResource(SubUseCaseFailed.class); JavaResource subIgnoredUseCaseSource = new JavaResource(SubUseCaseIgnored.class); subCasesJavaSources = "<div class=\"resources\">" + subSuccessfulUseCaseSource.getOpenResourceHtmlLink(this.getClass(), "succeeded", "alert-success") + subFailedUseCaseSource.getOpenResourceHtmlLink(this.getClass(), "failed", "alert-danger") + subIgnoredUseCaseSource.getOpenResourceHtmlLink(this.getClass(), "ignored", "alert-warning") + "</div>"; } @Text("When invoking JUnit") private void whenInvokingJUnit() { sftCss = new CssParser(); } private void thenTheHtmlFilePresentLinksToRelatedUseCasesAsListItemInTheLastSection() throws IOException { relatedUseCases = jUnitHtmlHelper.html.select("*.relatedUseCase"); Assert.assertEquals(3,relatedUseCases.size()); Assert.assertEquals("subUseCase/SubUseCaseSucceeded.html",relatedUseCases.get(0).select("a").first().attr("href")); Assert.assertEquals("subUseCase/SubUseCaseFailed.html",relatedUseCases.get(1).select("a").first().attr("href")); Assert.assertEquals("subUseCase/SubUseCaseIgnored.html",relatedUseCases.get(2).select("a").first().attr("href")); } private void successfullRelatedUseCaseAreDisplayedWithGreenCheckMark() { Assert.assertTrue("Related use case without class 'succeeded'", relatedUseCases.get(0).hasClass("succeeded")); Assert.assertEquals("url(success_16.png)", sftCss.get("*.relatedUseCase.succeeded a span").getStyle().getPropertyCSSValue("background-image").getCssText()); } private void failedRelatedUseCaseAreDisplayedWithRedCrossMark() { Assert.assertTrue("Related use case without class 'failed'", relatedUseCases.get(1).hasClass("failed")); Assert.assertEquals("url(failed_16.png)", sftCss.get("*.relatedUseCase.failed a span").getStyle().getPropertyCSSValue("background-image").getCssText()); } private void ignoredRelatedUseCaseAreDisplayedWithYellowInterrogationMark() { Assert.assertTrue("Related use case without class 'ignored'", relatedUseCases.get(2).hasClass("ignored")); Assert.assertEquals("url(ignored_16.png)", sftCss.get("*.relatedUseCase.ignored a span").getStyle().getPropertyCSSValue("background-image").getCssText()); } }