service.js 4.01 KB
    /*
 * ADOBE CONFIDENTIAL
 *
 * Copyright 2016 Adobe Systems Incorporated
 * All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Adobe Systems Incorporated and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Adobe Systems Incorporated and its
 * suppliers and may be covered by U.S. and Foreign Patents,
 * patents in process, and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material
 * is strictly forbidden unless prior written permission is obtained
 * from Adobe Systems Incorporated.
 */
/* globals it, expect */
define('screens/player/shared/test-helper/service', [], function() {
    'use strict';

    function _testServiceId(service) {
        it('exposes a "serviceId" property of type String', function() {
            expect(service.serviceId).to.be.a('string');
            expect(service.serviceId).not.to.be.empty;
        });
    }

    function _testServiceName(service, expectedServiceName) {
        it('exposes a "serviceName" property with value "' + expectedServiceName + '"', function() {
            expect(service.serviceName).to.equal(expectedServiceName);
        });
    }

    function _testActivateReturnValue(service) {
        it('returns a resolved Promise on activation', function() {
            return service.activate();
        });
    }

    function _testCordovaActivateReturnValue(service) {
        it('returns a resolved Promise on activation', function() {

            /* eslint max-nested-callbacks: 0 */
            return simulateCordovaActivation(service).then(function() {
                return simulateCordovaDeactivation(service);
            });
        });
    }

    function simulateCordovaActivation(service) {
        window.cordova = true;
        var p = service.activate();
        window.document.dispatchEvent(new window.Event('deviceready'));
        return p;
    }

    function simulateCordovaDeactivation(service) {
        // Make sure to always delete window.cordova. Even if `service.deactivate` is not available.
        window.cordova = null;
        delete window.cordova;

        if (!service.deactivate) {
            return Promise.resolve();
        }

        return service.deactivate().then(function() {
            return Promise.resolve();
        });
    }

    /**
     * A Test Helper that provides utility methods to run generic Service tests.
     * @class ServiceTestHelper
     * @returns {Object} The API of the TestHelper
     */
    return {

        /**
         * Runs the standard Services tests.
         * @memberof ServiceTestHelper
         * @param {Object|Array} service A Service.
         * @param {String} serviceName The expected serviceName of the Service under test.
         */
        runDefaultTests: function(service, serviceName) {
            _testServiceId(service);
            _testServiceName(service, serviceName);
            _testActivateReturnValue(service);
        },

        /**
         * Runs the cordova Services tests.
         * @memberof ServiceTestHelper
         * @param {Object|Array} service A Service.
         * @param {String} serviceName The expected serviceName of the Service under test.
         */
        runDefaultCordovaTests: function(service, serviceName) {
            _testServiceId(service);
            _testServiceName(service, serviceName);
            _testCordovaActivateReturnValue(service);
        },

        /**
         * Prepares Cordova tests by mocking the Cordova ready event
         * and wraps the service activation.
         * @memberof ServiceTestHelper
         * @param {Object|Array} service A Service.
         */
        simulateCordovaActivation: simulateCordovaActivation,

        /**
         * Restores the original Cordova object and deactivates the service.
         * @memberof ServiceTestHelper
         * @param {Object|Array} service A Service.
         */
        simulateCordovaDeactivation: simulateCordovaDeactivation

    };

});