#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use Labyrinth::Test::Harness;
use Test::More tests => 44;
my $test_vars = {
'testing' => '0',
'copyright' => '2013-2014 Me',
'cgiroot' => 'http:/',
'ddmonths' => '<select id="month" name="month"><option value="0">Select Month</option><option value="1">January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select>',
'administrator' => 'admin@example.com',
'pid' => 4,
'timeout' => '3600',
'docroot' => 'http:/',
'iname' => 'Test Site',
'blank' => 'images/blank.png',
'cookiename' => 'session',
'webdir' => 't/_DBDIR/html',
'iid' => 0,
'ipaddr' => '',
'cgidir' => 't/_DBDIR/cgi-bin',
'maxpicwidth' => '500',
'htmltags' => '+img',
'webpath' => '',
'month' => '',
'lastpagereturn' => '0',
'autoguest' => '1',
'realm' => 'public',
'mailhost' => '',
'maxpasslen' => '20',
'minpasslen' => '6',
'script' => '',
'requests' => 't/_DBDIR/cgi-bin/config/requests',
'cgipath' => '/cgi-bin',
'basedir' => 't/_DBDIR',
'host' => '',
'icode' => 'testsite',
'ddyears' => '<select id="year" name="year"><option value="0">Select Year</option><option value="2014" selected="selected">2014</option></select>',
'evalperl' => '1',
'randpicwidth' => '400',
'year' => '2014'
};
my $test_data = {
add => {
'ddmonths' => '<select id="month" name="month"><option value="1">January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select>',
'ddyears' => '<select id="year" name="year"><option value="2014">2014</option></select>',
'senarios' => [
{
'title' => 'Photos Section',
'id' => 2
}
]
},
edit1 => {
'writeable' => 0,
'senarios' => [
{
'title' => 'Photos Section',
'id' => 2
}
],
'directory' => 0,
'ddmonths' => '<select id="month" name="month"><option value="1">January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select>',
'ddpages' => '<select id="parent" name="parent"><option value="0">Select Gallery Page</option><option value="3">Test Page</option><option value="2">Home Page</option><option value="1">Archive</option></select>',
'executable' => 0,
'ddyears' => '<select id="year" name="year"><option value="2014">2014</option></select>',
'exists' => 0,
'readable' => 0
},
edit2 => {
'month' => '8',
'area' => '1',
'directory' => 0,
'ddmonths' => '<select id="month" name="month"><option value="1">January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8" selected="selected">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select>',
'ddpages' => '<select id="parent" name="parent"><option value="0">Select Gallery Page</option><option value="2">Home Page</option><option value="1">Archive</option></select>',
'summary' => '',
'executable' => 0,
'pageid' => '3',
'readable' => 0,
'parent' => '',
'writeable' => 0,
'path' => 'photos/20050830',
'hide' => '',
'ddyears' => '<select id="year" name="year"><option value="2014">2014</option></select>',
'title' => 'Test Page',
'orderno' => '0',
'exists' => 0,
'year' => '2005'
},
edit3 => {
'month' => '8',
'area' => '1',
'directory' => 0,
'ddmonths' => '<select id="month" name="month"><option value="1">January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8" selected="selected">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select>',
'ddpages' => '<select id="parent" name="parent"><option value="0">Select Gallery Page</option><option value="2">Home Page</option><option value="1">Archive</option></select>',
'summary' => '',
'executable' => 0,
'pageid' => '3',
'readable' => 0,
'parent' => '',
'writeable' => 0,
'path' => 'photos/20050830',
'hide' => '',
'ddyears' => '<select id="year" name="year"><option value="2014">2014</option></select>',
'title' => 'Test Page',
'orderno' => '0',
'exists' => 0,
'year' => '2005'
},
photos1 => {
},
photos2 => [
{
'dimensions' => '800x600',
'photoid' => '1',
'thumb' => '20050830/dscf5903-thumb.jpg',
'image' => '20050830/dscf5903.jpg',
'tagline' => undef,
'cover' => '1',
'hide' => '0',
'pageid' => '3',
'metadata' => undef,
'orderno' => '1'
},
{
'dimensions' => '800x600',
'photoid' => '2',
'thumb' => '20050830/dscf5904-thumb.jpg',
'image' => '20050830/dscf5904.jpg',
'tagline' => undef,
'cover' => '0',
'hide' => '0',
'pageid' => '3',
'metadata' => undef,
'orderno' => '2'
}
],
photos3 => [
{
'dimensions' => '800x600',
'photoid' => '2',
'thumb' => '20050830/dscf5904-thumb.jpg',
'image' => '20050830/dscf5904.jpg',
'tagline' => undef,
'cover' => '0',
'hide' => '0',
'pageid' => '3',
'metadata' => undef,
'orderno' => '1'
},
{
'dimensions' => '800x600',
'photoid' => '1',
'thumb' => '20050830/dscf5903-thumb.jpg',
'image' => '20050830/dscf5903.jpg',
'tagline' => undef,
'cover' => '1',
'hide' => '0',
'pageid' => '3',
'metadata' => undef,
'orderno' => '2'
}
],
admin1 => {
'month' => '8',
'area' => '1',
'directory' => 0,
'ddmonths' => '<select id="month" name="month"><option value="1">January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8" selected="selected">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select>',
'ddpages' => '<select id="parent" name="parent"><option value="0">Select Gallery Page</option><option value="2">Home Page</option><option value="1">Archive</option></select>',
'summary' => '',
'executable' => 0,
'pageid' => '3',
'readable' => 0,
'parent' => '',
'writeable' => 0,
'path' => 'photos/20050830',
'hide' => '',
'ddyears' => '<select id="year" name="year"><option value="2014">2014</option></select>',
'title' => 'Test Page',
'orderno' => '0',
'exists' => 0,
'year' => '2005'
},
admin2 => {
'parent' => 0,
'area' => 2,
'month' => '10',
'path' => 'photos/20141112T215303',
'summary' => 'blah',
'hide' => 0,
'pageid' => '4',
'title' => 'A New Page',
'year' => '2014'
},
admin3 => {
'parent' => 0,
'area' => 2,
'month' => '1',
'path' => 'photos/20050830',
'summary' => 'blah blah',
'hide' => 1,
'pageid' => '2',
'title' => 'An Updated Page',
'orderno' => '2',
'year' => '2012'
},
admin4 => {
'parent' => 0,
'area' => 2,
'month' => '11',
'path' => 'photos/20141111T205337',
'summary' => '',
'hide' => 0,
'pageid' => '3',
'title' => 'Labyrinth2',
'orderno' => '0',
'year' => '2014'
},
};
my @plugins = qw(
Labyrinth::Plugin::Album::Pages
);
# -----------------------------------------------------------------------------
# Set up
my $loader = Labyrinth::Test::Harness->new( keep => 0 );
my $dir = $loader->directory;
my $res = $loader->prep(
sql => [ "$dir/cgi-bin/db/plugin-base.sql","t/data/test-base.sql" ],
files => {
't/data/phrasebook.ini' => 'cgi-bin/config/phrasebook.ini'
},
config => {
'INTERNAL' => { logclear => 0 }
}
);
diag($loader->error) unless($res);
SKIP: {
skip "Unable to prep the test environment", 44 unless($res);
$res = is($loader->labyrinth(@plugins),1);
diag($loader->error) unless($res);
# -------------------------------------------------------------------------
# Public methods
$res = is($loader->action('Album::Pages::List'),1);
diag($loader->error) unless($res);
my $vars = $loader->vars;
#diag("vars=".Dumper($vars));
is_deeply($vars,$test_vars,'list variables are as expected');
# -------------------------------------------------------------------------
# Admin Link methods
# test bad access
# refresh instance
$loader->refresh(
\@plugins,
{ loggedin => 0, loginid => 2 } );
# test bad access to admin
for my $call ('Album::Pages::Admin','Album::Pages::Add','Album::Pages::ArchiveEdit','Album::Pages::Edit','Album::Pages::Save','Album::Pages::Delete') {
$res = is($loader->action($call),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
is($vars->{data},undef,"no permission: $call");
}
# Add a page
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1, data => undef } );
# test adding a link
$res = is($loader->action('Album::Pages::Add'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
#diag("add vars=".Dumper($vars->{data}));
is_deeply($vars->{data},$test_data->{add},'add variables are as expected');
# no page given
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1 } );
$res = is($loader->action('Album::Pages::Edit'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
#diag("edit1 vars=".Dumper($vars->{data}));
is_deeply($vars->{data},$test_data->{edit1},"base data provided, when no page given");
#diag("photos1 vars=".Dumper($vars->{photos}));
is($vars->{photos},undef,"base data provided, when no page given");
# basic page given
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1 },
{ pageid => 3 } );
$res = is($loader->action('Album::Pages::Edit'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
#diag("edit2 vars=".Dumper($vars->{data}));
is_deeply($vars->{data},$test_data->{edit2},"page 2 data provided, with no reordering");
#diag("photos2 vars=".Dumper($vars->{photos}));
is_deeply($vars->{photos},$test_data->{photos2},"base data provided, when no page given");
# reorder photo up
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1 },
{ pageid => 3, order => 'up', photoid => 2 } );
$res = is($loader->action('Album::Pages::Edit'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
#diag("edit3 vars=".Dumper($vars->{data}));
is_deeply($vars->{data},$test_data->{edit3},"page 2 data provided, photo up");
#diag("photos3 vars=".Dumper($vars->{photos}));
is_deeply($vars->{photos},$test_data->{photos3},"base data provided, when no page given");
# reorder photo down
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1 },
{ pageid => 3, order => 'down', photoid => 2 } );
$res = is($loader->action('Album::Pages::Edit'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
#diag("edit2 vars=".Dumper($vars->{data}));
is_deeply($vars->{data},$test_data->{edit2},"page 2 data provided, photo down");
#diag("photos2 vars=".Dumper($vars->{photos}));
is_deeply($vars->{photos},$test_data->{photos2},"base data provided, when no page given");
# Admin access
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1 } );
# test basic admin
$res = is($loader->action('Album::Pages::Admin'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
#diag("admin1 vars=".Dumper($vars->{data}));
is_deeply($vars->{data},$test_data->{admin1},'admin list variables are as expected');
# Save a new page
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1, data => undef },
{ 'title' => 'A New Page', 'summary' => 'blah', 'year' => '2014', month => 10, hide => 0, pageid => 0, parent => 0 } );
$res = is($loader->action('Album::Pages::Save'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
is($vars->{thanks_message},'Page saved successfully.','saved successfully');
$res = is($loader->action('Album::Pages::Admin'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
$test_data->{admin2}{path} = $vars->{data}{path};
like($vars->{data}{path},qr!^photos/\d{8}T\d{6}!);
#diag("admin2 vars=".Dumper($vars->{data}));
is_deeply($vars->{data},$test_data->{admin2},'admin list variables are as expected');
# Update an existing page
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1, data => undef },
{ 'title' => 'An Updated Page', 'summary' => 'blah blah', 'year' => '2012', month => 1, hide => 1, pageid => 2, parent => 0 } );
$res = is($loader->action('Album::Pages::Save'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
is($vars->{thanks_message},'Page saved successfully.','saved successfully');
$res = is($loader->action('Album::Pages::Admin'),1);
diag($loader->error) unless($res);
$vars = $loader->vars;
#diag("admin3 vars=".Dumper($vars->{data}));
is_deeply($vars->{data},$test_data->{admin3},'admin list variables are as expected');
# -------------------------------------------------------------------------
# Admin Link Delete/Save methods - as we change the db
# refresh instance
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1, data => undef, thanks_message => undef },
{ pageid => 2 } );
# test delete via admin
$res = is($loader->action('Album::Pages::Delete'),1);
diag($loader->error) unless($res);
is($vars->{thanks_message},undef,'deleted successfully');
# refresh instance
$loader->refresh(
\@plugins,
{ loggedin => 1, loginid => 1, data => undef, thanks_message => undef },
{ pageid => 3 } );
# test delete via admin
$res = is($loader->action('Album::Pages::Delete'),1);
diag($loader->error) unless($res);
is($vars->{thanks_message},'Page deleted successfully.','deleted successfully');
}