package org.wikipedia.server; import android.support.annotation.NonNull; import org.wikipedia.dataclient.mwapi.MwServiceError; import org.wikipedia.dataclient.mwapi.page.MwMobileViewPageLead; import org.wikipedia.dataclient.page.PageLeadProperties; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; /** * Common test code for the two PageLead variants. */ public abstract class BasePageLeadTest { protected static final int ID = 15580374; protected static final long REVISION = 664887982L; protected static final int LANGUAGE_COUNT = 45; protected static final String LAST_MODIFIED_DATE = "2015-05-31T17:32:11Z"; protected static final String MAIN_PAGE = "Main Page"; @NonNull public static String getEnglishMainPageJson() { return "{" + "\"lastmodified\":\"" + LAST_MODIFIED_DATE + "\"," + "\"revision\":" + REVISION + "," + "\"languagecount\":" + LANGUAGE_COUNT + "," + "\"displaytitle\":\"" + MAIN_PAGE + "\"," + "\"id\":" + ID + "," + "\"description\":\"main page of a Wikimedia project\"," + "\"mainpage\":true," + "\"sections\":[" + "{\"id\":0,\"text\":\"My lead section text\"}" + "]," + "\"protection\":{\"edit\":[\"made_up_role1\"],\"move\":[\"made_up_role2\"]}," + "\"editable\":false" + "}"; } protected void verifyEnglishMainPage(PageLeadProperties props) { assertThat(props.getId(), is(ID)); assertThat(props.getRevision(), is(REVISION)); assertThat(props.getLastModified(), is(LAST_MODIFIED_DATE)); assertThat(props.getDisplayTitle(), is(MAIN_PAGE)); assertThat(props.getLanguageCount(), is(LANGUAGE_COUNT)); assertThat(props.getDescription(), is("main page of a Wikimedia project")); assertThat(props.getLeadImageUrl(0), equalTo(null)); assertThat(props.getLeadImageName(), equalTo(null)); assertThat(props.getSections().size(), is(1)); assertThat(props.getSections().get(0).getId(), is(0)); assertThat(props.getSections().get(0).getContent(), is("My lead section text")); assertThat(props.getSections().get(0).getLevel(), is(1)); assertThat(props.getSections().get(0).getAnchor(), equalTo("")); assertThat(props.getSections().get(0).getHeading(), equalTo("")); assertThat(props.getFirstAllowedEditorRole(), is("made_up_role1")); assertThat(props.isEditable(), is(false)); assertThat(props.isMainPage(), is(true)); assertThat(props.isDisambiguation(), is(false)); } @NonNull protected String getUnprotectedDisambiguationPageJson() { return "{" + "\"disambiguation\":true," + "\"protection\":{}," + "\"editable\":true" + "}"; } protected void verifyUnprotectedDisambiguationPage(PageLeadProperties core) { assertThat(core.getFirstAllowedEditorRole(), equalTo(null)); assertThat(core.isEditable(), is(true)); assertThat(core.isMainPage(), is(false)); assertThat(core.isDisambiguation(), is(true)); } @NonNull protected String getProtectedButNoEditProtectionPageJson() { return "{" + "\"protection\":{\"move\":[\"sysop\"]}" + "}"; } protected void verifyProtectedNoEditProtectionPage(PageLeadProperties core) { assertThat(core.getFirstAllowedEditorRole(), equalTo(null)); } @NonNull protected String getErrorJson() { return "{\"error\":{" + "\"code\":\"nopage\"," + "\"info\":\"The page parameter must be set\"," + "\"docref\":\"See https://en.wikipedia.org/w/api.php for API usage\"" + "}}"; } protected void verifyError(MwMobileViewPageLead pageLead, MwMobileViewPageLead.Mobileview mv) { assertThat(mv, equalTo(null)); MwServiceError error = pageLead.getError(); assertThat(pageLead.hasError(), is(true)); assert error != null; assertThat(error.getTitle(), is("nopage")); assertThat(error.getDetails(), is("The page parameter must be set")); assertThat(error.getDocRef(), is("See https://en.wikipedia.org/w/api.php for API usage")); } }