#!/usr/bin/perl
use Test::WWW::Mechanize::CGIApp;
# use HTML::TreeBuilder;
use Data::Dumper;
use strict;
use warnings;
use Test::More tests => 60; # use Test::More 'no_plan';
=begin # tests:
1) submit new user_location
2) change user_location to unique
3) get existing user from users table
4) register new user
5) test omission of each required field - skipped pending fix
6) retrieve new user, check field names & default permissions
7) change new user permissions - skipped pending fix
8) edit new username to another unique value & check new values
9) edit edited new username to a non-unqiue value & check failure
10) edit last_name to match new username & check success
11) register new user with same name as already exists
=cut
BEGIN {
require 't/test-lib.pl';
}
my $mech = get_mech();
do_login();
my $dbh;
eval {
$dbh = get_dbh() or die 'no database handle recieved from get_dbh';
};
warn $@ if $@;
# need to drop & re-create following tables:
drop_and_recreate('user_locations');
$mech->get_ok('/admin/user_location'); # print_and_exit();
$mech->content_contains(
'Admin » User Locations',
'requested page loaded ok',
);
$mech->submit_form(
fields => {
location_name => 'Bradford',
active => 'no',
}
); # print_and_exit();
foreach ( qw/Bradford/ ) { # RAE admin@bradford.net
$mech->content_contains(
qq!value="$_"!,
'input field value detected ok',
);
}
# change all fields:
$mech->get_ok('/admin/user_location/edit/1'); # print_and_exit();
$mech->content_contains(
'Admin » Edit User Location',
'requested page loaded ok',
);
$mech->submit_form(
fields => {
location_name => 'Leeds',
active => 'yes',
}
);
foreach ( qw/Bradford/ ) { # RAE admin@bradford.net
$mech->content_lacks(
qq!value="$_"!,
'ok: old field value not detected',
);
}
foreach ( qw/Leeds/ ) { # RR8 admin@leeds.net
$mech->content_contains(
qq!value="$_"!,
'new field value detected ok',
);
}
$mech->get_ok('/admin/user'); # print_and_exit();
### check title:
$mech->content_contains(
'User Manager',
'title matches',
); # print_and_exit();
# get user admin:
$mech->submit_form(fields => { id => 1 });
### check default settings:
$mech->content_contains(
'DEFAULT',
'OK: default settings used',
); # print_and_exit();
### check username selected:
is( $mech->value('userID', 1), 'ADMIN', 'OK: expected username found'); # print_and_exit();
my %new_user = (
username => 'smith',
last_name => 'smith',
first_name => 'alan',
password => 'passwd',
user_location_id => 1,
designation => 'bms',
email => 'bms@somewhere.com',
group_id => 2,
active => 'yes',
);
{
# register new user:
$mech->follow_link_ok({ text => 'reset/new user', n => 1 }); # print_and_exit();
### check page loaded OK:
$mech->content_contains(
'
Select a registered user or create new user:
',
'OK: page loaded',
); # print_and_exit();;
# test each required field:
foreach my $field ( keys %new_user ) { # warn $field;
# create temp hash with one field missing:
my %tmp_user = %new_user; # clone %new_user
$tmp_user{$field} = undef; # warn Dumper \%tmp_user;
# jump to correct form:
$mech->form_number(2);
$mech->submit_form( fields => \%tmp_user );
has_dfv_errors();
}
# jump to correct form & submit intact %new_user:
$mech->form_number(2);
$mech->submit_form( fields => \%new_user ); # print_and_exit();
# check we have success message:
$mech->content_contains(
get_messages('admin')->{user}->{create_success},
'OK: new user created successfully',
); # print_and_exit();
# check we can retreive new record
# no need - changed update_user_details() to automatically retrieve:
# $mech->submit_form(fields => { id => 2 }); # print_and_exit();
my $i=0;
foreach( qw/username last_name first_name designation email/ ) { # others diff. format
$i++;
# check we have new user fields:
$mech->content_contains(
qq!value="$new_user{$_}"!,
"OK: new user field [$i] detected",
); # print_and_exit();
}
### check default settings:
$mech->content_contains(
'DEFAULT',
'OK: default settings used',
); # print_and_exit();
}
# change user_permissions:
SKIP: {
skip('cannot easily test which checkboxes are checked', 0);
$mech->follow_link_ok({ text => 'change user permissions', n => 1 }); # print_and_exit();
}
my $new_username = 'wood';
# edit username - change to one that doesn't exist:
{
$mech->get_ok('/admin/user'); # print_and_exit();
# get new user:
$mech->submit_form(fields => { id => 2 }); # print_and_exit();
# check we have correct username:
$mech->content_contains(
qq!name="username" value="$new_user{username}"!,
'OK: new user loaded successfully',
); # print_and_exit();
$mech->form_number(2);
# change username to one that doesn't exist:
$mech->field('username', $new_username);
$mech->submit_form(); # print_and_exit();
# check it succeeded:
$mech->content_contains(
get_messages('admin')->{user}->{edit_success},
'OK: username change successful',
); # print_and_exit();
$mech->content_contains(
qq!name="username" value="$new_username"!,
'OK: username change successful',
);
my $i=0;
# check all rest of fields still present:
foreach( qw/last_name first_name designation email/ ) { # others diff. format
$i++;
# check we have new user fields:
$mech->content_contains(
qq!value="$new_user{$_}"!,
"OK: new user field [$i] detected",
); # print_and_exit();
}
} # print_and_exit();
# now try to one that already exists:
{
$mech->form_number(2);
# change username to one that exists:
$mech->field('username', 'admin');
$mech->submit_form(); # print_and_exit();
# check it failed validation:
has_dfv_errors();
}
# check we can edit non-username field:
{
$mech->back; # print_and_exit();
$mech->form_name('user_update');
# change last_name to match username:
$mech->field('username', $new_username); # needs resetting to original value
$mech->field('last_name', $new_username);
$mech->submit_form(); # print_and_exit();
# check it succeeded:
lacks_dfv_errors();
$mech->content_contains(
qq!name="last_name" value="$new_username"!,
'OK: new last_name detected',
); # print_and_exit();
my $i=0;
# check all rest of fields still present:
$mech->content_contains(
qq!name="username" value="$new_username"!,
'OK: expected username detected',
); # print_and_exit();
foreach( qw/first_name designation email/ ) { # others diff. format
$i++;
# check we have new user fields:
$mech->content_contains(
qq!value="$new_user{$_}"!,
"OK: new user field [$i] detected",
); # print_and_exit();
}
}
# check we can edit all user fields:
{
my %edit_user = (
last_name => 'editlastname',
first_name => 'editfirstname',
email => 'editnewuser@email.net',
designation => 'enquirer',
);
lacks_dfv_errors();
# select 'new user' form:
$mech->form_number(2);
$mech->submit_form(fields => \%edit_user); # print_and_exit();
# check it succeeded:
$mech->content_contains(
get_messages('admin')->{user}->{edit_success},
'OK: username change successful',
); # print_and_exit();
# check content
$mech->content_contains(
'editlastname',
'OK: last name edited correctly'
);
$mech->content_contains(
'editfirstname',
'OK: firstname edited correctly'
);
$mech->content_contains(
'editnewuser',
'OK: email edited correctly'
);
$mech->content_contains(
'enquirer',
'OK: designation edited correctly'
);
}
{ # duplicate first & last name:
my %duplicate_user = (
username => 'woody', # different to existing
last_name => 'editlastname', # already exists
first_name => 'editfirstname', # already exists
password => 'passwd',
user_location_id => 1,
designation => 'bms',
email => 'user@somewhere.com',
group_id => 2,
active => 'yes',
);
$mech->get_ok('/admin/user'); # print_and_exit();
$mech->form_number(2);
$mech->submit_form( fields => \%duplicate_user ); # print_and_exit();
# check it failed validation:
has_dfv_errors();
$mech->content_contains(
'combination of first & last names already used',
'OK: duplicate first & last names detected'
);
# try to re-submit with duplicated username (as might happen with duplicate lname):
$duplicate_user{last_name} = $duplicate_user{username} = 'wood'; # already exists
$mech->form_number(2);
$mech->submit_form( fields => \%duplicate_user ); # print_and_exit();
has_dfv_errors();
# change username to unique, have unique fname + lname, should be OK:
$duplicate_user{username} = 'woody'; # doesn't already exist
$mech->form_number(2);
$mech->submit_form( fields => \%duplicate_user ); # print_and_exit();
# check it succeeded:
lacks_dfv_errors();
$mech->content_contains(
get_messages('admin')->{user}->{create_success},
'OK: new user created successfully',
); # print_and_exit();
}
# do_logout(); logout link not available for admin function