preferences-reducer.test.js 3.96 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 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.
 */

/* eslint max-nested-callbacks: [2, 10]*/
/* eslint no-new: 0 */

/* globals describe */
define([
    'screens/player/firmware/preferences/preferences',
    'screens/player/firmware/preferences/impl/preferences-reducer',
    'screens/player/shared/test-helper/reducer'
], function(Preferences, preferencesReducer, ReducerHelper) {
    'use strict';

    describe('screens/player/firmware/preferences/impl/preferences-reducer', function() {
        var helper = new ReducerHelper(preferencesReducer);

        helper.runDefaultTests([
            {type: Preferences.ACTIONS.SAVING},
            {type: Preferences.ACTIONS.SAVING_DONE, payload: {test: 'bar'}},
            {type: Preferences.ACTIONS.SAVING_ERROR, payload: 'error'}
        ], {});

        helper.runCompareStateTest('default state',
            {},
            null,
            {status_error: '', status: Preferences.STATES.READY}
        );

        helper.runCompareStateTest('must modify the state on Preferences.ACTIONS.SAVING_DONE',
            {type: Preferences.ACTIONS.SAVING_DONE, payload: {test: 'bar'}},
            {test: 'foo', status: Preferences.STATES.SAVING},
            {test: 'bar', status: Preferences.STATES.READY}
        );

        helper.runCompareStateTest('must return state if payload is null',
            { type: Preferences.ACTIONS.SAVING_DONE, payload: null },
            {test: 'foo', status: Preferences.STATES.SAVING},
            {test: 'foo', status: Preferences.STATES.READY}
        );

        helper.runCompareStateTest('must remove a trailing slash from the server url',
            {type: Preferences.ACTIONS.SAVING_DONE, payload: {server: 'http://host:9999/'}},
            {status: Preferences.STATES.SAVING},
            {server: 'http://host:9999', status: Preferences.STATES.READY}
        );

        helper.runCompareStateTest('must not modify the server url if no trailing slash is found',
            {type: Preferences.ACTIONS.SAVING_DONE, payload: {server: 'http://host:9999'}},
            {status: Preferences.STATES.SAVING},
            {server: 'http://host:9999', status: Preferences.STATES.READY}
        );

        helper.runCompareStateTest('must not crash if server url is set to null',
            {type: Preferences.ACTIONS.SAVING_DONE, payload: {server: null}},
            {status: Preferences.STATES.SAVING},
            {server: null, status: Preferences.STATES.READY}
        );

        helper.runCompareStateTest('turns READY into SAVING without modifying other props',
            {type: Preferences.ACTIONS.SAVING},
            {some: 'props', status: Preferences.STATES.READY},
            {some: 'props', status_error: '', status: Preferences.STATES.SAVING}
        );

        helper.runCompareStateTest('turns SAVING into READY with error without modifying other props',
            {type: Preferences.ACTIONS.SAVING_ERROR, payload: 'some-error'},
            {some: 'props', status: Preferences.STATES.SAVING},
            {some: 'props', status_error: 'some-error', status: Preferences.STATES.READY}
        );

        helper.runCompareStateTest('turns READY into SAVING and sets `status_error` to empty string without modifying other props',
            {type: Preferences.ACTIONS.SAVING},
            {some: 'props', status_error: 'some-error', status: Preferences.STATES.READY},
            {some: 'props', status_error: '', status: Preferences.STATES.SAVING}
        );

    });
});