diff options
Diffstat (limited to 'WordPress/src/androidTest/java/org/wordpress/android/ui')
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 & blog\" target=\"_blank\" notes-data-click=\"best_period_ever_feat\">taliwut & 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&" + + "d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&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" + + "&d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&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" + + "&d=https%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&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" + + "&d=https%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D64&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 + ); + } +} |