summaryrefslogtreecommitdiffstats
path: root/install/ui/test/widget_tests.js
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2013-11-13 15:49:25 +0100
committerPetr Vobornik <pvoborni@redhat.com>2014-04-03 12:40:37 +0200
commit0d05a50e19b71cade636d9ca4882e453f614a78c (patch)
tree8b7fee3645c6c08f0a90be334ecd11543a6c2f91 /install/ui/test/widget_tests.js
parent66fb4d5e849a049e95d3ef4fcf2b86217488634d (diff)
downloadfreeipa-0d05a50e19b71cade636d9ca4882e453f614a78c.tar.gz
freeipa-0d05a50e19b71cade636d9ca4882e453f614a78c.tar.xz
freeipa-0d05a50e19b71cade636d9ca4882e453f614a78c.zip
webui: field and widget binding refactoring
This is a Web UI wide change. Fields and Widgets binding was refactored to enable proper two-way binding between them. This should allow to have one source of truth (field) for multiple consumers - widgets or something else. One of the goal is to have fields and widget implementations independent on each other. So that one could use a widget without field or use one field for multiple widgets, etc.. Basically a fields logic was split into separate components: - adapters - parsers & formatters - binder Adapters - extract data from data source (FreeIPA RPC command result) - prepares them for commands. Parsers - parse extracted data to format expected by field - parse widget value to format expected by field Formatters - format field value to format suitable for widgets - format field value to format suitable for adapter Binder - is a communication bridge between field and widget - listens to field's and widget's events and call appropriate methods Some side benefits: - better validation reporting in multivalued widget Reviewed-By: Adam Misnyovszki <amisnyov@redhat.com>
Diffstat (limited to 'install/ui/test/widget_tests.js')
-rw-r--r--install/ui/test/widget_tests.js35
1 files changed, 24 insertions, 11 deletions
diff --git a/install/ui/test/widget_tests.js b/install/ui/test/widget_tests.js
index 5499f5529..d24ab4cbe 100644
--- a/install/ui/test/widget_tests.js
+++ b/install/ui/test/widget_tests.js
@@ -18,9 +18,15 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-define(['freeipa/ipa', 'freeipa/jquery', 'freeipa/field', 'freeipa/widget',
- 'freeipa/entity'],
- function(IPA, $) { return function() {
+define([
+ 'dojo/on',
+ 'freeipa/ipa',
+ 'freeipa/jquery',
+ 'freeipa/group',
+ 'freeipa/field',
+ 'freeipa/widget',
+ 'freeipa/entity'
+], function(on, IPA, $, group) { return function() {
var widget_container;
var widget;
@@ -43,6 +49,7 @@ module('widget',{
factory = null;
spec = null;
+ group.register();
},
teardown: function() {
@@ -119,23 +126,28 @@ function text_tests(widget,input){
function multivalued_text_tests(widget) {
var values = ['val1', 'val2', 'val3'];
+ var changed = false;
+ function on_change (event) {
+ changed = true;
+ }
+ on(widget, 'value-change', on_change);
widget.update(values);
same(widget.save(), values, "All values loaded");
- same(widget.test_dirty(), false, "Field initially clean");
values = ['val1', 'val2', 'val3', 'val4'];
widget.add_row(['val4']);
-
same(widget.save(), values, "Value added");
- same(widget.test_dirty(), true, "Field is dirty");
+ ok(changed, "Value changed");
+ changed = false;
values = ['val1', 'val3', 'val4'];
widget.remove_row(widget.rows[1]);
same(widget.save(), values, "Value removed");
- same(widget.test_dirty(), true, "Field is dirty");
+ ok(changed, "Value changed");
+ changed = false;
}
test("IPA.table_widget" ,function(){
@@ -294,7 +306,10 @@ test("IPA.entity_link_widget" ,function(){
factory = IPA.link_widget;
spec = {
name: 'gidnumber',
- other_entity:'group'
+ other_entity:'group',
+ other_pkeys: function() {
+ return ['kfrog'];
+ }
};
base_widget_test(widget,'user','test_value');
@@ -304,8 +319,6 @@ test("IPA.entity_link_widget" ,function(){
}
};
- var mock_record = { uid: ['kfrog'], gidnumber: ['123456']};
-
widget.entity = mock_entity;
widget.create(widget_container);
@@ -315,7 +328,7 @@ test("IPA.entity_link_widget" ,function(){
ok(nonlink.length > 1);
ok(link.length > 1);
- widget.is_link = true; //setting is_link is responsibility of field
+ var mock_record = { gidnumber: ['123456']};
widget.update(mock_record.gidnumber);
link = widget_container.find('a:contains("123456")');