319 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			319 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
/* Copyright 2016 LasLabs Inc.
 | 
						|
 * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
 | 
						|
 | 
						|
odoo.define('web_responsive.test', function(require) {
 | 
						|
    "use strict";
 | 
						|
 | 
						|
    var core = require('web.core');
 | 
						|
    var responsive = require('web_responsive');
 | 
						|
 | 
						|
    QUnit.module('web_responsive', {
 | 
						|
        beforeEach: function() {
 | 
						|
            var $el = $(
 | 
						|
                '<div class="drawer drawer--left">' +
 | 
						|
                    '<header role="banner">' +
 | 
						|
                        '<button class="drawer-toggle">' +
 | 
						|
                            '<span class="drawer-hamburger-icon"/>' +
 | 
						|
                        '</button>' +
 | 
						|
                        '<nav class="drawer-nav">' +
 | 
						|
                            '<ul class="drawer-menu">' +
 | 
						|
                                '<li class="drawer-menu-item"/>' +
 | 
						|
                            '</ul>' +
 | 
						|
                        '</nav>' +
 | 
						|
                        '<div class="panel-title" id="appDrawerAppPanelHead"></div>' +
 | 
						|
                    '</header>' +
 | 
						|
                    '<main role="main"></main>' +
 | 
						|
                    '<a class="oe_menu_leaf"/>' +
 | 
						|
                    '<div>' +
 | 
						|
                        '<div class="o_sub_menu_content"></div>' +
 | 
						|
                    '</div>' +
 | 
						|
                    '<div class="dropdown-scrollable"></div>' +
 | 
						|
                '</div>'
 | 
						|
            );
 | 
						|
 | 
						|
            this.$clickZone = $el.find('a.oe_menu_leaf');
 | 
						|
            this.$secondaryMenu = $el.find('div.o_sub_menu_content').parent();
 | 
						|
            this.$dropdown = $el.find('div.dropdown-scrollable');
 | 
						|
 | 
						|
            this.document = $("#qunit-fixture");
 | 
						|
            this.document.append($el);
 | 
						|
 | 
						|
            this.drawer = new responsive.AppDrawer();
 | 
						|
        },
 | 
						|
 | 
						|
        linkGrid: function() {
 | 
						|
            for(var i = 0; i < 3; i++){
 | 
						|
                this.drawer.$el.append(
 | 
						|
                    $('<div class="row">').append(
 | 
						|
                        $('<a class="col-md-6" id="a_' + i + '"><span class="app-drawer-icon-app /></a>' +
 | 
						|
                          '<a class="col-md-6" id="b_' + i + '"><span class="app-drawer-icon-app /></a>'
 | 
						|
                          )
 | 
						|
                    )
 | 
						|
                );
 | 
						|
                this.drawer.$appLinks = this.drawer.$el.find('a.col-md-6');
 | 
						|
            }
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
    QUnit.test('It should set initialized after success init',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            assert.ok(this.drawer.initialized);
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should close drawer after click on clickZone',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.$clickZone.click();
 | 
						|
 | 
						|
            var self = this;
 | 
						|
            var d = $.Deferred();
 | 
						|
            setTimeout(function() {
 | 
						|
                assert.ok(self.drawer.$el.hasClass('drawer-close'));
 | 
						|
                d.resolve();
 | 
						|
            }, 100);
 | 
						|
 | 
						|
            return d;
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should collapse open secondary menus during handleClickZones',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.$clickZone.click();
 | 
						|
 | 
						|
            var self = this;
 | 
						|
            var d = $.Deferred();
 | 
						|
            setTimeout(function() {
 | 
						|
                assert.equal(self.$secondaryMenu.attr('aria-expanded'), 'false');
 | 
						|
                d.resolve();
 | 
						|
            }, 200);
 | 
						|
 | 
						|
            return d;
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should update max-height on scrollable dropdowns',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.drawer.handleWindowResize();
 | 
						|
 | 
						|
            var height = $(window).height() * this.drawer.dropdownHeightFactor;
 | 
						|
            var actual = parseFloat(this.$dropdown.css('max-height'));
 | 
						|
 | 
						|
            var pass = Math.abs(actual - height) < 0.001;
 | 
						|
 | 
						|
            assert.pushResult({
 | 
						|
                result: pass,
 | 
						|
                actual: actual,
 | 
						|
                expect: height,
 | 
						|
                message: ''
 | 
						|
            });
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should return keybuffer + new key',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.drawer.keyBuffer = 'TES';
 | 
						|
            var res = this.drawer.handleKeyBuffer(84);
 | 
						|
            assert.equal(res, 'TEST');
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should clear keybuffer after timeout',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.drawer.keyBuffer = 'TES';
 | 
						|
            this.drawer.keyBufferTime = 10;
 | 
						|
            this.drawer.handleKeyBuffer(84);
 | 
						|
 | 
						|
            var self = this;
 | 
						|
            var d = $.Deferred();
 | 
						|
            setTimeout(function() {
 | 
						|
                assert.equal(self.drawer.keyBuffer, "");
 | 
						|
                d.resolve();
 | 
						|
            }, 100);
 | 
						|
 | 
						|
            return d;
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should trigger core bus event for drawer close',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.drawer.onDrawerOpen();
 | 
						|
            var d = $.Deferred();
 | 
						|
            core.bus.on('drawer.closed', this, function() {
 | 
						|
                assert.ok(true);
 | 
						|
                d.resolve();
 | 
						|
            });
 | 
						|
 | 
						|
            this.drawer.$el.trigger({type: 'drawer.closed'});
 | 
						|
            return d;
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should set isOpen to false when closing',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.drawer.onDrawerOpen();
 | 
						|
 | 
						|
            var self = this;
 | 
						|
            var d = $.Deferred();
 | 
						|
            setTimeout(function() {
 | 
						|
                assert.equal(self.drawer.isOpen, false);
 | 
						|
                d.resolve();
 | 
						|
            }, 100);
 | 
						|
 | 
						|
            this.drawer.$el.trigger({type: 'drawer.closed'});
 | 
						|
 | 
						|
            return d;
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should set isOpen to true when opening',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.drawer.$el.trigger({type: 'drawer.opened'});
 | 
						|
 | 
						|
            var self = this;
 | 
						|
            var d = $.Deferred();
 | 
						|
            setTimeout(function() {
 | 
						|
                assert.ok(self.drawer.isOpen);
 | 
						|
                d.resolve();
 | 
						|
            }, 100);
 | 
						|
 | 
						|
            return d;
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should trigger core bus event for drawer open',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.drawer.onDrawerOpen();
 | 
						|
            var d = $.Deferred();
 | 
						|
 | 
						|
            core.bus.on('drawer.opened', this, function() {
 | 
						|
                assert.ok(true);
 | 
						|
                d.resolve();
 | 
						|
            });
 | 
						|
 | 
						|
            this.drawer.$el.trigger({type: 'drawer.opened'});
 | 
						|
            return d;
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should choose link to right',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.linkGrid();
 | 
						|
 | 
						|
            var $appLink = $('#a_1'),
 | 
						|
                $expect = $('#a_2'),
 | 
						|
                $res = this.drawer.findAdjacentAppLink(
 | 
						|
                    $appLink, this.drawer.RIGHT
 | 
						|
                );
 | 
						|
 | 
						|
            assert.equal($res[0].id, $expect[0].id);
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should choose link to left',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.linkGrid();
 | 
						|
            var $appLink = $('#a_2'),
 | 
						|
                $expect = $('#a_1'),
 | 
						|
                $res = this.drawer.findAdjacentAppLink(
 | 
						|
                    $appLink, this.drawer.LEFT
 | 
						|
                );
 | 
						|
            assert.equal($res[0].id, $expect[0].id);
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should choose link above',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.linkGrid();
 | 
						|
            var $appLink = $('#a_1'),
 | 
						|
                $expect = $('#a_0'),
 | 
						|
                $res = this.drawer.findAdjacentAppLink(
 | 
						|
                    $appLink, this.drawer.UP
 | 
						|
                );
 | 
						|
            assert.equal($res[0].id, $expect[0].id);
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should choose link below',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.linkGrid();
 | 
						|
            var $appLink = $('#a_1'),
 | 
						|
                $expect = $('#a_2'),
 | 
						|
                $res = this.drawer.findAdjacentAppLink(
 | 
						|
                    $appLink, this.drawer.DOWN
 | 
						|
                );
 | 
						|
            assert.equal($res[0].id, $expect[0].id);
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should choose first link if next on last',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.linkGrid();
 | 
						|
            var $appLink = $('#b_2'),
 | 
						|
                $expect = $('#a_0'),
 | 
						|
                $res = this.drawer.findAdjacentAppLink(
 | 
						|
                    $appLink, this.drawer.RIGHT
 | 
						|
                );
 | 
						|
            assert.equal($res[0].id, $expect[0].id);
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should choose bottom link if up on top',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.linkGrid();
 | 
						|
            var $appLink = $('#a_0'),
 | 
						|
                $expect = $('#a_2'),
 | 
						|
                $res = this.drawer.findAdjacentAppLink(
 | 
						|
                    $appLink, this.drawer.UP
 | 
						|
                );
 | 
						|
            assert.equal($res[0].id, $expect[0].id);
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    QUnit.test('It should choose top link if down on bottom',
 | 
						|
        function(assert) {
 | 
						|
            assert.expect(1);
 | 
						|
 | 
						|
            this.linkGrid();
 | 
						|
            var $appLink = $('#a_2'),
 | 
						|
                $expect = $('#a_0'),
 | 
						|
                $res = this.drawer.findAdjacentAppLink(
 | 
						|
                    $appLink, this.drawer.DOWN
 | 
						|
                );
 | 
						|
            assert.equal($res[0].id, $expect[0].id);
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
});
 |