core widget unit tests baseline set of unit tests for checking that each widget conforms to the contract

This commit is contained in:
Adam Young 2011-02-01 18:01:19 -05:00 committed by Endi S. Dewata
parent 04ba37500b
commit 2518612b0d
6 changed files with 6567 additions and 6482 deletions

View File

@ -372,12 +372,6 @@ IPA.details_section = function (spec){
return field; return field;
}; };
that.create_button = function(spec) {
var field = IPA.button_widget(spec);
that.add_field(field);
return field;
};
that.init = function() { that.init = function() {
for (var i=0; i<that.fields.length; i++) { for (var i=0; i<that.fields.length; i++) {
var field = that.fields[i]; var field = that.fields[i];

View File

@ -1,22 +1,19 @@
{ {
"error": null, "error": null,
"id": 0, "id": 4,
"result": { "result": {
"result": { "result": {
"aciname": "delegme", "aciname": "test-deleg",
"attrs": [ "attrs": [
"cn" "audio"
],
"filter": "(memberOf=cn=ipausers,cn=groups,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com)",
"group": "admins",
"membergroup": [
"admins"
], ],
"group": "ipausers",
"memberof": "editors",
"permissions": [ "permissions": [
"write" "write"
] ]
}, },
"summary": null, "summary": null,
"value": "delegme" "value": "test-deleg"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"error": null, "error": null,
"id": 0, "id": 2,
"result": { "result": {
"count": 5, "count": 5,
"result": [ "result": [
@ -11,9 +11,9 @@
"description": [ "description": [
"Account administrators group" "Account administrators group"
], ],
"dn": "cn=admins,cn=groups,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com", "dn": "cn=admins,cn=groups,cn=accounts,dc=ipa14,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com",
"gidnumber": [ "gidnumber": [
"1948497956" "1420800000"
], ],
"member_user": [ "member_user": [
"admin" "admin"
@ -26,13 +26,17 @@
"description": [ "description": [
"Default group for all users" "Default group for all users"
], ],
"dn": "cn=ipausers,cn=groups,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com", "dn": "cn=ipausers,cn=groups,cn=accounts,dc=ipa14,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com",
"gidnumber": [ "gidnumber": [
"1948497957" "1420800001"
], ],
"member_user": [ "member_user": [
"kfrog", "kfrog",
"moi" "count123",
"scram",
"elmo",
"zoe",
"pdawn"
] ]
}, },
{ {
@ -42,30 +46,33 @@
"description": [ "description": [
"Limited admins who can edit other users" "Limited admins who can edit other users"
], ],
"dn": "cn=editors,cn=groups,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com", "dn": "cn=editors,cn=groups,cn=accounts,dc=ipa14,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com",
"gidnumber": [ "gidnumber": [
"1948497958" "1420800002"
] ]
}, },
{ {
"cn": [ "cn": [
"deleteme" "monsters"
], ],
"description": [ "description": [
"This is a group that should go away." "Monsters on Sesame Street"
], ],
"dn": "cn=deleteme,cn=groups,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com" "dn": "cn=monsters,cn=groups,cn=accounts,dc=ipa14,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com",
"gidnumber": [
"1420800009"
]
}, },
{ {
"cn": [ "cn": [
"testgroup" "muppets"
], ],
"description": [ "description": [
"Detlete this if you see it" "Muppets moonlighting for CTW"
], ],
"dn": "cn=testgroup,cn=groups,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com", "dn": "cn=muppets,cn=groups,cn=accounts,dc=ipa14,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com",
"gidnumber": [ "gidnumber": [
"1948497959" "1420800010"
] ]
} }
], ],

View File

@ -1008,6 +1008,7 @@
"krbextradata", "krbextradata",
"krbhostserver", "krbhostserver",
"krbkdcservers", "krbkdcservers",
"krblastadminunlock",
"krblastfailedauth", "krblastfailedauth",
"krblastpwdchange", "krblastpwdchange",
"krblastsuccessfulauth", "krblastsuccessfulauth",
@ -4421,7 +4422,6 @@
"container_dn": "cn=permissions,cn=pbac", "container_dn": "cn=permissions,cn=pbac",
"default_attributes": [ "default_attributes": [
"cn", "cn",
"description",
"member", "member",
"memberof", "memberof",
"memberindirect" "memberindirect"
@ -4494,32 +4494,6 @@
"required": true, "required": true,
"type": "unicode" "type": "unicode"
}, },
{
"alwaysask": false,
"attribute": false,
"autofill": false,
"class": "Str",
"cli_name": "desc",
"cli_short_name": null,
"default": null,
"doc": "Permission description",
"exclude": null,
"flags": [],
"hint": null,
"include": null,
"label": "Description",
"length": null,
"maxlength": null,
"minlength": null,
"multivalue": false,
"name": "description",
"pattern": null,
"pattern_errmsg": null,
"primary_key": false,
"query": false,
"required": true,
"type": "unicode"
},
{ {
"alwaysask": false, "alwaysask": false,
"attribute": false, "attribute": false,
@ -5392,6 +5366,7 @@
"ipauniqueid", "ipauniqueid",
"krbcanonicalname", "krbcanonicalname",
"krbextradata", "krbextradata",
"krblastadminunlock",
"krblastfailedauth", "krblastfailedauth",
"krblastpwdchange", "krblastpwdchange",
"krblastsuccessfulauth", "krblastsuccessfulauth",
@ -6540,6 +6515,7 @@
"jpegphoto", "jpegphoto",
"krbcanonicalname", "krbcanonicalname",
"krbextradata", "krbextradata",
"krblastadminunlock",
"krblastfailedauth", "krblastfailedauth",
"krblastpwdchange", "krblastpwdchange",
"krblastsuccessfulauth", "krblastsuccessfulauth",
@ -6629,7 +6605,8 @@
"enable", "enable",
"find", "find",
"mod", "mod",
"show" "show",
"unlock"
], ],
"name": "user", "name": "user",
"object_class": [ "object_class": [
@ -7436,22 +7413,22 @@
"Administrator" "Administrator"
], ],
"gidnumber": [ "gidnumber": [
"1256800000" "1420800000"
], ],
"homedirectory": [ "homedirectory": [
"/home/admin" "/home/admin"
], ],
"ipauniqueid": [ "ipauniqueid": [
"37800f46-2983-11e0-abc5-52540029a798" "d9a55ece-2e2a-11e0-87ba-52540029a798"
], ],
"krblastpwdchange": [ "krblastpwdchange": [
"20110126193538Z" "20110201174537Z"
], ],
"krblastsuccessfulauth": [ "krblastsuccessfulauth": [
"20110127024034Z" "20110201174706Z"
], ],
"krbpasswordexpiration": [ "krbpasswordexpiration": [
"20110426193538Z" "20110502174537Z"
], ],
"krbprincipalname": [ "krbprincipalname": [
"admin@IPA14.AYOUNG.BOSTON.DEVEL.REDHAT.COM" "admin@IPA14.AYOUNG.BOSTON.DEVEL.REDHAT.COM"
@ -7481,7 +7458,7 @@
"admin" "admin"
], ],
"uidnumber": [ "uidnumber": [
"1256800000" "1420800000"
] ]
} }
], ],

View File

@ -29,7 +29,6 @@ module('widget',{
"data", "data",
true, true,
function(data, text_status, xhr) { function(data, text_status, xhr) {
ok(true, "ipa_init() succeeded.");
}, },
function(xhr, text_status, error_thrown) { function(xhr, text_status, error_thrown) {
ok(false, "ipa_init() failed: "+error_thrown); ok(false, "ipa_init() failed: "+error_thrown);
@ -42,9 +41,8 @@ module('widget',{
}} }}
); );
function base_widget_test(widget,entity_name, value){
var field_name = widget.name;
function base_widget_test(widget,entity_name, field_name,value){
ok (widget, "Created Widget"); ok (widget, "Created Widget");
widget.init(); widget.init();
ok(!widget.label,'widget with no entity has no label'); ok(!widget.label,'widget with no entity has no label');
@ -85,29 +83,10 @@ function widget_string_test(widget, value){
} }
test("Testing base widget.", function() {
var update_called = false;
var spec = {
update:function(){
update_called = true;
}
};
var widget = IPA.widget(spec);
base_widget_test(widget,'user','title','test_value');
widget_string_test(widget);
ok (update_called, 'Update called');
});
test("Testing text widget.", function() { function text_tests(widget,input){
var widget = IPA.text_widget({undo:true});
base_widget_test(widget,'user','title','test_value');
widget_string_test(widget);
var input = $('input[type=text]',widget_container);
input.val('changed'); input.val('changed');
input.keyup(); input.keyup();
same(widget.save(),['changed'], "Setting Value"); same(widget.save(),['changed'], "Setting Value");
@ -136,11 +115,85 @@ test("Testing text widget.", function() {
widget.param_info.pattern = old_pattern; widget.param_info.pattern = old_pattern;
}
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',
update:function(){
update_called = true;
}
};
var widget = IPA.widget(spec);
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 checkbox widget.", function() { test("Testing checkbox widget.", function() {
var widget = IPA.checkbox_widget(); var widget = IPA.checkbox_widget({name:'title'});
base_widget_test(widget,'user','title','test_value'); base_widget_test(widget,'user','test_value');
mock_record = {'title':'something'}; mock_record = {'title':'something'};
@ -164,3 +217,63 @@ test("Testing checkbox widget.", function() {
}); });
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.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;
});
});

View File

@ -282,7 +282,7 @@ IPA.text_widget = function(spec) {
if(that.undo){ if(that.undo){
that.show_undo(); that.show_undo();
} }
var value = $('input[name="'+that.name+'"]', that.container).val(); var value = $(this).val();
that.validate_input(value); that.validate_input(value);
}); });
@ -520,10 +520,21 @@ IPA.radio_widget = function(spec) {
}; };
that.update = function() { that.update = function() {
if (that.values && that.values.length) {
var input = $('input[name="'+that.name+'"][value="'+that.values[0]+'"]', that.container);
if (that.values) {
var value;
if ((that.values instanceof Array ) && that.values.length){
value = that.values[0]
}else{
value = that.values;
}
var input = $('input[name="'+that.name+'"][value="'+value+'"]',
that.container);
if (input.length) { if (input.length) {
input.get(0).checked = true; input.attr('checked', true);
return; return;
} }
} }
@ -637,6 +648,13 @@ IPA.textarea_widget = function (spec) {
if (that.undo) { if (that.undo) {
that.create_undo(container); that.create_undo(container);
} }
$("<span/>",{
name:'error_link',
html:"Text does not match field pattern",
"class":"ui-state-error ui-corner-all",
style:"display:none"
}).appendTo(container);
}; };
that.setup = function(container) { that.setup = function(container) {
@ -646,6 +664,10 @@ IPA.textarea_widget = function (spec) {
var input = $('textarea[name="'+that.name+'"]', that.container); var input = $('textarea[name="'+that.name+'"]', that.container);
input.keyup(function() { input.keyup(function() {
undo.css('display', 'inline'); undo.css('display', 'inline');
var value = $(this).val();
that.validate_input(value);
}); });
var undo = that.get_undo(); var undo = that.get_undo();
@ -677,35 +699,6 @@ IPA.textarea_widget = function (spec) {
return that; return that;
}; };
IPA.button_widget = function (spec) {
spec = spec || {};
spec.setup = spec.setup || setup;
spec.load = spec.load || load;
spec.save = spec.save || save;
var that = IPA.widget(spec);
that.click = spec.click;
function setup(container) {
that.widget_setup(container);
var input = $('[name="'+that.name+'"]', that.container);
input.replaceWith(IPA.button({ 'label': that.label, 'click': that.click }));
}
function load(record) {
}
function save() {
return [];
}
return that;
};
IPA.column = function (spec) { IPA.column = function (spec) {
@ -1066,19 +1059,23 @@ IPA.entity_select_widget = function(spec){
var that = IPA.widget(spec); var that = IPA.widget(spec);
var entity = spec.entity || 'group'; var entity = spec.entity || 'group';
var field_name = spec.field_name || 'cn';
function populate_select(value){ function populate_select(value){
function find_success(result){ function find_success(result){
$('option', that.entity_select).remove(); $('option', that.entity_select).remove();
var entities = result.result.result; var entities = result.result.result;
for (var i =0; i < result.result.count; i +=1){ for (var i =0; i < result.result.count; i +=1){
var entity = entities[i];
var field_array = entity[field_name];
var field_value = field_array[0];
var option = var option =
$('<option/>',{ $('<option/>',{
text:entities[i].cn[0], text:field_value,
value:entities[i].cn[0] value:field_value
}). }).
appendTo(that.entity_select); appendTo(that.entity_select);
if (value === entities[i].cn[0]){ if (value === field_value){
option.attr('selected','selected'); option.attr('selected','selected');
} }
} }