Created
May 1, 2018 12:20
-
-
Save ZiiSolutions/242b607649fd33437689f51b28fc8c62 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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