aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/androidTest/java/org/wordpress/android/ui
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/androidTest/java/org/wordpress/android/ui')
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/GCMIntentServiceTest.java66
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/NotesParseTest.java29
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/NotificationsUtilsTest.java19
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/ui/plans/RemoteTests.java159
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/ui/posts/PostUtilsTest.java33
-rw-r--r--WordPress/src/androidTest/java/org/wordpress/android/ui/stats/RemoteTests.java638
6 files changed, 944 insertions, 0 deletions
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/GCMIntentServiceTest.java b/WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/GCMIntentServiceTest.java
new file mode 100644
index 000000000..ae2dd501f
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/GCMIntentServiceTest.java
@@ -0,0 +1,66 @@
+package org.wordpress.android.ui.notifications;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.test.RenamingDelegatingContext;
+import android.test.ServiceTestCase;
+
+import org.wordpress.android.FactoryUtils;
+import org.wordpress.android.GCMMessageService;
+import org.wordpress.android.TestUtils;
+import org.wordpress.android.models.AccountHelper;
+
+public class GCMIntentServiceTest extends ServiceTestCase<GCMMessageService> {
+ protected Context mTargetContext;
+
+ public GCMIntentServiceTest() {
+ super(GCMMessageService.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ FactoryUtils.initWithTestFactories();
+
+ mTargetContext = new RenamingDelegatingContext(getContext(), "test_");
+ TestUtils.clearApplicationState(mTargetContext);
+
+ setupService();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ FactoryUtils.clearFactories();
+ super.tearDown();
+ }
+
+ public void testShouldCircularizeNoteIcon() {
+ GCMMessageService intentService = new GCMMessageService();
+
+ String type = "c";
+ assertTrue(intentService.shouldCircularizeNoteIcon(type));
+
+ assertFalse(intentService.shouldCircularizeNoteIcon(null));
+
+ type = "invalidType";
+ assertFalse(intentService.shouldCircularizeNoteIcon(type));
+ }
+
+ public void testOnMessageReceived() throws InterruptedException {
+ org.wordpress.android.models.Account account = AccountHelper.getDefaultAccount();
+ account.setAccessToken("secret token");
+ account.setUserId(1);
+ final Bundle bundle = new Bundle();
+ bundle.putString("user", "1");
+ for (int i = 0; i < 1000; i++) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ getService().onMessageReceived("from", bundle);
+ }
+ }).start();
+ }
+
+ Thread.sleep(10000);
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/NotesParseTest.java b/WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/NotesParseTest.java
new file mode 100644
index 000000000..0667ce023
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/NotesParseTest.java
@@ -0,0 +1,29 @@
+package org.wordpress.android.ui.notifications;
+
+import android.text.Spanned;
+
+import junit.framework.TestCase;
+
+import org.wordpress.android.util.HtmlUtils;
+
+public class NotesParseTest extends TestCase {
+ public void testParagraphInListItem1() {
+ String text = "<li><p>Paragraph in li</p></li>";
+ Spanned spanned = HtmlUtils.fromHtml(text);
+ // if this didn't throw a RuntimeException we're ok
+ assertNotNull(spanned);
+ }
+
+ // Trying to reproduce https://github.com/wordpress-mobile/WordPress-Android/issues/900
+ public void testSpanInListItem1() {
+ String text = "<ul><li><span>Current Record: </span><span>20</span></li><li><span>Old Record: </span><span>1</span></li></ul>";
+ Spanned spanned = HtmlUtils.fromHtml(text);
+ assertEquals("Current Record: 20\nOld Record: 1\n", spanned.toString());
+ }
+
+ public void testSpanInListItemFullTest() {
+ String text = "<p>Au Mercredi 18 septembre 2013 vous avez pulvérisé votre précédent record de follows enregistrés en un seul jour, sur votre blog <a href=\"http://taliwutblog.wordpress.com\" title=\"taliwut &amp; blog\" target=\"_blank\" notes-data-click=\"best_period_ever_feat\">taliwut &amp; blog</a>. Super!</p><ul><li><span class=\"wpn-feat-current-record-title\">Current Record: </span><span class=\"wpn-feat-new-record-count\">20</span></li><li><span class=\"wpn-feat-old-record-title\">Old Record: </span><span class=\"wpn-feat-old-record-count\">1</span></li></ul>";
+ Spanned spanned = HtmlUtils.fromHtml(text);
+ assertTrue(spanned.toString().contains("Current Record: 20\nOld Record: 1\n"));
+ }
+} \ No newline at end of file
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/NotificationsUtilsTest.java b/WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/NotificationsUtilsTest.java
new file mode 100644
index 000000000..daef7f0ba
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/ui/notifications/NotificationsUtilsTest.java
@@ -0,0 +1,19 @@
+package org.wordpress.android.ui.notifications;
+
+import android.test.AndroidTestCase;
+import android.text.SpannableStringBuilder;
+
+import org.wordpress.android.ui.notifications.utils.NotificationsUtils;
+
+public class NotificationsUtilsTest extends AndroidTestCase {
+ public void testSpannableHasCharacterAtIndex() {
+ SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("This is only a test.");
+
+ assertTrue(NotificationsUtils.spannableHasCharacterAtIndex(spannableStringBuilder, 's', 3));
+ assertFalse(NotificationsUtils.spannableHasCharacterAtIndex(spannableStringBuilder, 's', 4));
+
+ // Test with bogus params
+ assertFalse(NotificationsUtils.spannableHasCharacterAtIndex(null, 'b', -1));
+ }
+
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/ui/plans/RemoteTests.java b/WordPress/src/androidTest/java/org/wordpress/android/ui/plans/RemoteTests.java
new file mode 100644
index 000000000..410aebc50
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/ui/plans/RemoteTests.java
@@ -0,0 +1,159 @@
+package org.wordpress.android.ui.plans;
+
+import com.android.volley.Request;
+import com.android.volley.VolleyError;
+import com.wordpress.rest.RestClient;
+import com.wordpress.rest.RestRequest;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.wordpress.android.DefaultMocksInstrumentationTestCase;
+import org.wordpress.android.mocks.RestClientCustomizableMock;
+import org.wordpress.android.mocks.RestClientFactoryTest;
+import org.wordpress.android.networking.RestClientFactory;
+import org.wordpress.android.ui.plans.models.Feature;
+import org.wordpress.android.ui.plans.models.Plan;
+import org.wordpress.android.util.AppLog;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RemoteTests extends DefaultMocksInstrumentationTestCase {
+ private RestClientCustomizableMock mRestClientV1_2;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ // Set the version of the REST client to v1.2
+ RestClientFactoryTest.sVersion = RestClient.REST_CLIENT_VERSIONS.V1_2;
+ mRestClientV1_2 = (RestClientCustomizableMock) RestClientFactory.instantiate(null, RestClient.REST_CLIENT_VERSIONS.V1_2);
+ }
+
+ private RestRequest.ErrorListener errListener = new RestRequest.ErrorListener() {
+ @Override
+ public void onErrorResponse(VolleyError response) {
+ AppLog.e(AppLog.T.PLANS, "The Rest Client returned an error from a mock call: " + response.getMessage());
+ assertFalse(response.getMessage(), true); // force the test to fails in this case
+ }
+ };
+
+ // Just a Utility class that wraps the main logic for the OK listener
+ private abstract class PlansRestRequestAbstractListener implements RestRequest.Listener {
+ @Override
+ public void onResponse(JSONObject response) {
+ boolean parseError = false;
+ try {
+ parseResponse(response);
+ } catch (JSONException e) {
+ parseError = true;
+ AppLog.e(AppLog.T.PLANS, e);
+ }
+ assertFalse(parseError);
+ }
+ abstract void parseResponse(JSONObject response) throws JSONException;
+ }
+
+ public void testSitePlans() throws Exception {
+ PlansRestRequestAbstractListener listener = new PlansRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ List<Plan> plans = new ArrayList<>();
+ JSONArray plansArray = response.getJSONArray("originalResponse");
+ for (int i=0; i < plansArray.length(); i ++) {
+ JSONObject currentPlanJSON = plansArray.getJSONObject(i);
+ Plan currentPlan = new Plan(currentPlanJSON);
+ plans.add(currentPlan);
+ }
+
+ assertEquals(3, plans.size());
+
+ Plan currentPlan = plans.get(0);
+ assertEquals(currentPlan.getDescription(), "Get a free blog and be on your way to publishing your first post in less than five minutes.");
+ assertEquals(currentPlan.getProductID(), 1L);
+ assertEquals(currentPlan.getProductName(), "WordPress.com Free");
+ assertEquals(currentPlan.getBillPeriod(), -1);
+ assertEquals(currentPlan.getRawPrice(), 0);
+ assertEquals(currentPlan.getCost(), 0);
+ assertEquals(currentPlan.isAvailable(), true);
+
+ currentPlan = plans.get(1);
+ assertEquals(currentPlan.isFreeTrial(), false);
+ assertEquals(currentPlan.getBundleSubscriptionID(), "5683566");
+ assertEquals(currentPlan.getExpiry(), "2017-03-07");
+ assertEquals(currentPlan.getUserFacingExpiry(), "2017-03-04");
+ assertEquals(currentPlan.getSubscribedDate(), "2016-03-07 08:56:13");
+
+ currentPlan = plans.get(2);
+ assertEquals(currentPlan.getDescription(), "Everything included with Premium, as well as live chat support, and unlimited access to our premium themes.");
+ assertEquals(currentPlan.getProductID(), 1008L);
+ assertEquals(currentPlan.getProductName(), "WordPress.com Business");
+ assertEquals(currentPlan.getBillPeriod(), 365);
+ assertEquals(currentPlan.getRawPrice(), 199);
+ assertEquals(currentPlan.getCost(), 199);
+ assertEquals(currentPlan.isAvailable(), true);
+ }
+ };
+
+
+ mRestClientV1_2.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.2/sites/123456/plans",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testFeatures() throws Exception {
+ PlansRestRequestAbstractListener listener = new PlansRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ // Parse the response from the server
+ List<Feature> features = new ArrayList<>();
+ JSONArray featuresArray = response.getJSONArray("originalResponse");
+ for (int i = 0; i < featuresArray.length(); i++) {
+ JSONObject currentFeatureJSON = featuresArray.getJSONObject(i);
+ Feature currentFeature = new Feature(currentFeatureJSON);
+ features.add(currentFeature);
+ }
+
+ assertEquals(16, features.size());
+
+ // Test the 1st object in the response
+ Feature currentFeatures = features.get(0);
+ assertEquals("WordPress.com Site", currentFeatures.getTitle());
+ assertEquals("free-blog", currentFeatures.getProductSlug());
+ assertEquals("Your own space to create posts and pages with basic customization.", currentFeatures.getDescription());
+ assertEquals("Your own space to create posts and pages with basic customization.",
+ currentFeatures.getDescriptionForPlan(1L));
+ assertEquals("Your own space to create posts and pages with basic customization.",
+ currentFeatures.getDescriptionForPlan(1003L));
+ assertEquals("Your own space to create posts and pages with basic customization.",
+ currentFeatures.getDescriptionForPlan(1008L));
+
+ assertEquals(false, currentFeatures.isNotPartOfFreeTrial());
+
+ // Test the latest object in the response
+ currentFeatures = features.get(15);
+ assertEquals("Support", currentFeatures.getTitle());
+ assertEquals("support", currentFeatures.getProductSlug());
+ assertEquals("For those times when you can't find an answer on our Support site", currentFeatures.getDescription());
+ assertEquals("Find answers to your questions in our community forum.",
+ currentFeatures.getDescriptionForPlan(1L));
+ assertEquals("Community support",
+ currentFeatures.getTitleForPlan(1L));
+ assertEquals("The kind of support we offer for Jetpack Business.",
+ currentFeatures.getDescriptionForPlan(2001L));
+ assertEquals("Priority security support",
+ currentFeatures.getTitleForPlan(2001L));
+ assertEquals(false, currentFeatures.isNotPartOfFreeTrial());
+ }
+ };
+
+ mRestClientV1_2.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.2/plans/features",
+ null,
+ listener,
+ errListener
+ );
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/ui/posts/PostUtilsTest.java b/WordPress/src/androidTest/java/org/wordpress/android/ui/posts/PostUtilsTest.java
new file mode 100644
index 000000000..d251d9f28
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/ui/posts/PostUtilsTest.java
@@ -0,0 +1,33 @@
+package org.wordpress.android.ui.posts;
+
+import android.test.AndroidTestCase;
+
+public class PostUtilsTest extends AndroidTestCase {
+ public void testCollapseShortcodes() {
+ String postContent = "Text before first gallery [gallery number=\"one\"]"
+ + " text between galleries"
+ + " [gallery number=\"two\"]"
+ + " text after second gallery"
+ + " [unknown shortcode].";
+ String collapsedContent = PostUtils.collapseShortcodes(postContent);
+
+ // make sure [gallery] now exists and [gallery number] does not
+ assertTrue(collapsedContent.contains("[gallery]"));
+ assertFalse(collapsedContent.contains("[gallery number]"));
+
+ // make sure the unknown shortcode is intact
+ assertTrue(collapsedContent.contains("[unknown shortcode]"));
+ }
+
+ public void testShortcodeSpaces() {
+ String postContent = "[ gallery number=\"arst\" /]";
+ String collapsedContent = PostUtils.collapseShortcodes(postContent);
+ assertEquals("[gallery]", collapsedContent);
+ }
+
+ public void testOpeningClosingShortcode() {
+ String postContent = "[recipe difficulty=\"easy\"]Put your recipe here.[/recipe]";
+ String collapsedContent = PostUtils.collapseShortcodes(postContent);
+ assertEquals("[recipe]Put your recipe here.[/recipe]", collapsedContent);
+ }
+}
diff --git a/WordPress/src/androidTest/java/org/wordpress/android/ui/stats/RemoteTests.java b/WordPress/src/androidTest/java/org/wordpress/android/ui/stats/RemoteTests.java
new file mode 100644
index 000000000..ff8a9505d
--- /dev/null
+++ b/WordPress/src/androidTest/java/org/wordpress/android/ui/stats/RemoteTests.java
@@ -0,0 +1,638 @@
+package org.wordpress.android.ui.stats;
+
+
+import com.android.volley.Request;
+import com.android.volley.VolleyError;
+import com.wordpress.rest.RestClient;
+import com.wordpress.rest.RestRequest;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.wordpress.android.DefaultMocksInstrumentationTestCase;
+import org.wordpress.android.mocks.RestClientCustomizableMock;
+import org.wordpress.android.mocks.RestClientFactoryTest;
+import org.wordpress.android.networking.RestClientFactory;
+import org.wordpress.android.ui.stats.models.AuthorModel;
+import org.wordpress.android.ui.stats.models.ClickGroupModel;
+import org.wordpress.android.ui.stats.models.ClicksModel;
+import org.wordpress.android.ui.stats.models.CommentsModel;
+import org.wordpress.android.ui.stats.models.FollowDataModel;
+import org.wordpress.android.ui.stats.models.FollowerModel;
+import org.wordpress.android.ui.stats.models.FollowersModel;
+import org.wordpress.android.ui.stats.models.GeoviewModel;
+import org.wordpress.android.ui.stats.models.GeoviewsModel;
+import org.wordpress.android.ui.stats.models.InsightsAllTimeModel;
+import org.wordpress.android.ui.stats.models.InsightsPopularModel;
+import org.wordpress.android.ui.stats.models.InsightsTodayModel;
+import org.wordpress.android.ui.stats.models.PostModel;
+import org.wordpress.android.ui.stats.models.PostViewsModel;
+import org.wordpress.android.ui.stats.models.ReferrerGroupModel;
+import org.wordpress.android.ui.stats.models.ReferrerResultModel;
+import org.wordpress.android.ui.stats.models.ReferrersModel;
+import org.wordpress.android.ui.stats.models.SingleItemModel;
+import org.wordpress.android.ui.stats.models.TagsContainerModel;
+import org.wordpress.android.ui.stats.models.TagsModel;
+import org.wordpress.android.ui.stats.models.TopPostsAndPagesModel;
+import org.wordpress.android.ui.stats.models.VideoPlaysModel;
+import org.wordpress.android.ui.stats.models.VisitModel;
+import org.wordpress.android.ui.stats.models.VisitsModel;
+import org.wordpress.android.util.AppLog;
+
+
+public class RemoteTests extends DefaultMocksInstrumentationTestCase {
+
+ private RestClientCustomizableMock mRestClient;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ // Set the version of the REST client to 1.1
+ RestClientFactoryTest.sVersion = RestClient.REST_CLIENT_VERSIONS.V1_1;
+
+ mRestClient = (RestClientCustomizableMock) RestClientFactory.instantiate(null, RestClient.REST_CLIENT_VERSIONS.V1_1);
+ }
+
+ private RestRequest.ErrorListener errListener = new RestRequest.ErrorListener() {
+ @Override
+ public void onErrorResponse(VolleyError response) {
+ AppLog.e(AppLog.T.STATS, "The Rest Client returned an error from a mock call: " + response.getMessage());
+ assertFalse(response.getMessage(), true); // force the test to fails in this case
+ }
+ };
+
+ // Just a Utility class that wraps the main logic for the OK listener
+ private abstract class StatsRestRequestAbstractListener implements RestRequest.Listener {
+ @Override
+ public void onResponse(JSONObject response) {
+ boolean parseError = false;
+ try {
+ parseResponse(response);
+ } catch (JSONException e) {
+ parseError = true;
+ AppLog.e(AppLog.T.STATS, e);
+ }
+ assertFalse(parseError);
+ }
+ abstract void parseResponse(JSONObject response) throws JSONException;
+ }
+
+ public void testClicks() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ ClicksModel model = new ClicksModel("123456",response);
+ assertEquals(model.getTotalClicks(), 2);
+ assertEquals(model.getOtherClicks(), 0);
+ assertNotNull(model.getClickGroups());
+ assertEquals(model.getClickGroups().size(), 2);
+
+ ClickGroupModel first = model.getClickGroups().get(0);
+ assertEquals(first.getIcon(), "");
+ assertEquals(first.getUrl(), "http://astralbodies.net/blog/2013/10/31/paying-attention-at-automattic/");
+ assertEquals(first.getName(), "astralbodies.net/blog/2013/10/31/paying-attention-at-automattic/");
+ assertEquals(first.getViews(), 1);
+ assertNull(first.getClicks());
+
+ ClickGroupModel second = model.getClickGroups().get(1);
+ assertEquals(second.getIcon(), "");
+ assertEquals(second.getUrl(), "https://devforums.apple.com/thread/86137");
+ assertEquals(second.getName(), "devforums.apple.com/thread/86137");
+ assertEquals(second.getViews(), 1);
+ assertNull(second.getClicks());
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/clicks",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testClicksForMonth() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ ClicksModel model = new ClicksModel("1234567890",response);
+ assertEquals(model.getTotalClicks(), 9);
+ assertEquals(model.getOtherClicks(), 0);
+ assertNotNull(model.getClickGroups());
+ assertEquals(model.getClickGroups().size(), 6);
+
+ ClickGroupModel first = model.getClickGroups().get(0);
+ assertEquals(first.getIcon(), "");
+ assertEquals(first.getUrl(), "http://wp.com/");
+ assertEquals(first.getName(), "wp.com");
+ assertEquals(first.getViews(), 3);
+ assertNull(first.getClicks());
+
+ ClickGroupModel second = model.getClickGroups().get(1);
+ assertEquals(second.getIcon(), "");
+ assertNull(second.getUrl());
+ assertEquals(second.getName(), "blog.wordpress.tv");
+ assertEquals(second.getViews(), 2);
+ assertNotNull(second.getClicks());
+ assertEquals(second.getClicks().size(), 2);
+
+ SingleItemModel firstChild = second.getClicks().get(0);
+ assertNotNull(firstChild);
+ assertEquals(firstChild.getUrl(), "http://blog.wordpress.tv/2014/10/03/build-your-audience-recent-wordcamp-videos-from-experienced-content-creators/");
+ assertEquals(firstChild.getTitle(), "blog.wordpress.tv/2014/10/03/build-your-audience-recent-wordcamp-videos-from-experienced-content-creators/");
+ assertEquals(firstChild.getTotals(), 1);
+ assertEquals(firstChild.getIcon(), "");
+
+
+ SingleItemModel secondChild = second.getClicks().get(1);
+ assertNotNull(secondChild);
+ assertEquals(secondChild.getUrl(), "http://blog.wordpress.tv/2014/10/29/wordcamp-san-francisco-2014-state-of-the-word-keynote/");
+ assertEquals(secondChild.getTitle(), "blog.wordpress.tv/2014/10/29/wordcamp-san-francisco-2014-state-of-the-word-keynote/");
+ assertEquals(secondChild.getTotals(), 1);
+ assertEquals(secondChild.getIcon(), "");
+
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/1234567890/stats/clicks",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testCommentsDay() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ CommentsModel model = new CommentsModel("123456", response);
+ assertEquals(model.getTotalComments(), 177);
+ assertEquals(model.getMonthlyComments(), 2);
+ assertEquals(model.getMostActiveTime(), "08:00");
+ assertEquals(model.getMostActiveDay(), "");
+
+ assertNotNull(model.getAuthors());
+ assertTrue(model.getAuthors().size() == 7);
+ AuthorModel author = model.getAuthors().get(0);
+ assertEquals(author.getName(), "Aaron Douglas");
+ assertEquals(author.getViews(), 20);
+ assertEquals(author.getAvatar(),
+ "https://1.gravatar.com/avatar/db127a496309f2717657d6f6167abd49?s=64&amp;" +
+ "d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&amp;r=R"
+ );
+ assertNull(author.getFollowData());
+ assertNull(author.getPosts());
+
+ assertNotNull(model.getPosts());
+ assertTrue(model.getPosts().size() == 11);
+ SingleItemModel mostCommentedPost = model.getPosts().get(0);
+ assertEquals(mostCommentedPost.getItemID(), "67");
+ assertEquals(mostCommentedPost.getTotals(), 29);
+ assertEquals(mostCommentedPost.getTitle(), "Mac Screen Sharing (VNC) & White Screen");
+ assertEquals(mostCommentedPost.getUrl(), "http://astralbodi.es/2010/05/02/mac-screen-sharing-vnc-white-screen/");
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/comments",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testCountryViewsDay() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ GeoviewsModel model = new GeoviewsModel("123456", response);
+ assertEquals(model.getOtherViews(), 17);
+ assertEquals(model.getTotalViews(), 55);
+
+ assertNotNull(model.getCountries());
+ assertEquals(model.getCountries().size(), 10);
+ GeoviewModel first = model.getCountries().get(0);
+ assertEquals(first.getCountryFullName(), "United States");
+ assertEquals(first.getFlagIconURL(), "https://secure.gravatar.com/blavatar/5a83891a81b057fed56930a6aaaf7b3c?s=48");
+ assertEquals(first.getFlatFlagIconURL(), "https://secure.gravatar.com/blavatar/9f4faa5ad0c723474f7a6d810172447c?s=48");
+ assertEquals(first.getViews(), 8);
+ GeoviewModel second = model.getCountries().get(1);
+ assertEquals(second.getCountryFullName(), "Taiwan");
+ assertEquals(second.getFlagIconURL(), "https://secure.gravatar.com/blavatar/f983fff0dda7387746b697cfd865e657?s=48");
+ assertEquals(second.getFlatFlagIconURL(), "https://secure.gravatar.com/blavatar/2c224480a40527ee89d7340d4396e8e6?s=48");
+ assertEquals(second.getViews(), 6);
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/country-views",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testFollowersEmail() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ FollowersModel model = new FollowersModel("123456", response);
+ assertEquals(model.getTotalEmail(), 2931);
+ assertEquals(model.getTotalWPCom(), 7926165);
+ assertEquals(model.getTotal(), 2931);
+ assertEquals(model.getPage(), 1);
+ assertEquals(model.getPages(), 419);
+
+ assertNotNull(model.getFollowers());
+ assertEquals(model.getFollowers().size(), 7);
+ FollowerModel first = model.getFollowers().get(0);
+ assertEquals(first.getAvatar(), "https://2.gravatar.com/avatar/e82142697283897ad7444810e5975895?s=64" +
+ "&amp;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&amp;r=G");
+ assertEquals(first.getLabel(), "user1@example.com");
+ assertNull(first.getURL());
+ assertNull(first.getFollowData());
+ assertEquals(first.getDateSubscribed(), "2014-12-16T11:24:41+00:00");
+ FollowerModel last = model.getFollowers().get(6);
+ assertEquals(last.getAvatar(), "https://0.gravatar.com/avatar/3b37f38b63ce4f595cc5cfbaadb10938?s=64" +
+ "&amp;d=https%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&amp;r=G");
+ assertEquals(last.getLabel(), "user7@example.com");
+ assertNull(last.getURL());
+ assertNull(last.getFollowData());
+ assertEquals(last.getDateSubscribed(), "2014-12-15T15:09:01+00:00");
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/followers",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testFollowersWPCOM() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ FollowersModel model = new FollowersModel("1234567890", response);
+ assertEquals(model.getTotalEmail(), 2930);
+ assertEquals(model.getTotalWPCom(), 7925800);
+ assertEquals(model.getTotal(), 7925800);
+ assertEquals(model.getPage(), 1);
+ assertEquals(model.getPages(), 1132258);
+
+ assertNotNull(model.getFollowers());
+ assertEquals(model.getFollowers().size(), 7);
+ FollowerModel first = model.getFollowers().get(0);
+ assertEquals(first.getAvatar(), "https://0.gravatar.com/avatar/624b89cb0c8b9136f9629dd7bcab0517?s=64" +
+ "&amp;d=https%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&amp;r=G");
+ assertEquals(first.getLabel(), "ritu929");
+ assertEquals(first.getURL(), "http://ritu9blog.wordpress.com");
+ assertEquals(first.getDateSubscribed(), "2014-12-16T14:53:21+00:00");
+ assertNotNull(first.getFollowData());
+ FollowDataModel followDatamodel = first.getFollowData();
+ assertFalse(followDatamodel.isFollowing());
+ assertEquals(followDatamodel.getType(), "follow");
+
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/1234567890/stats/followers",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testPostDetails() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ PostViewsModel model = new PostViewsModel(response);
+ assertNotNull(model.getOriginalResponse());
+
+ assertEquals(model.getDate(), "2015-03-04");
+ assertEquals(model.getHighestMonth(), 278);
+ assertEquals(model.getHighestDayAverage(), 8);
+ assertEquals(model.getHighestWeekAverage(), 8);
+
+ assertNotNull(model.getDayViews());
+ assertEquals(model.getDayViews()[0].getViews(), 0);
+ assertEquals(model.getDayViews()[0].getPeriod(), "2014-06-04");
+ assertEquals(model.getDayViews()[model.getDayViews().length-1].getViews(), 8);
+ assertEquals(model.getDayViews()[model.getDayViews().length - 1].getPeriod(), "2015-03-04");
+
+ assertNotNull(model.getYears().size());
+ assertEquals(model.getYears().size(), 2);
+ assertEquals(model.getYears().get(0).getTotal(), 1097);
+ assertEquals(model.getYears().get(0).getLabel(), "2014");
+ assertEquals(model.getYears().get(0).getMonths().size(), 7);
+ assertEquals(model.getYears().get(0).getMonths().get(0).getMonth(), "6");
+ assertEquals(model.getYears().get(1).getTotal(), 226);
+ assertEquals(model.getYears().get(1).getLabel(), "2015");
+
+ assertNotNull(model.getWeeks().size());
+ assertEquals(model.getWeeks().size(), 6);
+
+ assertNotNull(model.getAverages());
+ assertEquals(model.getAverages().size(), 2);
+ assertEquals(model.getAverages().get(0).getTotal(), 5);
+ assertEquals(model.getAverages().get(0).getLabel(), "2014");
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/post/123",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testReferrers() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ ReferrersModel model = new ReferrersModel("123456", response);
+ assertEquals(model.getTotalViews(), 2161);
+ assertEquals(model.getOtherViews(), 938);
+ assertNotNull(model.getGroups());
+ assertEquals(model.getGroups().size(), 10);
+
+ // first group in the response
+ ReferrerGroupModel gModel = model.getGroups().get(0);
+ assertEquals(gModel.getName(), "Search Engines");
+ assertEquals(gModel.getGroupId(), "Search Engines");
+ assertEquals(gModel.getIcon(), "https://wordpress.com/i/stats/search-engine.png");
+ assertEquals(gModel.getTotal(), 480);
+ assertNotNull(gModel.getResults());
+ assertEquals(gModel.getResults().size(), 7);
+
+ // 2nd level item
+ ReferrerResultModel refResultModel = gModel.getResults().get(0);
+ assertEquals(refResultModel.getName(), "Google Search");
+ assertEquals(refResultModel.getIcon(), "https://secure.gravatar.com/blavatar/6741a05f4bc6e5b65f504c4f3df388a1?s=48");
+ assertEquals(refResultModel.getViews(), 461);
+ assertNotNull(refResultModel.getChildren());
+ assertNull(refResultModel.getUrl()); //has childs. No URL.
+
+ // 3rd level items
+ SingleItemModel child = refResultModel.getChildren().get(0);
+ assertEquals(child.getUrl(), "http://www.google.com/");
+ assertEquals(child.getTitle(), "google.com");
+ assertEquals(child.getIcon(), "https://secure.gravatar.com/blavatar/ff90821feeb2b02a33a6f9fc8e5f3fcd?s=48");
+ assertEquals(child.getTotals(), 176);
+ child = refResultModel.getChildren().get(10);
+ assertEquals(child.getUrl(), "http://www.google.co.jp");
+ assertEquals(child.getTitle(), "google.co.jp");
+ assertEquals(child.getIcon(), "https://secure.gravatar.com/blavatar/a28b8206a6562f6098688508d4665905?s=48");
+ assertEquals(child.getTotals(), 6);
+
+
+ // 7th group in the response
+ gModel = model.getGroups().get(6);
+ assertEquals(gModel.getName(), "ma.tt");
+ assertEquals(gModel.getGroupId(), "ma.tt");
+ assertEquals(gModel.getIcon(), "https://secure.gravatar.com/blavatar/733a27a6b983dd89d6dd64d0445a3e8e?s=48");
+ assertEquals(gModel.getTotal(), 56);
+ assertNotNull(gModel.getResults());
+ assertEquals(gModel.getResults().size(), 11);
+
+ // 2nd level item
+ refResultModel = gModel.getResults().get(0);
+ assertEquals(refResultModel.getName(), "ma.tt");
+ assertEquals(refResultModel.getUrl(), "http://ma.tt/");
+ assertEquals(refResultModel.getIcon(), "");
+ assertEquals(refResultModel.getViews(), 34); // No childs. Has URL.
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/referrers",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testTagsCategories() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ TagsContainerModel model = new TagsContainerModel("123456", response);
+ assertEquals(model.getDate(), "2014-12-16");
+ assertNotNull(model.getTags());
+ assertEquals(model.getTags().size(), 10);
+
+ TagsModel tag = model.getTags().get(0);
+ assertEquals(tag.getViews(), 461);
+ assertNotNull(tag.getTags());
+ assertEquals(tag.getTags().size(), 1);
+ assertNotNull(tag.getTags());
+ assertEquals(tag.getTags().get(0).getName(), "Uncategorized");
+ assertEquals(tag.getTags().get(0).getType(), "category");
+ assertEquals(tag.getTags().get(0).getLink(), "http://astralbodi.es/category/uncategorized/");
+
+ tag = model.getTags().get(9);
+ assertEquals(tag.getViews(), 41);
+ assertEquals(tag.getTags().get(0).getName(), "networking");
+ assertEquals(tag.getTags().get(0).getType(), "tag");
+ assertEquals(tag.getTags().get(0).getLink(), "http://astralbodi.es/tag/networking/");
+ assertEquals(tag.getTags().get(1).getName(), "unix");
+ assertEquals(tag.getTags().get(1).getType(), "tag");
+ assertEquals(tag.getTags().get(1).getLink(), "http://astralbodi.es/tag/unix/");
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/tags",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testTopPost() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ TopPostsAndPagesModel model = new TopPostsAndPagesModel("123456", response);
+ assertNotNull(model.getTopPostsAndPages());
+ assertEquals(model.getTopPostsAndPages().size(), 10);
+
+ PostModel postModel = model.getTopPostsAndPages().get(0);
+ assertEquals(postModel.getItemID(), "39806");
+ assertEquals(postModel.getTotals(), 2420);
+ assertEquals(postModel.getTitle(), "Home");
+ assertEquals(postModel.getUrl(), "http://automattic.com/home/");
+ assertEquals(postModel.getDate(), StatsUtils.toMs("2011-08-30 21:47:38"));
+ assertEquals(postModel.getPostType(), "page");
+
+ postModel = model.getTopPostsAndPages().get(9);
+ assertEquals(postModel.getItemID(), "39254");
+ assertEquals(postModel.getTotals(), 56);
+ assertEquals(postModel.getTitle(), "Growth Explorer");
+ assertEquals(postModel.getUrl(), "http://automattic.com/work-with-us/growth-explorer/");
+ assertEquals(postModel.getDate(), StatsUtils.toMs("2011-08-25 19:37:27"));
+ assertEquals(postModel.getPostType(), "page");
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/top-posts",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testTopPostEmptyURL() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ TopPostsAndPagesModel model = new TopPostsAndPagesModel("1234567890", response);
+ assertNotNull(model.getTopPostsAndPages());
+ assertEquals(model.getTopPostsAndPages().size(), 10);
+
+ PostModel postModel = model.getTopPostsAndPages().get(0);
+ assertEquals(postModel.getItemID(), "750");
+ assertEquals(postModel.getTotals(), 7);
+ assertEquals(postModel.getTitle(), "Asynchronous unit testing Core Data with Xcode 6");
+ assertEquals(postModel.getUrl(), ""); // This post has no URL?!? Unpublished post that was prev published?
+ assertEquals(postModel.getDate(), StatsUtils.toMs("2014-08-06 14:52:11"));
+ assertEquals(postModel.getPostType(), "post");
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/1234567890/stats/top-posts",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testInsightsAllTime() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ InsightsAllTimeModel model = new InsightsAllTimeModel("12345",response);
+ assertEquals(model.getPosts(), 128);
+ assertEquals(model.getViews(), 56687);
+ assertEquals(model.getVisitors(), 42893);
+ assertEquals(model.getViewsBestDayTotal(), 3485);
+ assertNotNull(model.getViewsBestDay());
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testInsightsToday() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ InsightsTodayModel model = new InsightsTodayModel("123456", response);
+ assertEquals(model.getDate(), "2014-10-28");
+ assertEquals(model.getBlogID(), "123456");
+ assertEquals(model.getViews(), 56);
+ assertEquals(model.getVisitors(), 44);
+ assertEquals(model.getLikes(), 1);
+ assertEquals(model.getReblogs(), 2);
+ assertEquals(model.getComments(), 3);
+ assertEquals(model.getFollowers(), 56);
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/summary",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testInsightsPopular() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ InsightsPopularModel model = new InsightsPopularModel("123456", response);
+ assertEquals(model.getHighestHour(), 9);
+ assertEquals(model.getHighestDayOfWeek(), 5);
+ assertEquals(model.getHighestDayPercent(), 30.532081377152);
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/insights",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testVideoPlaysNoData() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ VideoPlaysModel model = new VideoPlaysModel("123456", response);
+ assertEquals(model.getOtherPlays(), 0);
+ assertEquals(model.getTotalPlays(), 0);
+ assertNotNull(model.getPlays());
+ assertEquals(model.getPlays().size(), 0);
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/video-plays",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testVideoPlays() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ VideoPlaysModel model = new VideoPlaysModel("1234567890", response);
+ assertEquals(model.getOtherPlays(), 0);
+ assertEquals(model.getTotalPlays(), 2);
+ assertNotNull(model.getPlays());
+ assertEquals(model.getPlays().size(), 1);
+ SingleItemModel videoItemModel = model.getPlays().get(0);
+ assertEquals(videoItemModel.getTitle(), "Test Video");
+ assertEquals(videoItemModel.getUrl(), "http://maplebaconyummies.wordpress.com/wp-admin/media.php?action=edit&attachment_id=144");
+ assertEquals(videoItemModel.getItemID(), "144");
+ assertEquals(videoItemModel.getTotals(), 2);
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/1234567890/stats/video-plays",
+ null,
+ listener,
+ errListener
+ );
+ }
+
+ public void testVisits() throws Exception {
+ StatsRestRequestAbstractListener listener = new StatsRestRequestAbstractListener() {
+ @Override
+ void parseResponse(JSONObject response) throws JSONException {
+ VisitsModel model = new VisitsModel("123456", response);
+ assertNotNull(model.getVisits());
+ assertNotNull(model.getUnit());
+ assertNotNull(model.getDate());
+
+ assertEquals(model.getVisits().size(), 30);
+ assertEquals(model.getUnit(), "day");
+
+ VisitModel visitModel = model.getVisits().get(0);
+ assertEquals(visitModel.getViews(), 7808);
+ assertEquals(visitModel.getVisitors(), 4331);
+ assertEquals(visitModel.getLikes(), 0);
+ assertEquals(visitModel.getComments(), 0);
+ assertEquals(visitModel.getPeriod(), "2014-10-08");
+
+ }
+ };
+
+ mRestClient.makeRequest(Request.Method.POST, "https://public-api.wordpress.com/rest/v1.1/sites/123456/stats/visits",
+ null,
+ listener,
+ errListener
+ );
+ }
+}