package features;
import com.cloudbees.hudson.plugins.folder.HaveAFolderCreated;
import com.cloudbees.hudson.plugins.folder.HaveANestedProjectCreated;
import com.smartcodeltd.jenkinsci.plugins.build_monitor.questions.ProjectWidget;
import com.smartcodeltd.jenkinsci.plugins.build_monitor.tasks.CreateABuildMonitorView;
import com.smartcodeltd.jenkinsci.plugins.build_monitor.tasks.configuration.DisplayAllProjects;
import com.smartcodeltd.jenkinsci.plugins.build_monitor.tasks.configuration.DisplayNestedProjects;
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.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.matchers.WebElementStateMatchers.isVisible;
@RunWith(SerenityRunner.class)
public class ShouldSupportCloudBeesFolders {
Actor anna = Actor.named("Anna");
@Managed public WebDriver herBrowser;
@Rule public JenkinsInstance jenkins = JenkinsSandbox.configure().afterStart(
InstallPlugins.fromUpdateCenter("cloudbees-folder")
).create();
@Before
public void actorCanBrowseTheWeb() {
anna.can(BrowseTheWeb.with(herBrowser));
}
@Test
public void visualising_projects_nested_in_folders() throws Exception {
givenThat(anna).wasAbleTo(
Navigate.to(jenkins.url()),
HaveAFolderCreated.called("Search Services").andInsideIt(
HaveANestedProjectCreated.called("Librarian"),
HaveAFolderCreated.called("Contracts").andInsideIt(
HaveANestedProjectCreated.called("Third Party System")
)
)
);
when(anna).attemptsTo(
CreateABuildMonitorView.called("Build Monitor").andConfigureItTo(
DisplayAllProjects.usingARegularExpression(),
DisplayNestedProjects.fromSubfolders()
)
);
then(anna).should(seeThat(ProjectWidget.of("Search Services » Librarian").state(), isVisible()));
then(anna).should(seeThat(ProjectWidget.of("Search Services » Contracts » Third Party System").state(), isVisible()));
}
}