freeipa/install/ui/test/ipa_tests.js
Petr Vobornik faf4fea30f webui: patternFly dialog
Reviewed-By: Endi Sukma Dewata <edewata@redhat.com>
2014-06-10 10:23:26 +02:00

316 lines
8.0 KiB
JavaScript

/* Authors:
* Endi Sukma Dewata <edewata@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, either version 3 of the License, or
* (at your option) any later version.
*
* 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, see <http://www.gnu.org/licenses/>.
*/
define([
'freeipa/ipa',
'freeipa/jquery',
'freeipa/rpc',
'freeipa/dialog',
'freeipa/widget',
'freeipa/details',
'freeipa/entity'],
function(IPA, $, rpc) {
return function() {
module('ipa');
test("Testing ipa_init().", function() {
expect(1);
IPA.ajax_options.async = false;
IPA.init({
url: 'data',
on_success: function(data, text_status, xhr) {
ok(true, "ipa_init() succeeded.");
},
on_error: function(xhr, text_status, error_thrown) {
ok(false, "ipa_init() failed: "+error_thrown);
}
});
});
test("Testing IPA.get_entity_param().", function() {
var metadata = IPA.get_entity_param("user", "uid");
ok(
metadata,
"IPA.get_entity_param(\"user\", \"uid\") not null");
equals(
metadata["label"], "User login",
"IPA.get_entity_param(\"user\", \"uid\")[\"label\"]");
equals(
IPA.get_entity_param("user", "wrong_attribute"), null,
"IPA.get_entity_param(\"user\", \"wrong_attribute\")");
equals(
IPA.get_entity_param("user", null), null,
"IPA.get_entity_param(\"user\", null)");
equals(
IPA.get_entity_param("wrong_entity", "uid"), null,
"IPA.get_entity_param(\"wrong_entity\", \"uid\")");
equals(
IPA.get_entity_param(null, "uid"), null,
"IPA.get_entity_param(null, \"uid\")");
});
test("Testing IPA.get_member_attribute().", function() {
equals(
IPA.get_member_attribute("user", "group"), "memberof",
"IPA.get_member_attribute(\"user\", \"group\")");
equals(
IPA.get_member_attribute("user", "host"), null,
"IPA.get_member_attribute(\"user\", \"host\")");
equals(
IPA.get_member_attribute("user", null), null,
"IPA.get_member_attribute(\"user\", null)");
equals(
IPA.get_member_attribute(null, "group"), null,
"IPA.get_member_attribute(null, \"group\")");
});
test("Testing successful rpc.command().", function() {
var method = 'method';
var args = ['arg1', 'arg2', 'arg3'];
var options = {
opt1: 'val1',
opt2: 'val2',
opt3: 'val3'
};
var object = 'object';
var success_handler_counter = 0;
var error_handler_counter = 0;
function success_handler(data, status, xhr) {
success_handler_counter++;
}
function error_handler(xhr, text_status, error_thrown) {
error_handler_counter++;
}
var orig = $.ajax;
var xhr = {};
var text_status = null;
var error_thrown = {name:'ERROR', message:'An error has occurred'};
var ajax_counter = 0;
$.ajax = function(request) {
ajax_counter++;
equals(
request.url, "data/"+object+"_"+method+".json",
"Checking request.url");
var data = JSON.parse(request.data);
equals(
data.method, object+'_'+method,
"Checking method");
same(
data.params, [args, options],
"Checking parameters");
request.success(xhr, text_status, error_thrown);
};
rpc.command({
entity: object,
method: method,
args: args,
options: options,
on_success: success_handler,
on_error: error_handler
}).execute();
equals(
ajax_counter, 1,
"Checking ajax invocation counter");
var dialog = $('[data-name=error_dialog]');
ok(
dialog.length === 0,
"The dialog box is not created.");
ok(
success_handler_counter === 1 && error_handler_counter === 0,
"Only the success handler is called.");
$.ajax = orig;
});
test("Testing unsuccessful rpc.command().", function() {
var method = 'method';
var args = ['arg1', 'arg2', 'arg3'];
var options = {
opt1: 'val1',
opt2: 'val2',
opt3: 'val3'
};
var object = 'object';
var success_handler_counter = 0;
var error_handler_counter = 0;
var dialog_selector = '[data-name=error_dialog]';
function success_handler(data, status, xhr) {
success_handler_counter++;
}
function error_handler(xhr, text_status, error_thrown) {
error_handler_counter++;
}
var orig = $.ajax;
var xhr = {};
var text_status = null;
var error_thrown = {name:'ERROR', message:'An error has occurred'};
var ajax_counter = 0;
$.ajax = function(request) {
ajax_counter++;
equals(request.url, "data/"+object+"_"+method+".json",
"Checking request.url");
var data = JSON.parse(request.data);
equals(data.method, object+'_'+method, "Checking method");
same(data.params, [args, options], "Checking parameters");
request.error(xhr, text_status, error_thrown);
};
rpc.command({
entity: object,
method: method,
args: args,
options: options,
on_success: success_handler,
on_error: error_handler
}).execute();
function click_button(name) {
var dialog = $(dialog_selector);
var btn = $('button[name='+name+']', dialog).first();
btn.trigger('click');
}
var dialog = $(dialog_selector);
equals(
ajax_counter, 1,
"Checking ajax invocation counter");
ok(
dialog.length === 1,
"The dialog box is created and open.");
ok(
success_handler_counter === 0 && error_handler_counter === 0,
"Initially none of the handlers are called.");
click_button('retry');
equals(
ajax_counter, 2,
"Checking ajax invocation counter");
ok(
success_handler_counter === 0 && error_handler_counter === 0,
"After 1st retry, none of the handlers are called.");
click_button('retry');
equals(ajax_counter, 3,
"Checking ajax invocation counter");
ok(success_handler_counter === 0 && error_handler_counter === 0,
"After 2nd retry, none of the handlers are called.");
click_button('cancel');
equals(ajax_counter, 3,
"Checking ajax invocation counter");
ok(success_handler_counter === 0 && error_handler_counter === 1,
"Only the error handler is called.");
// cleanup - qunit doesn't really play well with asynchronous opening and
// closing of dialogs
// opening and closing may be rewritten as asynchronous test
$('.modal').remove();
$('.modal-backdrop').remove();
$.ajax = orig;
});
test("Testing observer.", function() {
expect(6);
var obj = {};
var param1_value = 'p1';
var param2_value = 'p2';
obj.event = IPA.observer();
obj.event.attach(function(param1, param2) {
ok(true, "Proper function 1 callback");
});
var first = true;
var func = function(param1, param2) {
if(first) {
ok(true, "Proper function 2 callback");
equals(param1, param1_value, "Testing Parameter 1");
equals(param2, param2_value, "Testing Parameter 2");
equals(this, obj, "Testing Context");
first = false;
} else {
ok(false, "Fail function 2 callback");
}
};
obj.event.attach(func);
obj.event.notify([param1_value, param2_value], obj);
obj.event.detach(func);
obj.event.notify([param1_value, param2_value], obj);
});
};});