mock-store-service.js 2.17 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 Promise */
define('screens/player/shared/test-helper/mock-store-service', [
    'eventemitter'
], function(EventEmitter) {
    'use strict';

    var EVENTS = {
        BROADCAST: 'broadcast'
    };

    return function(store) {
        var eventEmitter = new EventEmitter();
        var previousState = {};
        var state = {};

        store.api.subscribe = function(listener, namespace) {
            eventEmitter.on(namespace, listener);
            var callback = function(newState, oldState, callbackNamespace) {
                if (namespace) {
                    if (callbackNamespace === namespace) {
                        listener(newState, oldState, namespace);
                    }
                } else {
                    listener(newState, oldState);
                }
            };
            eventEmitter.on(EVENTS.BROADCAST, callback);
            return callback;
        };

        store.publish = function(namespace, newState) {
            store.setState(newState);
            eventEmitter.emit(EVENTS.BROADCAST, state, previousState, namespace);
        };

        store.api.unsubscribe = function(callback) {
            eventEmitter.off(EVENTS.BROADCAST, callback);
        };

        store.api.getState.returns(state);

        store.api.requestState = function() {
            eventEmitter.emit(EVENTS.BROADCAST, state, null, null);
        };

        store.setState = function(newState) {
            previousState = state;
            state = newState;
        };

        return store;
    };

});