Skip to content

Instantly share code, notes, and snippets.

@ZiiSolutions
Created May 1, 2018 12:20
Show Gist options
  • Save ZiiSolutions/242b607649fd33437689f51b28fc8c62 to your computer and use it in GitHub Desktop.
Save ZiiSolutions/242b607649fd33437689f51b28fc8c62 to your computer and use it in GitHub Desktop.
package com.pressassociation.content.testing.ui.steps.create;
import com.pressassociation.content.ninjs.Ninjs;
import com.pressassociation.content.ninjs.SubjectLink;
import com.pressassociation.content.testing.collections.ItemScenarioData;
import com.pressassociation.content.testing.collections.ScenarioData;
import com.pressassociation.content.testing.explore.api.ExploreApiScenarioData;
import com.pressassociation.content.testing.explore.api.PageObjectScenarioData;
import com.pressassociation.content.testing.selenium.helper.SeleniumHelper;
import com.pressassociation.content.testing.ui.pageobjects.ExplorePageObjectFactory;
import com.pressassociation.content.testing.ui.pageobjects.dashboard.Dashboard;
import com.pressassociation.content.testing.ui.pageobjects.dashboard.DashboardItem;
import com.pressassociation.content.testing.ui.steps.create.utils.TestHelper;
import com.pressassociation.explore.api.DashboardSummary;
import com.pressassociation.explore.api.EventSummary;
import com.google.common.collect.ImmutableList;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.openqa.selenium.WebDriver;
import java.time.OffsetDateTime;
import static com.pressassociation.content.testing.ui.steps.create.constants.ScenarioDataKeys.DASHBOARD;
import static com.pressassociation.content.testing.ui.steps.create.utils.TestHelper.assertAssertionError;
import static com.pressassociation.content.testing.ui.steps.create.utils.TestHelper.assertIllegalArgumentException;
import static com.pressassociation.content.testing.ui.steps.create.utils.TestHelper.event;
import static com.pressassociation.content.testing.ui.steps.create.utils.TestHelper.ninjsItemList;
import static com.google.common.collect.ImmutableList.of;
import static org.assertj.core.api.Java6Assertions.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
/**
* Tests for {@link Dashboard}.
*/
@RunWith(JUnitParamsRunner.class)
public class DashboardStepDefsTest {
private static final String BASE_URL = "https://localhost:5555";
private static final ImmutableList<SubjectLink> SUBJECT_ECONOMY = ImmutableList.of(
subject("patopic:economy", "patopic"),
subject("pakeyword:capital", "pakeyword"));
private static final ImmutableList<SubjectLink> SUBJECT_ENTERTAINMENT = ImmutableList.of(
subject("patopic:entertainment", "patopic"),
subject("pakeyword:bowling", "pakeyword")
);
private static final EventSummary EVENT_SUMMARY_ONE = event(
ninjs("event-1-uri", "2018-01-23T17:25:37Z", "event-1-headline", "event-1-description", SUBJECT_ECONOMY),
ninjsItemList(of(
TestHelper.ninjs("graphic-1-uri"), TestHelper.ninjs("graphic-2-uri"))),
ninjsItemList(of(
TestHelper.ninjs("image-1-uri"), TestHelper.ninjs("image-2-uri")
)),
ninjsItemList(of(
ninjs("lead-1-uri", "2018-01-23T18:00:37Z", "lead-1-headline", "lead-1-description", SUBJECT_ECONOMY)
)),
ninjsItemList(of(
ninjs("sidebar-1-uri", "2018-01-23T18:00:37Z", "sidebar-1-headline", "sidebar-1-description", SUBJECT_ECONOMY)
)),
ninjsItemList(of(
TestHelper.ninjs("social-1-uri"), TestHelper.ninjs("social-2-uri")
))
);
private static final EventSummary EVENT_SUMMARY_TWO = event(
ninjs("event-2-uri", "2018-01-25T17:25:37Z", "event-2-headline", "event-2-description", SUBJECT_ENTERTAINMENT),
ninjsItemList(of(
TestHelper.ninjs("graphic-11-uri"), TestHelper.ninjs("graphic-12-uri"))),
ninjsItemList(of(
TestHelper.ninjs("image-11-uri"), TestHelper.ninjs("image-12-uri")
)),
ninjsItemList(of(
ninjs("lead-11-uri", "2018-01-25T18:00:37Z", "lead-11-headline", "lead-11-description", SUBJECT_ENTERTAINMENT)
)),
ninjsItemList(of(
ninjs("sidebar-11-uri", "2018-01-25T18:00:37Z", "sidebar-11-headline", "sidebar-11-description",
SUBJECT_ENTERTAINMENT)
)),
ninjsItemList(of(
TestHelper.ninjs("social-11-uri"), TestHelper.ninjs("social-12-uri")
))
);
//This throws the error
private static final DashboardSummary DASHBOARD_SUMMARY = DashboardSummary.builder()
.items(
ImmutableList.of(
ninjs("event-1-uri", "2018-01-23T17:25:37Z", "event-1-headline", "event-1-description", SUBJECT_ECONOMY),
ninjs(
"event-2-uri", "2018-01-25T17:25:37Z", "event-2-headline", "event-2-description",
SUBJECT_ENTERTAINMENT
)
)
)
.build();
private static Ninjs ninjs(
String uri,
String firstCreated,
String headline,
String descriptionText,
ImmutableList<SubjectLink> topicKeywords
) {
return Ninjs.builder()
.withUri(uri)
.withFirstCreated(OffsetDateTime.parse(firstCreated))
.withHeadline(headline)
.withDescription("text", descriptionText)
.withSubjects(topicKeywords)
.build();
}
private static SubjectLink subject(String code, String profile) {
return SubjectLink.builder()
.withCode(code)
.withProfile(profile)
.build();
}
@Mock
private Dashboard dashboard;
@Mock
private DashboardItem dashboardItem;
@Mock
private WebDriver driver;
@Mock
private ExplorePageObjectFactory factory;
@Mock
private SeleniumHelper helper;
private ExploreApiScenarioData exploreApiScenarioData;
private ItemScenarioData itemScenarioData;
private PageObjectScenarioData pageObjectScenarioData;
private DashboardStepDefs stepDefs;
@Before
public void setUp() {
initMocks(this);
ScenarioData scenarioData = new ScenarioData();
exploreApiScenarioData = new ExploreApiScenarioData(scenarioData);
itemScenarioData = new ItemScenarioData(scenarioData);
pageObjectScenarioData = new PageObjectScenarioData(scenarioData);
stepDefs = new DashboardStepDefs(
BASE_URL, driver, exploreApiScenarioData, factory, helper, itemScenarioData, pageObjectScenarioData
);
}
@Test
@Parameters({"1, https://foo.com", "2, https://foofoo.com", "3, https://foofoofoo.com"})
public void testAssertDashboardItemLink(int position, String url) {
when(dashboard.dashboardItem(position - 1)).thenReturn(dashboardItem);
when(dashboardItem.link()).thenReturn(url);
//This won't
DashboardSummary dashboardSummary = DashboardSummary.builder().build();
exploreApiScenarioData.eventSummary("event-one", EVENT_SUMMARY_ONE);
exploreApiScenarioData.eventSummary("event-two", EVENT_SUMMARY_TWO);
pageObjectScenarioData.store(DASHBOARD, dashboard, Dashboard.class);
stepDefs.assertDashboardItemLink(position, url);
//Important that it stores DashboardItem
assertThat((DashboardItem) pageObjectScenarioData.pageObject())
.isEqualTo(dashboardItem);
verify(dashboard).dashboardItem(position - 1);
verify(dashboardItem).link();
verifyNoMoreInteractions(dashboard, dashboardItem);
}
@Test
@Parameters({"1, https://foo.com", "2, https://foofoo.com", "3, https://foofoofoo.com"})
public void testAssertDashboardItemLink_fails(int position, String url) {
pageObjectScenarioData.store(DASHBOARD, dashboard, Dashboard.class);
when(dashboard.dashboardItem(position - 1)).thenReturn(dashboardItem);
when(dashboardItem.link()).thenReturn("foo");
assertAssertionError(
() -> stepDefs.assertDashboardItemLink(position, url),
"Expected dashboard item at position <" + position + "> to link to <" + url + "> but instead links to <foo>"
);
verify(dashboard).dashboardItem(position - 1);
verify(dashboardItem).link();
verifyNoMoreInteractions(dashboard, dashboardItem);
}
@Test
@Parameters({"0, https://foo.com", "-2, https://foofoo.com", "-5555, https://foofoofoo.com"})
public void testAssertDashboardItemLink_notPositive(int position, String url) {
assertIllegalArgumentException(
() -> stepDefs.assertDashboardItemLink(position, url),
"position must be positive but was <" + position + ">");
}
@Test
public void testNavigateToDashboard() {
String partUrl = "/home/create.co.uk";
Dashboard dashboard = new Dashboard(driver, factory);
when(factory.dashboard(driver)).thenReturn(dashboard);
stepDefs.navigateToDashboard(partUrl);
assertThat((Dashboard) pageObjectScenarioData.pageObject())
.isEqualTo(dashboard);
assertThat(pageObjectScenarioData.pageObject(DASHBOARD, Dashboard.class))
.isEqualTo(dashboard);
verify(helper).navigateToUrl(BASE_URL + partUrl);
verify(factory).dashboard(driver);
verifyNoMoreInteractions(factory, helper);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment