lemonldap-ng/lemonldap-ng-portal/t/50-Lemonldap-NG-Portal-Menu.t
2012-02-28 22:52:36 +00:00

145 lines
4.0 KiB
Perl

# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal.t'
#########################
# change 'tests => 1' to 'tests => last_test_to_print';
use Test::More tests => 9;
BEGIN { use_ok('Lemonldap::NG::Portal::Menu') }
#########################
# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.
$ENV{REQUEST_METHOD} = 'GET';
# Build portal
my $p = Lemonldap::NG::Portal::Simple->new(
{
globalStorage => 'Apache::Session::File',
domain => 'example.com',
error => 0,
applicationList => {},
locationRules => {
'test.example.com' => {
'default' => 'deny',
'^/ok' => '$uid eq "coudot"',
'^/nok' => '$uid eq "toto"',
},
},
cfgNum => 42,
sessionInfo => { uid => "coudot", },
}
);
# Init menu
$p->menuInit();
# Test that display modules is an array
ok( ref $p->{menuDisplayModules} eq 'ARRAY', 'Modules displayed' );
# Test that application loop is an array
my $appLoop = $p->appslist();
ok( ref $appLoop eq 'ARRAY', 'Application loop' );
# Create an application list
$p->{applicationList} = {
test => {
type => 'category',
catname => 'Test',
testautook => {
type => 'application',
options => {
uri => 'http://test.example.com/ok/login.php',
name => 'Test application',
display => 'auto',
},
},
testautonok => {
type => 'application',
options => {
uri => 'http://test.example.com/nok/login.php',
name => 'Test application',
display => 'auto',
},
},
teston => {
type => 'application',
options => {
uri => 'http://test.example.com/app/login.php',
name => 'Test application',
display => 'on',
},
},
testoff => {
type => 'application',
options => {
uri => 'http://test.example.com/app/login.php',
name => 'Test application',
display => 'off',
},
},
},
empty => {
type => 'category',
catname => 'Test',
test2off => {
type => 'application',
options => {
uri => 'http://test.example.com/app/login.php',
name => 'Test application',
display => 'off',
},
},
}
};
# Reload application list
$appLoop = $p->appslist();
# Check empty category
# Check display off and on
# Check display auto ok and nok
my $emptyCat = 0;
my $displayOn = 0;
my $displayOff = 0;
my $displayOk = 0;
my $displayNok = 0;
foreach (@$appLoop) {
$emptyCat++ if $_->{catid} eq "empty";
if ( $_->{catid} eq "test" ) {
foreach ( @{ $_->{'applications'} } ) {
$displayOn++ if $_->{appid} eq "teston";
$displayOff++ if $_->{appid} eq "testoff";
$displayOk++ if $_->{appid} eq "testautook";
$displayNok++ if $_->{appid} eq "testautonok";
}
}
}
ok( $emptyCat == 0, 'Hide empty category' );
ok( $displayOn != 0, 'Display on' );
ok( $displayOff == 0, 'Display off' );
ok( $displayOk != 0, 'Display auto ok' );
ok( $displayNok == 0, 'Display auto nok' );
# Connect as another user with different rights
$p->{sessionInfo}->{uid} = "toto";
my $appLoop2 = $p->appslist();
my $displayOk2 = 0;
foreach (@$appLoop2) {
if ( $_->{catid} eq "test" ) {
foreach ( @{ $_->{'applications'} } ) {
$displayOk2++ if $_->{appid} eq "testautonok";
}
}
}
ok( $displayOk2 != 0, 'Display auto ok for different user' );