mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2024-12-29 10:21:18 -06:00
a746c613a4
Brings the DNS record infrastructure in line with the other entities. Uses widgets, nested search, and a littel bit of overloading for dns specific behavior The records now have their own page. simplified link widget and use for dns links work for nested entities. change the field in the link widget to other_entity to avoid name collision. unit test for entity link. fixed reference to entity for getting pkeys work around lack of setattr for dns record mod. update wasn't deducing locked_field type correctly. don't overwrite param_info in init data is required on adder dialog delete works for multiple records use show instead of find for entity_link_widget. https://fedorahosted.org/freeipa/ticket/1038 https://fedorahosted.org/freeipa/ticket/1448 https://fedorahosted.org/freeipa/ticket/577 https://fedorahosted.org/freeipa/ticket/1460
348 lines
8.8 KiB
JavaScript
348 lines
8.8 KiB
JavaScript
/* Authors:
|
|
* Adam Young <ayoung@redhat.com>
|
|
*
|
|
* Copyright (C) 2010 Red Hat
|
|
* see file 'COPYING' for use and warranty information
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; version 2 only
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
|
|
var widget_container;
|
|
|
|
|
|
module('widget',{
|
|
setup: function() {
|
|
IPA.ajax_options.async = false;
|
|
IPA.init(
|
|
"data",
|
|
true,
|
|
function(data, text_status, xhr) {
|
|
},
|
|
function(xhr, text_status, error_thrown) {
|
|
ok(false, "ipa_init() failed: "+error_thrown);
|
|
}
|
|
);
|
|
widget_container = $('<div id="widget"/>').appendTo(document.body);
|
|
},
|
|
teardown: function() {
|
|
widget_container.remove();
|
|
}}
|
|
);
|
|
|
|
function base_widget_test(widget,entity_name, value){
|
|
var field_name = widget.name;
|
|
ok (widget, "Created Widget");
|
|
widget.init();
|
|
ok(!widget.label,'widget with no entity has no label');
|
|
ok(!widget.tooltip,'widget with entity and name has no tooltip');
|
|
|
|
//init reads param info for an entity. We'll use the user entity
|
|
widget.entity_name = entity_name;
|
|
widget.name = field_name;
|
|
|
|
widget.init();
|
|
ok(widget.label,'widget with entity and name has label');
|
|
ok(widget.tooltip,'widget with entity and name has tooltip');
|
|
|
|
|
|
ok(!widget.container,'widget has no container before setup');
|
|
widget.create(widget_container);
|
|
widget.setup(widget_container);
|
|
|
|
ok(widget.container,'widget has container after setup');
|
|
|
|
|
|
}
|
|
|
|
|
|
function widget_string_test(widget) {
|
|
var value = 'test_title';
|
|
var mock_record = {'title': value};
|
|
|
|
widget.load(mock_record);
|
|
|
|
ok(widget.save() instanceof Array,'save returns array');
|
|
|
|
|
|
mock_record = {'title':[value]};
|
|
widget.load(mock_record);
|
|
|
|
ok(widget.save() instanceof Array,'save returns array');
|
|
|
|
}
|
|
|
|
|
|
|
|
function text_tests(widget,input){
|
|
|
|
input.val('changed');
|
|
input.keyup();
|
|
same(widget.save(),['changed'], "Setting Value");
|
|
same(widget.is_dirty(),true, "Click sets is_dirty");
|
|
|
|
var undo = widget.get_undo();
|
|
undo.click();
|
|
same(widget.is_dirty(),false, "Undo Clears is_dirty");
|
|
|
|
|
|
var old_pattern = widget.param_info.pattern;
|
|
|
|
widget.param_info.pattern ='abc';
|
|
input.val('not right');
|
|
input.keyup();
|
|
same(widget.valid,false, 'Field is not valid');
|
|
var error_field = widget.get_error_link();
|
|
|
|
same(error_field.css('display'),'block','error field is visible');
|
|
|
|
|
|
input.val('abc');
|
|
input.keyup();
|
|
same(widget.valid,true, 'Field is valid');
|
|
same(error_field.css('display'),'none','error field not visible');
|
|
|
|
widget.param_info.pattern = old_pattern;
|
|
|
|
}
|
|
|
|
function multivalued_text_tests(widget) {
|
|
|
|
var values = ['val1', 'val2', 'val3'];
|
|
|
|
var record = {};
|
|
record[widget.name] = values;
|
|
|
|
widget.load(record);
|
|
|
|
same(widget.save(), values, "All values loaded");
|
|
same(widget.is_dirty(), false, "Field initially clean");
|
|
|
|
values = ['val1', 'val2', 'val3', 'val4'];
|
|
widget.add_row('val4');
|
|
|
|
same(widget.save(), values, "Value added");
|
|
same(widget.is_dirty(), true, "Field is dirty");
|
|
|
|
values = ['val1', 'val3', 'val4'];
|
|
widget.remove_row(1);
|
|
|
|
same(widget.save(), values, "Value removed");
|
|
same(widget.is_dirty(), true, "Field is dirty");
|
|
}
|
|
|
|
test("IPA.table_widget" ,function(){
|
|
var widget = IPA.table_widget({undo:true,name:'users'});
|
|
|
|
widget.add_column(IPA.column({
|
|
name:'uid',
|
|
label:'User ID',
|
|
primary_key:'uid',
|
|
width:'20em',
|
|
entity_name:'user'
|
|
}));
|
|
widget.add_column(IPA.column({
|
|
name:'title',
|
|
lable:'Title',
|
|
primary_key:'uid',
|
|
width:'20em',
|
|
entity_name:'user'
|
|
}));
|
|
|
|
widget.init();
|
|
|
|
ok(!widget.container,'widget has no container before setup');
|
|
widget.create(widget_container);
|
|
widget.setup(widget_container);
|
|
|
|
ok(widget.container,'widget has container after setup');
|
|
|
|
|
|
var mock_results = {
|
|
users:[{ uid: 'kfrog', title:'reporter' },
|
|
{ uid: 'grover',title:'waiter' }]
|
|
};
|
|
|
|
widget.load(mock_results);
|
|
|
|
same ($('tr' ,widget_container).length, 4, 'four rows after load');
|
|
|
|
|
|
});
|
|
|
|
|
|
test("Testing base widget.", function() {
|
|
var update_called = false;
|
|
var spec = {
|
|
name:'title'
|
|
};
|
|
|
|
var widget = IPA.widget(spec);
|
|
widget.update = function() {
|
|
update_called = true;
|
|
};
|
|
|
|
base_widget_test(widget,'user','test_value');
|
|
widget_string_test(widget);
|
|
ok (update_called, 'Update called');
|
|
|
|
});
|
|
|
|
|
|
test("IPA.textarea_widget" ,function(){
|
|
var widget = IPA.textarea_widget({undo:true,name:'title'});
|
|
base_widget_test(widget,'user','test_value');
|
|
widget_string_test(widget);
|
|
text_tests(widget, $('textarea',widget_container));
|
|
|
|
});
|
|
|
|
|
|
test("Testing text widget.", function() {
|
|
var widget = IPA.text_widget({undo:true,name:'title'});
|
|
base_widget_test(widget,'user','test_value');
|
|
widget_string_test(widget);
|
|
text_tests(widget, $('input[type=text]',widget_container));
|
|
|
|
});
|
|
|
|
test("Testing multi-valued text widget.", function() {
|
|
var widget = IPA.multivalued_text_widget({undo:true,name:'title'});
|
|
base_widget_test(widget,'user','test_value');
|
|
widget_string_test(widget);
|
|
multivalued_text_tests(widget);
|
|
});
|
|
|
|
test("Testing checkbox widget.", function() {
|
|
var widget = IPA.checkbox_widget({name:'title'});
|
|
base_widget_test(widget,'user','test_value');
|
|
|
|
mock_record = {'title':'something'};
|
|
|
|
widget.load(mock_record);
|
|
same(widget.save(),[true], "Checkbox is set");
|
|
|
|
mock_record = {'title':null};
|
|
|
|
widget.load(mock_record);
|
|
same(widget.save(), [false], "Checkbox is not set");
|
|
|
|
var input = $('input[type=checkbox]',widget_container);
|
|
|
|
same(input.length,1,'One control in the container');
|
|
|
|
input.click();
|
|
|
|
same(widget.save(),[true], "Click sets checkbox");
|
|
same(widget.is_dirty(),true, "Click sets is_dirty");
|
|
|
|
|
|
});
|
|
|
|
|
|
test("IPA.checkboxes_widget" ,function(){
|
|
var widget = IPA.checkboxes_widget({undo:true, name:'title' });
|
|
base_widget_test(widget,'user','test_value');
|
|
|
|
});
|
|
test("IPA.select_widget" ,function(){
|
|
|
|
var widget = IPA.select_widget({undo:true,name:'title'});
|
|
base_widget_test(widget,'user','test_value');
|
|
|
|
});
|
|
|
|
|
|
test("IPA.entity_select_widget" ,function(){
|
|
var widget = IPA.entity_select_widget({
|
|
name: 'uid', entity:'user',field_name:'uid'});
|
|
base_widget_test(widget,'user','test_value');
|
|
ok( $('#uid-entity-select option').length > 1,"options populatedfrom AJAX");
|
|
mock_record = {'uid':'kfrog'};
|
|
widget.load(mock_record);
|
|
same(widget.values[0],'kfrog','select set from values');
|
|
});
|
|
|
|
|
|
test("IPA.entity_link_widget" ,function(){
|
|
var widget = IPA.entity_link_widget({
|
|
name: 'gidnumber',
|
|
other_entity:'group',
|
|
});
|
|
base_widget_test(widget,'user','test_value');
|
|
|
|
var mock_entity = {
|
|
get_primary_key: function(){
|
|
return "";
|
|
}
|
|
};
|
|
|
|
mock_record = {'uid':'kfrog','gidnumber':'123456'};
|
|
|
|
widget.entity = mock_entity;
|
|
widget.create(widget_container);
|
|
|
|
var nonlink = widget_container.find('label');
|
|
var link = widget_container.find('a');
|
|
|
|
ok(nonlink.length > 1);
|
|
ok(link.length > 1);
|
|
|
|
widget.load(mock_record);
|
|
|
|
link = widget_container.find('a[text=123456]');
|
|
|
|
same(link.length, 1,'link is populated');
|
|
same(link.css('display'), 'inline','link is displayed');
|
|
same(widget.nonlink.css('display'), 'none','text is not displayed');
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("IPA.radio_widget" ,function(){
|
|
var options = [{label:"Engineer",value:"engineer"},
|
|
{label:"Manager", value:"manager"},
|
|
{label:"Director",value:"director"},
|
|
{label:"Vice President",value:"VP"}];
|
|
var widget = IPA.radio_widget({undo:true, name: 'title',options:options});
|
|
base_widget_test(widget,'user','test_value');
|
|
var mock_record = {'title':["director"]};
|
|
widget.load(mock_record);
|
|
var values = widget.save();
|
|
same(values[0],'director','Options set correctly');
|
|
|
|
mock_record = {'title':"VP"};
|
|
widget.load(mock_record);
|
|
values = widget.save();
|
|
same(values[0],'VP','Options set correctly');
|
|
|
|
var i =0;
|
|
$('label', widget_container).each( function(){
|
|
same( $(this).text(),options[i].label, 'labels match');
|
|
i += 1;
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|