com.microsoft.windowsazure.mobileservices.sdk.testapp.test.PushTests.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.windowsazure.mobileservices.sdk.testapp.test.PushTests.java

Source

/*
Copyright (c) Microsoft Open Technologies, Inc.
All Rights Reserved
Apache 2.0 License
     
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
     
 http://www.apache.org/licenses/LICENSE-2.0
     
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
     
See the Apache Version 2.0 License for specific language governing permissions and limitations under the License.
 */
package com.microsoft.windowsazure.mobileservices.sdk.testapp.test;

import android.net.Uri;
import android.test.InstrumentationTestCase;

import com.google.common.util.concurrent.ListenableFuture;
import com.google.gson.JsonObject;
import com.microsoft.windowsazure.mobileservices.MobileServiceApplication;
import com.microsoft.windowsazure.mobileservices.MobileServiceClient;
import com.microsoft.windowsazure.mobileservices.http.HttpConstants;
import com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;
import com.microsoft.windowsazure.mobileservices.http.ServiceFilter;
import com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;
import com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;
import com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush;
import com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterRequestMock;
import com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;
import com.squareup.okhttp.Protocol;
import com.squareup.okhttp.internal.http.StatusLine;

import junit.framework.Assert;

import java.util.concurrent.ExecutionException;

public class PushTests extends InstrumentationTestCase {

    final String appUrl = "http://myapp.com/";
    final String pnsApiUrl = "push";

    public void testUnregister() throws Throwable {

        final Container container = new Container();

        MobileServiceClient client = null;

        String installationId = MobileServiceApplication.getInstallationId(getInstrumentation().getTargetContext());

        final String expectedUrl = appUrl + pnsApiUrl + "/installations/" + Uri.encode(installationId);

        try {
            client = new MobileServiceClient(appUrl, getInstrumentation().getTargetContext());

            client = client.withFilter(new ServiceFilter() {

                @Override
                public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,
                        NextServiceFilterCallback nextServiceFilterCallback) {

                    container.requestUrl = request.getUrl();
                    container.requestMethod = request.getMethod();

                    ServiceFilterResponseMock mockResponse = new ServiceFilterResponseMock();
                    mockResponse.setStatus(new StatusLine(Protocol.HTTP_2, 204, ""));

                    ServiceFilterRequestMock mockRequest = new ServiceFilterRequestMock(mockResponse);

                    return nextServiceFilterCallback.onNext(mockRequest);
                }
            });

            final MobileServicePush push = client.getPush();
            push.unregister().get();

        } catch (Exception exception) {
            if (exception instanceof ExecutionException) {
                container.exception = (Exception) exception.getCause();
            } else {
                container.exception = exception;
            }

            fail(container.exception.getMessage());
        }

        // Asserts
        Assert.assertEquals(expectedUrl, container.requestUrl);
        Assert.assertEquals(HttpConstants.DeleteMethod, container.requestMethod);
    }

    public void testRegister() throws Throwable {

        final Container container = new Container();

        MobileServiceClient client = null;
        final String handle = "handle";

        String installationId = MobileServiceApplication.getInstallationId(getInstrumentation().getTargetContext());

        final String expectedUrl = appUrl + pnsApiUrl + "/installations/" + Uri.encode(installationId);
        final String expectedContent = "{\"pushChannel\":\"handle\",\"platform\":\"gcm\"}";
        try {
            client = new MobileServiceClient(appUrl, getInstrumentation().getTargetContext());

            client = client.withFilter(new ServiceFilter() {

                @Override
                public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,
                        NextServiceFilterCallback nextServiceFilterCallback) {

                    container.requestUrl = request.getUrl();
                    container.requestContent = request.getContent();
                    container.requestMethod = request.getMethod();

                    ServiceFilterResponseMock mockResponse = new ServiceFilterResponseMock();
                    mockResponse.setStatus(new StatusLine(Protocol.HTTP_2, 204, ""));

                    ServiceFilterRequestMock mockRequest = new ServiceFilterRequestMock(mockResponse);

                    return nextServiceFilterCallback.onNext(mockRequest);
                }
            });

            final MobileServicePush push = client.getPush();
            push.register(handle).get();

        } catch (Exception exception) {
            if (exception instanceof ExecutionException) {
                container.exception = (Exception) exception.getCause();
            } else {
                container.exception = exception;
            }

            fail(container.exception.getMessage());
        }

        // Asserts
        Assert.assertEquals(expectedUrl, container.requestUrl);
        Assert.assertEquals(expectedContent, container.requestContent);
        Assert.assertEquals(HttpConstants.PutMethod, container.requestMethod);
    }

    public void testRegisterTemplate() throws Throwable {

        final Container container = new Container();

        MobileServiceClient client = null;
        final String handle = "handle";

        String installationId = MobileServiceApplication.getInstallationId(getInstrumentation().getTargetContext());

        final String expectedUrl = appUrl + pnsApiUrl + "/installations/" + Uri.encode(installationId);
        final String expectedContent = "{\"pushChannel\":\"handle\",\"platform\":\"gcm\",\"templates\":{\"template1\":{\"body\":\"{\\\"data\\\":\\\"abc\\\"}\"}}}";
        try {
            client = new MobileServiceClient(appUrl, getInstrumentation().getTargetContext());

            client = client.withFilter(new ServiceFilter() {

                @Override
                public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,
                        NextServiceFilterCallback nextServiceFilterCallback) {

                    container.requestUrl = request.getUrl();
                    container.requestContent = request.getContent();
                    container.requestMethod = request.getMethod();

                    ServiceFilterResponseMock mockResponse = new ServiceFilterResponseMock();
                    mockResponse.setStatus(new StatusLine(Protocol.HTTP_2, 204, ""));

                    ServiceFilterRequestMock mockRequest = new ServiceFilterRequestMock(mockResponse);

                    return nextServiceFilterCallback.onNext(mockRequest);
                }
            });

            final MobileServicePush push = client.getPush();
            push.registerTemplate(handle, "template1", "{\"data\":\"abc\"}").get();

        } catch (Exception exception) {
            if (exception instanceof ExecutionException) {
                container.exception = (Exception) exception.getCause();
            } else {
                container.exception = exception;
            }

            fail(container.exception.getMessage());
        }

        // Asserts
        Assert.assertEquals(expectedUrl, container.requestUrl);
        Assert.assertEquals(expectedContent, container.requestContent);
        Assert.assertEquals(HttpConstants.PutMethod, container.requestMethod);
    }

    public void testRegisterTemplateWithJobject() throws Throwable {

        final Container container = new Container();

        MobileServiceClient client = null;
        final String handle = "handle";

        String installationId = MobileServiceApplication.getInstallationId(getInstrumentation().getTargetContext());

        final String expectedUrl = appUrl + pnsApiUrl + "/installations/" + Uri.encode(installationId);
        final String expectedContent = "{\"pushChannel\":\"handle\",\"platform\":\"gcm\",\"templates\":"
                + createTemplateObject(true).toString() + "}";

        try {
            client = new MobileServiceClient(appUrl, getInstrumentation().getTargetContext());

            client = client.withFilter(new ServiceFilter() {

                @Override
                public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,
                        NextServiceFilterCallback nextServiceFilterCallback) {

                    container.requestUrl = request.getUrl();
                    container.requestContent = request.getContent();
                    container.requestMethod = request.getMethod();

                    ServiceFilterResponseMock mockResponse = new ServiceFilterResponseMock();
                    mockResponse.setStatus(new StatusLine(Protocol.HTTP_2, 204, ""));

                    ServiceFilterRequestMock mockRequest = new ServiceFilterRequestMock(mockResponse);

                    return nextServiceFilterCallback.onNext(mockRequest);
                }
            });

            JsonObject templates = createTemplateObject(false);

            final MobileServicePush push = client.getPush();

            push.register(handle, templates).get();

        } catch (Exception exception) {
            if (exception instanceof ExecutionException) {
                container.exception = (Exception) exception.getCause();
            } else {
                container.exception = exception;
            }

            fail(container.exception.getMessage());
        }

        // Asserts
        Assert.assertEquals(expectedUrl, container.requestUrl);
        Assert.assertEquals(expectedContent, container.requestContent);
        Assert.assertEquals(HttpConstants.PutMethod, container.requestMethod);
    }

    public void testRegisterTemplateAndTempateBodyAsJobject() throws Throwable {

        final Container container = new Container();

        MobileServiceClient client = null;
        final String handle = "handle";

        String installationId = MobileServiceApplication.getInstallationId(getInstrumentation().getTargetContext());

        final String expectedUrl = appUrl + pnsApiUrl + "/installations/" + Uri.encode(installationId);
        final String expectedContent = "{\"pushChannel\":\"handle\",\"platform\":\"gcm\",\"templates\":"
                + createTemplateObject(true).toString() + "}";

        try {
            client = new MobileServiceClient(appUrl, getInstrumentation().getTargetContext());

            client = client.withFilter(new ServiceFilter() {

                @Override
                public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,
                        NextServiceFilterCallback nextServiceFilterCallback) {

                    container.requestUrl = request.getUrl();
                    container.requestContent = request.getContent();
                    container.requestMethod = request.getMethod();

                    ServiceFilterResponseMock mockResponse = new ServiceFilterResponseMock();
                    mockResponse.setStatus(new StatusLine(Protocol.HTTP_2, 204, ""));

                    ServiceFilterRequestMock mockRequest = new ServiceFilterRequestMock(mockResponse);

                    return nextServiceFilterCallback.onNext(mockRequest);
                }
            });

            JsonObject templates = createTemplateObject(true);

            final MobileServicePush push = client.getPush();

            push.register(handle, templates).get();

        } catch (Exception exception) {
            if (exception instanceof ExecutionException) {
                container.exception = (Exception) exception.getCause();
            } else {
                container.exception = exception;
            }

            fail(container.exception.getMessage());
        }

        // Asserts
        Assert.assertEquals(expectedUrl, container.requestUrl);
        Assert.assertEquals(expectedContent, container.requestContent);
        Assert.assertEquals(HttpConstants.PutMethod, container.requestMethod);
    }

    private JsonObject createTemplateObject(Boolean isTemplateBodyString) {
        JsonObject templateBody = new JsonObject();
        templateBody.addProperty("data", "abc");

        JsonObject templateDetailObject = new JsonObject();
        if (isTemplateBodyString) {
            templateDetailObject.addProperty("body", templateBody.toString());
        } else {
            templateDetailObject.add("body", templateBody);
        }

        JsonObject templateObject = new JsonObject();
        templateObject.add("template1", templateDetailObject);
        templateObject.add("template2", templateDetailObject);

        return templateObject;
    }

    private class Container {

        public String requestContent;
        public String requestUrl;
        public String requestMethod;

        public Exception exception;
    }
}