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.
 
 
 
 
 

179 lines
6.0 KiB

/* Copyright 2017 LasLabs Inc.
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). */
odoo.define_section('web_widget_slickroom', ['web.core', 'web.form_common'], function (test) {
"use strict";
function appendWidget (core, formCommon, $fix) {
var fieldManager = new formCommon.DefaultFieldManager(null, {});
var node = {'attrs': {}};
var FieldSlickroomImages = core.form_widget_registry.get('slickroom');
var widget = new FieldSlickroomImages(fieldManager, node);
widget.appendTo($fix);
return widget;
}
function imgHTML (id, attr) {
return $(
'<div><img data-record-id="' +id + '" ' + attr +
'="/web/image/ir.attachment/' + id + '/datas"></div>'
);
}
test('._openModal() should open a darkroom modal with provided options',
function (assert, core, formCommon) {
var $fix = $('#qunit-fixture');
var widget = appendWidget(core, formCommon, $fix);
var recordId = 1;
widget.$slick.slick('slickAdd', imgHTML(recordId, 'src'));
var modalAction = {};
widget.do_action = function (action, options) {
modalAction = action;
};
var expectedAction = {
"type": "ir.actions.act_window",
"res_model": "darkroom.modal",
"name": "Darkroom",
"views": [[false, "form"]],
"target": "new",
"context": {
"active_field": widget.options.fieldName,
"active_model": widget.options.modelName,
"active_record_id": recordId
}
};
widget.$('img').click();
assert.deepEqual(modalAction, expectedAction);
}
);
test('._openModal() should open a darkroom modal with on_close action ' +
'that calls ._updateImage()',
function (assert, core, formCommon) {
var $fix = $('#qunit-fixture');
var widget = appendWidget(core, formCommon, $fix);
var recordId = 1;
widget.$slick.slick('slickAdd', imgHTML(recordId, 'src'));
var modalOptions = {};
widget.do_action = function (action, options) {
modalOptions = options;
};
var $img = widget.$('img');
$img.click();
modalOptions.on_close();
assert.notStrictEqual($img.attr('src').indexOf('?unique'), -1);
}
);
test('._slickRender() should add data-record-id to images',
function (assert, core, formCommon) {
var $fix = $('#qunit-fixture');
var widget = appendWidget(core, formCommon, $fix);
var values = [1, 2, 3];
_.each(values, function(recordId) {
widget._slickRender('/web/image/ir.attachments/', recordId);
});
var slickImageIds = widget.$slick.find('img').map(function () {
return $(this).data('record-id');
}).get();
assert.deepEqual(slickImageIds, values);
}
);
test('._updateImage() should update source of matching/loaded slick images',
function (assert, core, formCommon) {
var $fix = $('#qunit-fixture');
var widget = appendWidget(core, formCommon, $fix);
var imgId = 1;
for(var i = 0; i < 5; i++) {
widget.$slick.slick('slickAdd', imgHTML(imgId, 'src'));
}
widget._updateImage(imgId);
var $matches = widget.$slick.find(
'[data-record-id="' + imgId + '"]'
);
$matches.each(function () {
var newSrc = $(this).attr('src');
assert.notStrictEqual(newSrc.indexOf('?unique'), -1);
});
}
);
test('._updateImage() should update lazy data attribute of matching/unloaded slick images',
function (assert, core, formCommon) {
var $fix = $('#qunit-fixture');
var widget = appendWidget(core, formCommon, $fix);
var imgId = 1;
for(var i = 0; i < 5; i++) {
widget.$slick.slick('slickAdd', imgHTML(imgId, 'data-lazy'));
}
widget._updateImage(1);
var $matches = widget.$slick.find(
'[data-record-id="' + imgId + '"]'
);
$matches.each(function () {
var newSrc = $(this).attr('data-lazy');
assert.notStrictEqual(newSrc.indexOf('?unique'), -1);
});
}
);
test('._updateImage() should not update source of non-matching/loaded slick images',
function (assert, core, formCommon) {
var $fix = $('#qunit-fixture');
var widget = appendWidget(core, formCommon, $fix);
var imgId = 1;
var img2Id = 2;
widget.$slick.slick('slickAdd', imgHTML(imgId, 'src'));
widget.$slick.slick('slickAdd', imgHTML(img2Id, 'src'));
widget._updateImage(1);
var $notMatch = widget.$slick.find(
'[data-record-id="' + img2Id + '"]'
);
assert.strictEqual($notMatch.attr('src').indexOf('?unique'), -1);
}
);
test('._updateImage() should not update lazy data attribute of ' +
'non-matching/unloaded slick images',
function (assert, core, formCommon) {
var $fix = $('#qunit-fixture');
var widget = appendWidget(core, formCommon, $fix);
var imgId = 1;
var img2Id = 2;
widget.$slick.slick('slickAdd', imgHTML(imgId, 'data-lazy'));
widget.$slick.slick('slickAdd', imgHTML(img2Id, 'data-lazy'));
widget._updateImage(1);
var $notMatch = widget.$slick.find(
'[data-record-id="' + img2Id + '"]'
);
assert.strictEqual(
$notMatch.attr('data-lazy').indexOf('?unique'), -1
);
}
);
});