You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
8.1 KiB
225 lines
8.1 KiB
/* Copyright 2017 LasLabs Inc.
|
|
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). */
|
|
|
|
odoo.define_section('web_widget_slick', ['web.core', 'web.form_common'], function(test) {
|
|
"use strict";
|
|
|
|
function appendWidget (core, formCommon, $fix) {
|
|
var fieldManager = new formCommon.DefaultFieldManager(null, {});
|
|
var node = {'attrs': {}};
|
|
var FieldSlickImages = core.form_widget_registry.get('one2many_slick_images');
|
|
var widget = new FieldSlickImages(fieldManager, node);
|
|
widget.appendTo($fix);
|
|
return widget;
|
|
}
|
|
|
|
function imageUrl (modelName, fieldName, id) {
|
|
return '/web/image/' + modelName + '/' + id + '/' + fieldName;
|
|
}
|
|
|
|
test('It should add a slick widget',
|
|
function(assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var widget = appendWidget(core, formCommon, $fix);
|
|
|
|
var slickContainerCount = $fix.find('.slick-container').length;
|
|
assert.strictEqual(slickContainerCount, 1);
|
|
}
|
|
);
|
|
|
|
test('.init() should add defaults to options',
|
|
function(assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var fieldManager = new formCommon.DefaultFieldManager(null, {});
|
|
var node = {'attrs': {}};
|
|
var FieldSlickImages = core.form_widget_registry.get('one2many_slick_images');
|
|
var widget = new FieldSlickImages(fieldManager, node);
|
|
widget.appendTo($fix);
|
|
|
|
widget.defaults.testing = 'tested';
|
|
widget.init(fieldManager, node);
|
|
assert.strictEqual(widget.options.testing, 'tested');
|
|
}
|
|
);
|
|
|
|
test('.destroy_content() should remove images',
|
|
function(assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var widget = appendWidget(core, formCommon, $fix);
|
|
|
|
var $slickImage = $('<div><img></div>');
|
|
widget.$slick.slick('slickAdd', $slickImage);
|
|
widget.destroy_content();
|
|
|
|
var slickImageCount = widget.$slick.find('img').length;
|
|
assert.strictEqual(slickImageCount, 0);
|
|
}
|
|
);
|
|
|
|
test('.destroy_content() should remove carousel',
|
|
function (assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var widget = appendWidget(core, formCommon, $fix);
|
|
|
|
widget.destroy_content();
|
|
|
|
var slickChildren = widget.$slick.children().length;
|
|
assert.strictEqual(slickChildren, 0);
|
|
}
|
|
);
|
|
|
|
test('.render_value() should add images corresponding to field value',
|
|
function(assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var widget = appendWidget(core, formCommon, $fix);
|
|
|
|
var fieldValues = [1, 2];
|
|
widget.set({'value': fieldValues});
|
|
widget.render_value();
|
|
|
|
var slickImages = widget.$slick.find('img');
|
|
var slickImageUrls = slickImages.map(function() {
|
|
return $(this).data('lazy');
|
|
}).get();
|
|
|
|
var modelName = widget.options.modelName;
|
|
var fieldName = widget.options.fieldName;
|
|
var expectedUrls = fieldValues.map(function(id) {
|
|
return '/web/image/' + modelName + '/' + id + '/' + fieldName;
|
|
});
|
|
|
|
assert.deepEqual(slickImageUrls, expectedUrls);
|
|
}
|
|
);
|
|
|
|
test('._resizeCarousel() should resize the widget',
|
|
function (assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var $nosheet = $('<div class="o_form_nosheet"></div>');
|
|
$fix.append($nosheet);
|
|
|
|
var widget = appendWidget(core, formCommon, $nosheet);
|
|
var setWidth = 50;
|
|
widget.$slick.outerWidth(setWidth);
|
|
|
|
widget._resizeCarousel();
|
|
|
|
assert.notStrictEqual(widget.$slick.outerWidth(), setWidth);
|
|
}
|
|
);
|
|
|
|
test('._resizeCarousel() should be called when container is resized',
|
|
function (assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var $nosheet = $('<div class="o_form_nosheet"></div>');
|
|
$fix.append($nosheet);
|
|
|
|
var widget = appendWidget(core, formCommon, $nosheet);
|
|
var setWidth = 50;
|
|
widget.$slick.outerWidth(setWidth);
|
|
|
|
core.bus.trigger('resize');
|
|
|
|
assert.notStrictEqual(widget.$slick.outerWidth(), setWidth);
|
|
}
|
|
);
|
|
|
|
test('._resizeLabelWidth() should return the width of the preceding ' +
|
|
'sibling label cell if it exists',
|
|
function (assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var widget = appendWidget(core, formCommon, $fix);
|
|
|
|
var width = 100;
|
|
var $cell = $('<td style="width:10px;"></td>');
|
|
var $labelCell = $('<td class="o_td_label"></td>');
|
|
$labelCell.outerWidth(width);
|
|
|
|
widget.$slick.append($labelCell);
|
|
widget.$slick.append($cell);
|
|
|
|
assert.strictEqual(widget._resizeLabelWidth($cell), width);
|
|
}
|
|
);
|
|
|
|
test('._resizeLabelWidth() should return 0 if the previous sibling cell ' +
|
|
' of the provided element is not a label cell',
|
|
function (assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var widget = appendWidget(core, formCommon, $fix);
|
|
|
|
var width = '100px';
|
|
var $cell = $('<td></td>');
|
|
widget.$slick.append($('<td style="width:' + width + ';"></td>'));
|
|
widget.$slick.append($cell);
|
|
|
|
assert.strictEqual(widget._resizeLabelWidth($cell), 0);
|
|
}
|
|
);
|
|
|
|
test('._resizeMarginWidth() should return the total left and right ' +
|
|
' margins of the provided element',
|
|
function (assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var widget = appendWidget(core, formCommon, $fix);
|
|
|
|
var elementStyle = 'margin-left: 12px; margin-right: 7px;';
|
|
var marginTotal = 19;
|
|
var $element = $('<div style="' + elementStyle + '"></div>');
|
|
widget.$slick.append($element);
|
|
|
|
assert.strictEqual(widget._resizeMarginWidth($element), marginTotal);
|
|
}
|
|
);
|
|
|
|
test('._resizeMaxWidth() should return the width of the closest sheet element',
|
|
function (assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var $sheet1 = $('<div class="o_form_sheet"></div>');
|
|
var $sheet2 = $('<div class="o_form_sheet"></div>');
|
|
var expectedWidth = 266;
|
|
|
|
$sheet1.width(700);
|
|
$sheet2.width(expectedWidth);
|
|
$sheet1.append($sheet2);
|
|
$fix.append($sheet1);
|
|
|
|
var widget = appendWidget(core, formCommon, $sheet2);
|
|
|
|
assert.strictEqual(widget._resizeMaxWidth(), expectedWidth);
|
|
}
|
|
);
|
|
|
|
test('._resizeMaxWidth() should return the width of the closest nosheet element',
|
|
function (assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var $nosheet1 = $('<div class="o_form_nosheet"></div>');
|
|
var $nosheet2 = $('<div class="o_form_nosheet"></div>');
|
|
var expectedWidth = 266;
|
|
|
|
$nosheet1.width(700);
|
|
$nosheet2.width(expectedWidth);
|
|
$nosheet1.append($nosheet2);
|
|
$fix.append($nosheet1);
|
|
|
|
var widget = appendWidget(core, formCommon, $nosheet2);
|
|
|
|
assert.strictEqual(widget._resizeMaxWidth(), expectedWidth);
|
|
}
|
|
);
|
|
|
|
test('._resizeScaledWidth() should return the provided integer, scaled' +
|
|
'to the % width in the provided element style attribute',
|
|
function (assert, core, formCommon) {
|
|
var $fix = $('#qunit-fixture');
|
|
var widget = appendWidget(core, formCommon, $fix);
|
|
|
|
var givenWidth = 100;
|
|
var widthPercent = 54;
|
|
var expectedWidth = widthPercent;
|
|
var $cell = $('<td style="width:' + widthPercent + '%;"></td>');
|
|
|
|
assert.strictEqual(widget._resizeScaledWidth($cell, givenWidth), expectedWidth);
|
|
}
|
|
);
|
|
});
|