Refactoring: Parameterredesign SL::Controller::Base::render und SL::Presenter::render
[kivitendo-erp.git] / t / controllers / base / render.t
1 use strict;
2 use Test::Exception;
3 use Test::More;
4 use Test::Output;
5
6 use lib 't';
7 use Support::TestSetup;
8
9 use SL::Presenter;
10
11 no warnings 'uninitialized';
12
13 Support::TestSetup::login();
14
15 sub reset_test_env {
16   $ENV{HTTP_USER_AGENT} = 'Perl Tests';
17
18   $::request       = {
19     cgi => CGI->new({}),
20     layout => SL::Layout::Javascript->new,
21   };
22
23   $::myconfig{stylesheet} = 'javascript';
24
25   delete @{ $::form }{qw(header footer)};
26 }
27
28 my $ctrl = SL::Controller::Base->new;
29
30 # Passing invalid parameters:
31 throws_ok { $ctrl->render(\'dummy', { unknown => 1 }) }    qr/unsupported option/i,                     'string ref, unknown parameter';
32 throws_ok { $ctrl->render(\'dummy', { type => "excel" }) } qr/unsupported type/i,                       'string ref, unsupported "type"';
33 throws_ok { $ctrl->render({}) }                            qr/unsupported.*template.*reference.*type/i, 'string ref, unsupported template argument reference type';
34 throws_ok { $ctrl->render('does/not/exist') }              qr/template.*file.*not.*found/i,             'non-existing template file name';
35
36 # No output:
37 stdout_is { $ctrl->render(\'Hallo', { output => 0 }) } '', 'no output';
38
39 # Type of return value:
40 is(ref($ctrl->render(\'Hallo', { output => 0 })), 'SL::Presenter::EscapedText', 'render returns SL::Presenter::EscapedText');
41
42 # Actual return value for string ref parameters (enforce stringification from SL::Presenter::EscapedText before comparison):
43 is("" . $ctrl->render(\'Hallo [% world %]', { output => 0 }, world => 'Welt'),               'Hallo Welt',        'render string ref, no output');
44 is("" . $ctrl->render(\'Hallo [% world %]', { output => 0, process => 0 }, world => 'Welt'), 'Hallo [% world %]', 'render string ref, no output, no processing');
45 is("" . $ctrl->render(\'Hallo [% world %]', { output => 0, type => 'js' }, world => 'Welt'), 'Hallo Welt',        'render string ref, no output, different type');
46
47 # Actual return value for template file name parameters (enforce stringification from SL::Presenter::EscapedText before comparison):
48 is("" . $ctrl->render('t/render', { output => 0 }, world => 'Welt'),                      "Hallo Welt\n",                                       'render template file, no args');
49 is("" . $ctrl->render('t/render', { output => 0, process => 0 }, world  => 'Welt'),   "[\% USE HTML \%]Hallo [\% HTML.escape(world) \%]\n", 'render template file, no processing');
50 is("" . $ctrl->render('t/render', { output => 0, type => 'js' }, thingy => 'jungle'), "Welcome to the jungle\n",                            'render template file, different type');
51
52 # No HTTP header in screen output:
53 reset_test_env();
54 stdout_unlike { $ctrl->render(\'Hallo [% world %]', { header => 0 }, world => 'Welt') } qr/content-type/i, 'no HTTP header with header=0';
55
56 reset_test_env();
57 stdout_unlike { $ctrl->render(\'Hallo [% world %]', { header => 0 }, world => 'Welt') } qr/<html>/i,       'no HTML header with header=0';
58
59 # With HTTP header in screen output:
60 reset_test_env();
61 stdout_like { $ctrl->render(\'Hallo [% world %]', world => 'Welt') } qr/content-type/i, 'HTTP header with header=1';
62
63 reset_test_env();
64 stdout_like { $ctrl->render(\'Hallo [% world %]', world => 'Welt') } qr/<html>/i,       'HTML header with header=1';
65
66 # Menu yes/no:
67 reset_test_env();
68 stdout_like { $ctrl->render(\'Hallo [% world %]', world => 'Welt') } qr/<table.*class=.*menunew/i, 'HTML header & menu with header=1';
69
70 reset_test_env();
71 stdout_unlike { $ctrl->render(\'Hallo [% world %]', { header => 0 }, world => 'Welt') } qr/<table.*class=.*menunew/i, 'HTML header & menu with header=0';
72
73 reset_test_env();
74 stdout_unlike { $ctrl->render(\'Hallo [% world %]', { layout => 0 }, world => 'Welt') } qr/<table.*class=.*menunew/i, 'HTML header & menu with layout=0';
75
76 done_testing;
77
78 1;