package de.asideas.crowdsource.testsupport.cucumber;
import cucumber.api.java.After;
import cucumber.api.java.Before;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import de.asideas.crowdsource.domain.shared.LikeStatus;
import de.asideas.crowdsource.presentation.project.Project;
import de.asideas.crowdsource.testsupport.CrowdSourceTestConfig;
import de.asideas.crowdsource.testsupport.pageobjects.project.ProjectDetailPage;
import de.asideas.crowdsource.testsupport.pageobjects.project.ProjectListPage;
import de.asideas.crowdsource.testsupport.selenium.WebDriverProvider;
import de.asideas.crowdsource.testsupport.util.CrowdSourceClient;
import org.openqa.selenium.WebDriver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
@ContextConfiguration(classes = CrowdSourceTestConfig.class)
public class ProjectLikeSteps {
@Autowired
private WebDriverProvider webDriverProvider;
@Autowired
private ProjectListPage projectListPage;
@Autowired
private ProjectDetailPage projectDetailPage;
@Autowired
private ProjectDetailSteps projectDetailSteps;
@Autowired
private CrowdSourceClient crowdSourceClient;
private WebDriver webDriver;
@Before
public void init() {
webDriver = webDriverProvider.provideDriver();
}
@After
public void after() {
WebDriverProvider.closeWebDriver();
}
@When("^the user clicks on the like button of this project on the (list|detail) page.*$")
public void the_user_clicks_on_the_like_button_of_the_project(String page) throws Throwable {
final Project createdProject = projectDetailSteps.getCreatedProject();
if ("list".equals(page)) {
projectListPage.clickLikeWidget(createdProject.getTitle());
}
if ("detail".equals(page)){
projectDetailPage.getProjectStatusWidget().clickLikeWidget();
}
}
@Then("^the user sees that he (liked|didn't liked) the project on the (list|detail) page.*$")
public void the_User_Sees_That_He_Likes_The_Project(String likeOrDoesntLike, String page) throws Throwable {
LikeStatus expLikeStatus = likeOrDoesntLike.equals("liked") ? LikeStatus.LIKE : LikeStatus.UNLIKE;
final Project createdProject = projectDetailSteps.getCreatedProject();
LikeStatus actualLikeStatus = null;
if ("list".equals(page)) {
final Project displayedProject = projectListPage.findProject(createdProject.getTitle());
actualLikeStatus = displayedProject.getLikeStatusOfRequestUser();
}
if ("detail".equals(page)){
actualLikeStatus = projectDetailPage.getProjectStatusWidget().likedByUser();
}
assertThat(actualLikeStatus, is(expLikeStatus));
}
@Then("^the user sees that the project on the (list|detail) page has (\\d+) likes.*$")
public void the_User_Sees_That_The_Project_Has_Likes(String page, long expectedLikes) throws Throwable {
final Project createdProject = projectDetailSteps.getCreatedProject();
Long actualLikeCount = null;
if ("list".equals(page)) {
actualLikeCount = projectListPage.findProject(createdProject.getTitle()).getLikeCount();
}
if ("detail".equals(page)){
actualLikeCount = projectDetailPage.getProjectStatusWidget().getLikeCount();
}
assertThat(actualLikeCount, is(expectedLikes));
}
@When("^(the|another) user liked the project.*$")
public void another_user_liked_the_project(String kindOfUser) throws Throwable {
boolean asAdmin = kindOfUser.equals("another");
final Project createdProject = projectDetailSteps.getCreatedProject();
final CrowdSourceClient.AuthToken authToken =
asAdmin ?
crowdSourceClient.authorizeWithAdminUser() :
crowdSourceClient.authorizeWithDefaultUser();
crowdSourceClient.likeProject(createdProject, authToken);
}
}