view release on metacpan or search on metacpan
- tests: js: first dochazka-www unit test
- tests: js: migrate unit test to QUnit 2.4.0
- build/ops: require App::MFILE::WWW 0.158
0.149 2017-09-24 00:03 CEST
- build/ops: add ext/codepaths file to MANIFEST
- js: tests: add simple test cases for mainMenu targets
- Dispatch.pm: upon login success, expurgate currentUser object
- js: tests: force root user for mainMenu test
- js: tests: refactor and add test for mainEmpl menu
- js: tests: use setTimeout properly
- js: tests/main-menu.js: refactor to do login/logout
- Dispatch.pm: use _prep_ajax_response for logout
- daction-start.js: call loggout instead of logout
- tests/main-menu.js: use current user object correctly
- js: tests: refactor all three existing tests
0.150 2017-09-25 17:36 CEST
- js: emp-lib: migrate ldapLookupSubmit() to target stack
- js: tests: add LDAP lookup test case
- js: tests: put focus on selection field when populating it
share/js/dochazka-www/tests/01-users.js view on Meta::CPAN
test_desc;
return function () {
test_desc = 'create "active" and "inactive" users if necessary';
QUnit.test(test_desc, function (assert) {
console.log('***TEST*** ' + prefix + test_desc);
var done = assert.async(6);
assert.expect(25);
login({"nam": "root", "pwd": "immutable"});
setTimeout(function () {
ct.login(assert, "root", "admin");
done();
}, 1000);
setTimeout(function () {
ct.mainMenu(assert);
done();
}, 2000);
setTimeout(function () {
// create the employees
ct.employeeCreate(assert, "active");
ct.employeeCreate(assert, "inactive");
done();
}, 2400);
setTimeout(function () {
// add privhistory records
ct.employeePriv(assert, "active", "active");
ct.employeePriv(assert, "inactive", "inactive");
done();
}, 2800);
setTimeout(function () {
// assert that employees have expected privlevels
ct.employeeHasPriv(assert, "active", "active");
ct.employeeHasPriv(assert, "inactive", "inactive");
loggout();
done();
}, 3200);
setTimeout(function () {
ct.loggout(assert);
done();
}, 3600);
});
};
});
share/js/dochazka-www/tests/ldap.js view on Meta::CPAN
var prefix = "dochazka-www: ",
test_desc;
return function () {
test_desc = 'LDAP lookup - success';
QUnit.test(test_desc, function (assert) {
console.log('***TEST*** ' + prefix + test_desc);
var done = assert.async(4);
login({"nam": "root", "pwd": "immutable"});
setTimeout(function () {
ct.login(assert, "root", "admin");
ct.mainMenuToMainEmpl(assert);
ct.mainEmplToLdapLookup(assert);
ct.submitLdapLookup(assert, 'ncutler');
done();
}, 1000);
setTimeout(function () {
var ldapDochazka;
ct.stack(
assert,
4,
'Displaying LDAP employee after successful LDAP lookup',
'dform',
'ldapDisplayEmployee',
);
ct.mainareaForm(assert, 'ldapDisplayEmployee');
assert.strictEqual(
share/js/dochazka-www/tests/ldap.js view on Meta::CPAN
"0. LDAP sync",
);
assert.ok(true, "*** REACHED miniMenu contains 0. LDAP sync");
// choose '0' for ldapSync
$('input[name="sel"]').val('0');
$('input[name="sel"]').focus();
start.mmKeyListener($.Event("keydown", {keyCode: 13}));
assert.ok(true, "*** REACHED pressed 0 for LDAP sync");
done();
}, 3000);
setTimeout(function () {
var ldapDochazka = $('#LDAPdochazka').text();
ct.stack(
assert,
4,
'Displaying LDAP employee after successful LDAP lookup',
'dform',
'ldapDisplayEmployee',
);
ct.mainareaForm(assert, 'ldapDisplayEmployee');
assert.ok(ldapDochazka, "ncutler is in Dochazka already? " + ldapDochazka);
share/js/dochazka-www/tests/ldap.js view on Meta::CPAN
assert,
2,
'After selecting X in ldapLookup',
'dmenu',
'mainEmpl'
);
assert.ok(true, "*** REACHED mainEmpl dmenu via X from ldapLookup");
loggout();
done();
}, 4500);
setTimeout(function () {
ct.loggout(assert);
done();
}, 5500);
});
test_desc = 'LDAP lookup - failure';
QUnit.test(test_desc, function (assert) {
console.log('***TEST*** ' + prefix + test_desc);
var done = assert.async(4);
login({"nam": "root", "pwd": "immutable"});
setTimeout(function () {
ct.login(assert, "root", "admin");
ct.mainMenuToMainEmpl(assert);
ct.mainEmplToLdapLookup(assert);
ct.submitLdapLookup(assert, 'NONEXISTENTfoobarbazblatFISHBEAR');
done();
}, 1000);
setTimeout(function () {
ct.stack(
assert,
3,
'failed LDAP lookup',
'dform',
'ldapLookup',
);
ct.contains(
assert,
$("#result").html(),
share/js/dochazka-www/tests/ldap.js view on Meta::CPAN
"Employee not found in LDAP",
);
assert.strictEqual(
coreLib.focusedItem().name,
'entry0',
'Focus is on data entry field',
);
ct.submitLdapLookup(assert, 'NONEXISTENTpseudoDataEntered');
done();
}, 3000);
setTimeout(function () {
ct.stack(
assert,
3,
'failed LDAP lookup',
'dform',
'ldapLookup',
);
ct.contains(
assert,
$("#result").html(),
share/js/dochazka-www/tests/ldap.js view on Meta::CPAN
"Employee not found in LDAP",
);
assert.strictEqual(
coreLib.focusedItem().name,
'entry0',
'Focus is on data entry field',
);
loggout();
done();
}, 4000);
setTimeout(function () {
ct.loggout(assert);
done();
}, 5000);
});
};
});
share/js/dochazka-www/tests/main-empl.js view on Meta::CPAN
test_desc;
return function () {
test_desc = 'employee profile - passerby';
QUnit.test(test_desc, function (assert) {
var done = assert.async(4),
fullProfile;
console.log("***TEST*** " + prefix + test_desc);
login({"nam": "demo", "pwd": "demo"});
setTimeout(function() {
ct.login(assert, "demo", "passerby");
done();
}, 1500);
setTimeout(function () {
ct.mainMenu(assert);
// assert.ok(true, "Employee profile cache: " + QUnit.dump.parse(appCaches.profileCache));
assert.ok(appCaches.profileCacheLength() > 0, "Employee profile cache populated");
fullProfile = appCaches.getProfileByNick('demo');
assert.ok("emp" in fullProfile, "Employee profile cache populated with an employee");
assert.strictEqual(
fullProfile.emp.nick,
"demo",
"Employee profile cache populated with employee \"demo\""
);
assert.ok(true, 'select 1 ("Profile") in mainMenu as demo');
$('input[name="sel"]').val('1');
$('input[name="sel"]').focus();
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
// no AJAX call is initiated, because the profile is already in the cache
// ct.ajaxCallInitiated(assert);
done();
}, 2000);
setTimeout(function() {
// assert.ok(true, $("#mainarea").html());
ct.mainareaForm(assert, 'empProfile');
// FIXME: test for non-existence of entries here, since we are
// just a "passerby"
loggout();
done();
}, 2500);
setTimeout(function () {
ct.loggout(assert);
done();
}, 3000);
});
test_desc = 'Search Dochazka employees - success no wildcard';
// searches for an exact match - the resulting dbrowser will
// contain only one object
QUnit.test(test_desc, function (assert) {
console.log('***TEST*** ' + prefix + test_desc);
var done = assert.async(5);
login({"nam": "root", "pwd": "immutable"});
setTimeout(function () {
ct.login(assert, "root", "admin");
done();
}, 1500);
setTimeout(function () {
var sel;
ct.mainMenu(assert);
ct.mainMenuToMainAdmin(assert);
ct.mainAdminToSearchEmployee(assert);
// enter search term into form
$('#searchEmployee input[name="entry0"]').val('inactive');
sel = ct.getMenuEntry(assert, $('#minimenu').html(), 'Search');
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
start.mmKeyListener($.Event("keydown", {keyCode: 13}));
ct.log(assert, "*** REACHED initiated search for Dochazka employee inactive");
done();
}, 2000);
setTimeout(function () {
var htmlbuf = $("#mainarea").html();
ct.log(assert, htmlbuf);
ct.stack(
assert,
4,
'Reached simpleEmployeeBrowser dbrowser',
'dbrowser',
'simpleEmployeeBrowser'
);
ct.contains(
share/js/dochazka-www/tests/main-empl.js view on Meta::CPAN
". LDAP sync",
);
assert.ok(true, "*** REACHED miniMenu contains substring '. LDAP sync'");
// // choose '0' for ldapSync
// $('input[name="sel"]').val('0');
// $('input[name="sel"]').focus();
// start.mmKeyListener($.Event("keydown", {keyCode: 13}));
// assert.ok(true, "*** REACHED pressed 0 for LDAP sync");
done();
}, 3000);
setTimeout(function () {
// ct.contains(
// assert,
// $('#result').html(),
// "#result html",
// "Employee profile updated from LDAP",
// );
ct.stack(
assert,
4,
'in simpleEmployeeBrowser dbrowser',
share/js/dochazka-www/tests/main-empl.js view on Meta::CPAN
assert,
2,
'After selecting X in ldapLookup',
'dmenu',
'mainAdmin'
);
assert.ok(true, "*** REACHED mainEmpl dmenu via X from ldapLookup");
loggout();
done();
}, 5000);
setTimeout(function () {
ct.loggout(assert);
done();
}, 5500);
});
test_desc = 'Masquerading as active, set inactive as supervisor';
QUnit.test(test_desc, function (assert) {
console.log('***TEST*** ' + prefix + test_desc);
var done = assert.async(10);
login({"nam": "root", "pwd": "immutable"});
setTimeout(function () {
ct.login(assert, "root", "admin");
done();
}, 1500);
setTimeout(function () {
var mainarea,
sel;
ct.mainMenu(assert);
assert.strictEqual($('#userbox').text(), 'Employee: root ADMIN');
ct.mainareaForm(assert, 'mainMenu');
sel = ct.getMenuEntry(assert, $('#mainarea').html(), 'Masquerade');
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
// press ENTER -> submit the form
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
ct.stack(assert, 2, 'navigating from mainMenu to searchEmployee', 'dform', 'searchEmployee');
mainarea = $('#mainarea').html();
ct.contains(assert, mainarea, "#mainarea", "Search Dochazka employees");
assert.ok(true, "*** REACHED searchEmployee dform");
done();
}, 2000);
setTimeout(function () {
var minimenu,
sel;
// enter a search string
$('input[id="sEnick"]').val('act%');
assert.strictEqual($('input[id="sEnick"]').val(), 'act%', "Search string entered into form");
minimenu = $('#minimenu').html();
ct.contains(assert, minimenu, "searchEmployee miniMenu", ". Search");
sel = ct.getMenuEntry(assert, minimenu, 'Search')
ct.log(assert, "searchEmployee miniMenu contains Search as selection " + sel);
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
done();
}, 2500);
setTimeout(function () {
var mainarea,
minimenu,
sel;
ct.stack(assert, 3, 'browsing results of successful Dochazka employee search',
'dbrowser', 'masqueradeCandidatesBrowser');
assert.ok(true, "*** REACHED masqueradeCandidatesBrowser dform");
mainarea = $('#mainarea').html();
minimenu = $('#minimenu').html();
ct.contains(assert, mainarea, "Masquerade candidates browser", 'Masquerade candidates');
ct.contains(assert, minimenu, "Masquerade selection in miniMenu", ". Masquerade");
share/js/dochazka-www/tests/main-empl.js view on Meta::CPAN
// select Masquerade (first time - begin)
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
// press ENTER -> submit the form
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
ct.stack(assert, 1, 'selected Masquerade in masqueradeCandidatesBrowser', 'dmenu', 'mainMenu');
assert.strictEqual($('#userbox').text(), '!!! Employee: active (MASQUERADE) !!!');
assert.ok(true, "*** REACHED masquerading as employee \"active\"");
done();
}, 3000);
setTimeout(function () {
ct.mainMenuSelectEmpProfile(assert);
done();
}, 3500);
setTimeout(function () {
var htmlbuf,
sel;
// mainMenu, myProfileAction, empProfile
ct.stack(assert, 3, 'navigating from mainMenu to empProfile', 'dform', 'empProfile');
ct.mainareaForm(assert, 'empProfile');
ct.contains(assert, $('#mainarea').html(), "#mainarea", "Employee profile");
ct.log(assert, "*** REACHED empProfile dform");
// Whatever the supervisor is, delete it
sel = ct.getMenuEntry(assert, $('#minimenu').html(), "Remove supervisor");
assert.ok(true, "Selection is " + sel);
share/js/dochazka-www/tests/main-empl.js view on Meta::CPAN
);
ct.mainareaForm(assert, "empProfileSetSuperConfirm");
sel = ct.getMenuEntry(assert, $('#minimenu').html(), 'Yes, I really do');
assert.ok(true, "Selection is " + sel);
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
// press ENTER -> submit the form
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
done();
}, 4000);
setTimeout(function () {
var sel;
ct.stack(
assert,
3,
'back in empProfile after confirming deletion of supervisor',
'dform',
'empProfile'
);
ct.log(assert, $('#mainarea').html());
ct.contains(
share/js/dochazka-www/tests/main-empl.js view on Meta::CPAN
ct.stack(assert, 4, 'selected Set supervisor in empProfile', 'dform', 'searchEmployee');
// enter search term into form
$('#searchEmployee input[name="entry0"]').val('inactive');
sel = ct.getMenuEntry(assert, $('#minimenu').html(), 'Search');
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
start.mmKeyListener($.Event("keydown", {keyCode: 13}));
assert.ok(true, "*** REACHED initiated search for Dochazka employee inactive");
done();
}, 4500);
setTimeout(function () {
var htmlbuf,
sel;
ct.stack(
assert,
5,
'Reached simpleEmployeeBrowser dbrowser',
'dbrowser',
'setSupervisorBrowser'
);
htmlbuf = $("#mainarea").html(),
share/js/dochazka-www/tests/main-empl.js view on Meta::CPAN
);
ct.mainareaForm(assert, "empProfileSetSuperConfirm");
sel = ct.getMenuEntry(assert, $('#minimenu').html(), 'Yes, I really do');
assert.ok(true, "Selection is " + sel);
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
// press ENTER -> submit the form
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
done();
}, 5000);
setTimeout(function () {
var sel;
ct.stack(
assert,
3,
'back in empProfile after confirming selection of supervisor',
'dform',
'empProfile'
);
ct.log(assert, $('#mainarea').html());
ct.contains(
share/js/dochazka-www/tests/main-empl.js view on Meta::CPAN
// turn off masquerade
sel = ct.getMenuEntry(assert, $('#mainarea').html(), 'Masquerade');
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
// press ENTER -> submit the form
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
assert.strictEqual($('#userbox').text(), 'Employee: root ADMIN');
loggout();
done();
}, 5500);
setTimeout(function () {
ct.loggout(assert);
done();
}, 6000);
});
};
});
share/js/dochazka-www/tests/main-menu.js view on Meta::CPAN
return function () {
test_desc = 'login, and immediately logout';
QUnit.test(test_desc, function (assert) {
console.log('***TEST*** ' + prefix + test_desc);
var done = assert.async(3),
mainarea,
htmlbuf,
cu;
login({"nam": "root", "pwd": "immutable"});
setTimeout(function () {
ct.login(assert, "root", "admin");
done();
}, 1000);
setTimeout(function () {
ct.mainMenu(assert);
loggout();
done();
}, 1500);
setTimeout(function () {
ct.loggout(assert);
done();
}, 2000);
});
test_desc = 'masquerade as employee "active"';
QUnit.test(test_desc, function (assert) {
console.log('***TEST*** ' + prefix + test_desc);
var done = assert.async(5),
mainarea,
match,
minimenu,
htmlbuf,
sel,
cu;
assert.expect(66);
login({"nam": "root", "pwd": "immutable"});
setTimeout(function () {
ct.login(assert, "root", "admin");
done();
}, 1000);
setTimeout(function () {
ct.mainMenu(assert);
assert.strictEqual($('#userbox').text(), 'Employee: root ADMIN');
ct.mainareaForm(assert, 'mainMenu');
sel = ct.getMenuEntry(assert, $('#mainarea').html(), 'Masquerade');
if (! coreLib.isInteger(sel)) {
console.log("BAILING OUT");
assert.ok(false, "BAILING OUT");
done();
}
console.log("Main menu contains Masquerade as selection " + sel);
share/js/dochazka-www/tests/main-menu.js view on Meta::CPAN
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
// press ENTER -> submit the form
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
ct.stack(assert, 2, 'navigating from mainMenu to searchEmployee', 'dform', 'searchEmployee');
mainarea = $('#mainarea').html();
ct.contains(assert, mainarea, "#mainarea", "Search Dochazka employees");
assert.ok(true, "*** REACHED searchEmployee dform");
done();
}, 2000);
setTimeout(function () {
// enter a search string
$('input[id="sEnick"]').val('act%');
assert.strictEqual($('input[id="sEnick"]').val(), 'act%', "Search string entered into form");
minimenu = $('#minimenu').html();
ct.contains(assert, minimenu, "searchEmployee miniMenu", ". Search");
sel = ct.getMenuEntry(assert, minimenu, 'Search')
ct.log(assert, "searchEmployee miniMenu contains Search as selection " + sel);
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
}, 2500);
setTimeout(function () {
ct.stack(assert, 3, 'browsing results of successful Dochazka employee search',
'dbrowser', 'masqueradeCandidatesBrowser');
assert.ok(true, "*** REACHED masqueradeCandidatesBrowser dform");
mainarea = $('#mainarea').html();
minimenu = $('#minimenu').html();
ct.contains(assert, mainarea, "Masquerade candidates browser", 'Masquerade candidates');
ct.contains(assert, minimenu, "Masquerade selection in miniMenu", ". Masquerade");
assert.ok(true, "*** REACHED Masquerade selection in masqueradeCandidatesBrowser miniMenu");
sel = ct.getMenuEntry(assert, minimenu, 'Masquerade');
assert.ok(true, "masqueradeCandidatesBrowser miniMenu contains Masquerade as selection " + sel);
// select Masquerade (first time - begin)
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
// press ENTER -> submit the form
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
ct.stack(assert, 1, 'selected Masquerade in masqueradeCandidatesBrowser', 'dmenu', 'mainMenu');
assert.strictEqual($('#userbox').text(), '!!! Employee: active (MASQUERADE) !!!');
assert.ok(true, "*** REACHED masquerading as employee \"active\"");
done();
}, 3000);
setTimeout(function () {
ct.mainareaForm(assert, 'mainMenu');
htmlbuf = $('#mainarea').html();
sel = ct.getMenuEntry(assert, htmlbuf, 'Masquerade');
assert.ok(true, "Main menu contains Masquerade as selection " + sel);
// select Masqerade (second time - end)
$('input[name="sel"]').val(sel);
$('input[name="sel"]').focus();
// press ENTER -> submit the form
$('input[name="sel"]').trigger($.Event("keydown", {keyCode: 13}));
assert.strictEqual($('#userbox').text(), 'Employee: root ADMIN');
loggout();
done();
}, 3500);
setTimeout(function () {
ct.loggout(assert);
done();
}, 4000);
});
};
});
share/js/dochazka-www/tests/main-sched.js view on Meta::CPAN
var prefix = "dochazka-www: ",
test_desc;
return function () {
test_desc = 'schedule menu appears';
QUnit.test(test_desc, function (assert) {
console.log('***TEST*** ' + prefix + test_desc);
var done = assert.async(3);
login({"nam": "root", "pwd": "immutable"});
setTimeout(function () {
ct.login(assert, "root", "admin");
done();
}, 1000);
setTimeout(function () {
ct.mainMenu(assert);
ct.mainMenuToMainSched(assert);
loggout();
done();
}, 1500);
setTimeout(function () {
ct.loggout(assert);
done();
}, 2200);
});
test_desc = 'schedule lookup - bogus ID';
QUnit.test(test_desc, function (assert) {
console.log('***TEST*** ' + prefix + test_desc);
var done = assert.async(4);
login({"nam": "root", "pwd": "immutable"});
setTimeout(function () {
ct.login(assert, "root", "admin");
done();
}, 1000);
setTimeout(function () {
var entry1;
ct.mainMenu(assert);
ct.mainMenuToMainSched(assert);
ct.mainSchedToSchedLookup(assert);
entry1 = $('form#schedLookup input[name="entry1"]');
entry1.val('BOGOSITYWHELP');
assert.strictEqual(entry1.val(), 'BOGOSITYWHELP', "Form filled out with bogus data");
$('input[name="sel"]').val('1');
$('input[name="sel"]').focus();
start.mmKeyListener($.Event("keydown", {keyCode: 13}));
assert.ok(true, "*** REACHED schedLookup form submitted");
ct.ajaxCallInitiated(assert);
done();
}, 1500);
setTimeout(function () {
var htmlbuf = $("#result").html();
ct.stack(assert, 3, 'submitting bogus schedLookup form', 'dform', 'schedLookup');
assert.ok(htmlbuf, "#result html: " + htmlbuf);
ct.contains(assert, htmlbuf, "#result", 'URI does not match a known resource');
$('input[name="sel"]').val('x');
$('input[name="sel"]').focus();
start.mmKeyListener($.Event("keydown", {keyCode: 13}));
ct.stack(assert, 2, 'selecting "x" in schedLookup form', 'dmenu', 'mainSched');
loggout();
done();
}, 2500);
setTimeout(function () {
ct.loggout(assert);
done();
}, 3000);
});
};
});