package features;
import com.smartcodeltd.jenkinsci.plugins.build_monitor.questions.ProjectWidget;
import com.smartcodeltd.jenkinsci.plugins.build_monitor.tasks.HaveABuildMonitorViewCreated;
import com.smartcodeltd.jenkinsci.plugins.build_monitor.tasks.ModifyControlPanelOptions;
import com.smartcodeltd.jenkinsci.plugins.build_monitor.tasks.ShowBadges;
import environment.JenkinsSandbox;
import net.serenitybdd.integration.jenkins.JenkinsInstance;
import net.serenitybdd.integration.jenkins.environment.rules.InstallPlugins;
import net.serenitybdd.junit.runners.SerenityRunner;
import net.serenitybdd.screenplay.Actor;
import net.serenitybdd.screenplay.abilities.BrowseTheWeb;
import net.serenitybdd.screenplay.jenkins.HaveAProjectCreated;
import net.serenitybdd.screenplay.jenkins.tasks.ScheduleABuild;
import net.serenitybdd.screenplay.jenkins.tasks.configuration.build_steps.AddAGroovyPostbuildScript;
import net.serenitybdd.screenplay.jenkins.tasks.configuration.build_steps.ExecuteAShellScript;
import net.serenitybdd.screenplay.jenkins.tasks.configuration.build_steps.GroovyScriptThat;
import net.serenitybdd.screenplayx.actions.Navigate;
import net.thucydides.core.annotations.Managed;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;
import static net.serenitybdd.screenplay.GivenWhenThen.*;
import static net.serenitybdd.screenplay.jenkins.tasks.configuration.build_steps.ShellScriptThat.Finishes_With_Success;
import static net.serenitybdd.screenplay.matchers.WebElementStateMatchers.isCurrentlyVisible;
@RunWith(SerenityRunner.class)
public class ShouldDisplayBadges {
Actor paul = Actor.named("Paul");
@Managed public WebDriver hisBrowser;
@Rule public JenkinsInstance jenkins = JenkinsSandbox.configure().afterStart(
InstallPlugins.fromUpdateCenter("buildtriggerbadge", "groovy-postbuild")
).create();
@Before
public void actorCanBrowseTheWeb() {
paul.can(BrowseTheWeb.with(hisBrowser));
}
@Test
public void displaying_build_badges() throws Exception {
givenThat(paul).wasAbleTo(
Navigate.to(jenkins.url()),
HaveAProjectCreated.called("My App").andConfiguredTo(
ExecuteAShellScript.that(Finishes_With_Success),
AddAGroovyPostbuildScript.that(GroovyScriptThat.Adds_A_Badge)
),
ScheduleABuild.of("My App"),
HaveABuildMonitorViewCreated.showingAllTheProjects()
);
when(paul).attemptsTo(ModifyControlPanelOptions.to(ShowBadges.onTheDashboard()));
then(paul).should(seeThat(ProjectWidget.of("My App").badges(),
isCurrentlyVisible()
));
}
}