Apache-SWIT/t/545_session.t
use strict;
use warnings FATAL => 'all';
use Test::More tests => 12;
use Test::TempDatabase;
use File::Slurp;
use Apache::SWIT::Test::Utils;
use Apache::SWIT::Maker::Conversions;
use Apache::SWIT::Maker::Manifest;
use YAML;
Apache::SWIT::Test::ModuleTester::Drop_Root();
BEGIN { use_ok('Apache::SWIT::Test::ModuleTester'); }
my $mt = Apache::SWIT::Test::ModuleTester->new({ root_class => 'TTT' });
chdir $mt->root_dir;
$mt->make_swit_project;
ok(-f 'LICENSE');
$mt->replace_in_file('lib/' . $mt->module_dir . "/Session.pm", '1', <<'ENDM');
sub access_handler {
my ($class, $r) = @_;
my $res = $class->SUPER::access_handler($r);
return ($r->pnotes('SWITSession')->get_deny && $r->uri !~ qr/index/)
? Apache2::Const::FORBIDDEN() : $res;
}
__PACKAGE__->add_var($ENV{KOOKOO_VAR});
1;
ENDM
$mt->replace_in_file('lib/TTT/UI/Index.pm', "return \\\"", <<'ENDM');
Apache2::Request->new($r->pnotes('SWITSession')->request)->param('sss');
$r->pnotes('SWITSession')->set_deny(1);
return "
ENDM
append_file('lib/TTT/UI/Index.pm', <<'ENDS');
__PACKAGE__->ht_make_root_class->ht_add_widget(::HTV."::DropDown", "dd"
, default_value => []);
TTT::UI::Index::Root->ht_add_widget(::HTV."::PasswordBox", "pb");
TTT::UI::Index::Root->ht_add_widget(::HTV."::CheckBox", $ENV{KOOKOO_VAR}
, default_value => [ 1 ]);
ENDS
$mt->replace_in_file('t/dual/001_load.t', '=> 11', '=> 17');
append_file('t/dual/001_load.t', <<'ENDM');
is($ENV{KOOKOO_VAR}, 'deny');
$t->ok_ht_index_r(make_url => 1, ht => { first => '' });
is($t->session->request->uri, '/ttt/index/r');
$t->ht_index_u(ht => {});
use Apache::SWIT::Test::Utils;
$ENV{ASTU_WAIT} = 0;
ASTU_Wait("hoo");
$t->ok_get('www/main.css', 403);
$t->with_or_without_mech_do(1, sub {
ok(glob('t/logs/kids_are_clean.*'));
});
# check fake Apache2::Request: new simply passes stuff through
# useful for Session funcs: they may need to create new one.
is(Apache2::Request->new(26), 26);
ENDM
my $tree = YAML::LoadFile('conf/swit.yaml');
push @{ $tree->{generators} }, 'TTT::Gen';
$tree->{env_vars}->{KOOKOO_VAR} = "deny";
YAML::DumpFile('conf/swit.yaml', $tree);
swmani_write_file("lib/" . conv_class_to_file("TTT::Gen")
, conv_module_contents("TTT::Gen", <<'ENDM'));
use base 'Apache::SWIT::Maker::GeneratorBase';
use File::Slurp;
sub httpd_conf_start {
my ($self, $res) = @_;
append_file('blib/conf/do_swit_startups.pl', "# dss comment\n");
return "$res\n# httpd comment\n";
}
ENDM
my $res = `perl Makefile.PL && make test_dual 2>&1`;
is($?, 0) or ASTU_Wait($res);
like($res, qr/success/) or ASTU_Wait();
like(read_file('blib/conf/httpd.conf'), qr/httpd comment/);
like(read_file('blib/conf/do_swit_startups.pl'), qr/dss comment/);
is_deeply([ glob('t/logs/kids_are_clean.*') ], []);
# check that we have Dumper output in direct testing
append_file('t/dual/001_load.t', <<'ENDM');
$t->ok_ht_index_r(make_url => 1, ht => { first => 'momo' });
ENDM
$res = `make test_direct 2>&1`;
isnt($?, 0) or ASTU_Wait($res);
like($res, qr/VAR1.*first/ms);
like($res, qr/Failed at.*001_load.t line 47.*001_load.t line 47/ms);
$res = `make test_apache 2>&1`;
isnt($?, 0) or ASTU_Wait($res);
unlike($res, qr/VAR1 = /ms);
chdir '/';