summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
Diffstat (limited to 't')
-rw-r--r--t/01-load.t5
-rw-r--r--t/10-form.t65
-rw-r--r--t/11-ledgersmb.t2
-rw-r--r--t/12-menufile.t143
-rw-r--r--t/98-pod-coverage.t19
-rw-r--r--t/data/12-menu1.ini5
-rw-r--r--t/data/12-menu2.ini9
-rw-r--r--t/data/12-menu3.ini9
-rw-r--r--t/data/12-menu4.ini19
9 files changed, 244 insertions, 32 deletions
diff --git a/t/01-load.t b/t/01-load.t
index 8b83013e..60461f02 100644
--- a/t/01-load.t
+++ b/t/01-load.t
@@ -2,7 +2,7 @@
use strict;
use warnings;
-use Test::More tests => 31;
+use Test::More tests => 30;
use_ok('LedgerSMB');
use_ok('LedgerSMB::AA');
@@ -17,12 +17,11 @@ use_ok('LedgerSMB::HR');
use_ok('LedgerSMB::IC');
use_ok('LedgerSMB::IR');
use_ok('LedgerSMB::IS');
-use_ok('LedgerSMB::Inifile');
+use_ok('LedgerSMB::Menufile');
use_ok('LedgerSMB::JC');
use_ok('LedgerSMB::Locale');
use_ok('LedgerSMB::Log');
use_ok('LedgerSMB::Mailer');
-use_ok('LedgerSMB::Menu');
use_ok('LedgerSMB::Num2text');
use_ok('LedgerSMB::OE');
use_ok('LedgerSMB::OP');
diff --git a/t/10-form.t b/t/10-form.t
index 6c170a80..2a5765e5 100644
--- a/t/10-form.t
+++ b/t/10-form.t
@@ -1,35 +1,25 @@
#!/usr/bin/perl
-##format_amount in 02-number-handling.t
-##parse_amount in 02-number-handling.t
-##round_amount in 02-number-handling.t
-##current_date in 03-date-handling.t
-##split_date in 03-date-handling.t
-##format_date in 03-date-handling.t
-##from_to in 03-date-handling.t
-##datetonum in 03-date-handling.t
-##add_date in 03-date-handling.t
-
-##escape in 10-form.t
-##unescape in 10-form.t
-##quote in 10-form.t
-##unquote in 10-form.t
-##numtextrows in 10-form.t
-##debug in 10-form.t
-##hide_form in 10-form.t
-##info in 10-form.t
-##error in 10-form.t
-##isblank in 10-form.t
-##header in 10-form.t
-##sort_columns in 10-form.t
-##sort_order in 10-form.t
-##print_button in 10-form.t
-
-##encode_all null
-##decode_all null
+#
+# t/10-form.t
+#
+# Tests various functions in LedgerSMB::Form that aren't tested elsewhere.
+#
+
+# format_amount in 02-number-handling.t
+# parse_amount in 02-number-handling.t
+# round_amount in 02-number-handling.t
+# current_date in 03-date-handling.t
+# split_date in 03-date-handling.t
+# format_date in 03-date-handling.t
+# from_to in 03-date-handling.t
+# datetonum in 03-date-handling.t
+# add_date in 03-date-handling.t
+
+# encode_all empty
+# decode_all empty
##sub new {
##sub dberror {
-##sub redirect {
##sub db_parse_numeric {
##sub callproc {
##sub get_my_emp_num {
@@ -91,6 +81,10 @@ sub form_error_func {
print $_[0];
}
+sub redirect {
+ print "redirected\n";
+}
+
my $form = new Form;
my %myconfig;
my $utfstr;
@@ -222,6 +216,7 @@ SKIP: {
is($form->info('hello world'), 'hello world',
'info: CLI, function call');
};
+delete $ENV{info_function};
## $form->error checks
$form = new Form;
@@ -415,3 +410,17 @@ is($trap->stdout, "<button class=\"submit\" type=\"submit\" name=\"action\" valu
## $form->like checks
$form = new Form;
is($form->like('hello world'), '%hello world%', 'like');
+
+## $form->redirect checks
+$form = new Form;
+ok(!defined $form->{callback}, 'redirect: No callback set');
+@r = trap{$form->redirect};
+is($trap->stdout, "redirected\n", 'redirect: No message or callback redirect');
+@r = trap{$form->redirect('hello world')};
+is($trap->stdout, "hello world\n",
+ 'redirect: message, no callback redirect');
+$form->{callback} = 1;
+@r = trap{$form->redirect};
+is($trap->stdout, "redirected\n", 'redirect: callback, no message redirect');
+@r = trap{$form->redirect("hello world\n")};
+is($trap->stdout, "redirected\n", 'redirect: callback and message redirect');
diff --git a/t/11-ledgersmb.t b/t/11-ledgersmb.t
index 9ab8196f..a221cb0e 100644
--- a/t/11-ledgersmb.t
+++ b/t/11-ledgersmb.t
@@ -140,7 +140,7 @@ SKIP: {
$lsmb->{file} = 't/this is a bad directory, I do not exist/foo';
@r = trap {$lsmb->debug('file' => $lsmb->{file}, $lsmb)};
-like($trap->die, qr/No such file or directory at LedgerSMB\.pm/,
+like($trap->die, qr/No such file or directory/,
"debug: open failure causes death");
ok(!-e $lsmb->{file}, "debug: file creation failed");
diff --git a/t/12-menufile.t b/t/12-menufile.t
new file mode 100644
index 00000000..e03c2c81
--- /dev/null
+++ b/t/12-menufile.t
@@ -0,0 +1,143 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+$ENV{TMPDIR} = 't/var';
+
+use Test::More tests => 42;
+use Test::Trap qw(trap $trap);
+
+use LedgerSMB::Form;
+use LedgerSMB::Menufile;
+
+my $ini;
+my @r;
+my $form;
+my $myconfig;
+
+# general new and add_file checks
+$ini = new LedgerSMB::Menufile;
+ok(defined $ini, 'new: File not provided');
+isa_ok($ini, 'LedgerSMB::Menufile', 'new: File not provided gives correct type');
+$ini->add_file('t/data/12-menu1.ini');
+is_deeply($ini->{'AR--Add Transaction'},
+ {'action' => 'add', 'module' => 'ar.pl'},
+ 'add_file: First file added, leaf correct');
+is_deeply($ini->{'ORDER'},
+ ['AR', 'AR--Add Transaction'],
+ 'add_file: First file added, order correct');
+
+$ini->add_file('t/data/12-menu2.ini');
+is_deeply($ini->{'AR--Add Transaction'},
+ {'action' => 'add', 'module' => 'ar.pl'},
+ 'add_file: Second file added, old leaf correct');
+is_deeply($ini->{'AR--foo'},
+ {'module' => 'am.pl'},
+ 'add_file: Second file added, new leaf correct');
+is_deeply($ini->{'ORDER'},
+ ['AR', 'AR--Add Transaction', 'section', 'AR--foo'],
+ 'add_file: Second file added, order correct');
+
+$ini = LedgerSMB::Menufile->new('t/data/12-menu2.ini');
+ok(defined $ini, 'new: File provided');
+isa_ok($ini, 'LedgerSMB::Menufile', 'new: File provided gives correct type');
+is_deeply($ini->{'AR--foo'},
+ {'module' => 'am.pl'},
+ 'new: File provided, leaf correct');
+is_deeply($ini->{'ORDER'},
+ ['section', 'AR--foo'],
+ 'new: File provided, order correct');
+
+$ini->add_file('t/data/12-menu3.ini');
+is_deeply($ini->{'AR--foo'},
+ {'module' => 'ax.pl'},
+ 'add_file: Data re-added, leaf correct, not duplicated');
+is_deeply($ini->{'ORDER'},
+ ['section', 'AR--foo'],
+ 'add_file: Data re-added, order correct, not duplicated');
+
+# menuitem checks
+$form = new Form;
+$form->{script} = 'tt.pl';
+$form->{tag} = '1';
+$myconfig = {'login' => 'testuser', 'numberformat' => '1000.00'};
+$ini = new LedgerSMB::Menufile('t/data/12-menu4.ini');
+is_deeply($ini->{'AR--foo'},
+ {'module' => 'ax.pl', 'action' => 'add', 'type' => 'foo'},
+ 'new: Data for menu item test 1 correct');
+is_deeply($ini->{'New Window'}, {'target' => '_blank'},
+ 'new: Data for menu item test 2 correct');
+is_deeply($ini->{'Website'}, {'href' => 'ledgersmb.org'},
+ 'new: Data for menu item test 3 correct');
+is_deeply($ini->{'AR--test'},
+ {'module' => 'test', 'apples' => 'login=', 'pears' => 'numberformat=2'},
+ 'new: Data for menu item test 4 correct');
+is_deeply($ini->{'AR'}, {'target' => 'acc_menu', 'type' => 'test'},
+ 'new: Data for menu item test 5 correct');
+
+is($ini->menuitem($myconfig, $form, 'AR--foo'), '<a style="display:block;"href="ax.pl?path=bin/mozilla&amp;action=add&amp;level=AR--foo&amp;login=&amp;timeout=&amp;sessionid=&amp;js=&amp;type=foo">',
+ 'menuitem: Menu item test 1, base');
+ok(!defined $ini->{'AR--foo'}->{'module'}, 'menuitem: Deleted module');
+ok(!defined $ini->{'AR--foo'}->{'action'}, 'menuitem: Deleted action');
+is($ini->menuitem($myconfig, $form, 'New Window'), '<a style="display:block;"href="tt.pl?path=bin/mozilla&amp;action=section_menu&amp;level=New%20Window&amp;login=&amp;timeout=&amp;sessionid=&amp;js=" target="_blank">',
+ 'menuitem: Menu item test 2, target');
+is($ini->menuitem($myconfig, $form, 'Website'), '<a href="ledgersmb.org">',
+ 'menuitem: Menu item test 3, href');
+ok(!defined $ini->{'Website'}->{'href'}, 'menuitem: Deleted href');
+$form->{menubar} = 1;
+is($ini->menuitem($myconfig, $form, 'AR--test'), '<a style=""href="test?path=bin/mozilla&amp;action=section_menu&amp;level=AR--test&amp;login=&amp;timeout=&amp;sessionid=&amp;js=&amp;apples=testuser&amp;pears=1000.002">',
+ 'menuitem: Menu item test 4, myconfig substitutions');
+is($ini->menuitem($myconfig, $form, 'AR'), '<a style=""href="tt.pl?path=bin/mozilla&amp;action=section_menu&amp;level=AR&amp;login=&amp;timeout=&amp;sessionid=&amp;js=&amp;type=test#id1" target="acc_menu">',
+ 'menuitem: Menu item test 5, acc_menu');
+ok(!defined $ini->{'AR'}->{'target'}, 'menuitem: Deleted target');
+
+# access_control check
+$myconfig = {'acs' => 'AR--test'};
+$ini = new LedgerSMB::Menufile('t/data/12-menu4.ini');
+is_deeply([$ini->access_control($myconfig)], ['AR', 'New Window', 'Website'],
+ 'access_control: Single item, not top exclusion, top');
+is_deeply([$ini->access_control($myconfig, 'AR')], ['AR--foo'],
+ 'access_control: Single item, not top exclusion, submenu');
+$myconfig = {'acs' => 'Website'};
+is_deeply([$ini->access_control($myconfig)], ['AR', 'New Window'],
+ 'access_control: Single item, top exclusion, top');
+is_deeply([$ini->access_control($myconfig, 'AR')], ['AR--foo', 'AR--test'],
+ 'access_control: Single item, top exclusion, sub menu');
+$myconfig = {'acs' => 'AR--test;AR--foo;New Window'};
+is_deeply([$ini->access_control($myconfig)], ['AR', 'Website'],
+ 'access_control: Multiple items, top');
+is_deeply([$ini->access_control($myconfig, 'AR')], [],
+ 'access_control: Multiple items, sub menu');
+$myconfig = {'acs' => 'AR'};
+is_deeply([$ini->access_control($myconfig)], ['New Window', 'Website'],
+ 'access_control: Top menu exclusion, top');
+is_deeply([$ini->access_control($myconfig, 'AR')], ['AR--foo', 'AR--test'],
+ 'access_control: Top menu exclusion, sub menu');
+
+# file not found check
+$ini = new LedgerSMB::Menufile;
+@r = trap{$ini->add_file('t/data/12-not-a-file')};
+is_deeply($ini->{'ORDER'}, [],
+ 'add_file: Non-existent file added, order correct');
+like($trap->die, qr|12-not-a-file :|,
+ 'add_file: Non-existent file causes error display');
+
+# Gratuitous testing to increase coverage rating
+$ini = undef;
+@r = trap{$ini = LedgerSMB::Menufile::new};
+isa_ok($ini, 'main', 'new: No type passed gives main type');
+
+my $pkg = 'foo';
+$ini = undef;
+@r = trap{$ini = LedgerSMB::Menufile::new(\$pkg)};
+like($trap->{warn}[0], qr|has no copy constructor! creating a new object|,
+ 'new: Type passed scalar reference');
+isa_ok($ini, 'SCALAR', 'new: Type passed scalar reference gives SCALAR type');
+LedgerSMB::Menufile::add_file($ini, 't/data/12-menu1.ini');
+is_deeply($ini->{'AR--Add Transaction'},
+ {'action' => 'add', 'module' => 'ar.pl'},
+ 'add_file: File added to SCALAR, leaf correct');
+is_deeply($ini->{'ORDER'},
+ ['AR', 'AR--Add Transaction'],
+ 'add_file: File added to SCALAR, order correct');
diff --git a/t/98-pod-coverage.t b/t/98-pod-coverage.t
new file mode 100644
index 00000000..f2b04717
--- /dev/null
+++ b/t/98-pod-coverage.t
@@ -0,0 +1,19 @@
+#!/usr/bin/perl
+#
+# t/98-pod-coverage.t
+#
+# Checks POD coverage.
+#
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+use Test::More;
+eval "use Test::Pod::Coverage";
+plan skip_all => "Test::Pod::Coverage required for testing POD coverage" if $@;
+
+pod_coverage_ok("LedgerSMB");
+pod_coverage_ok("LedgerSMB::Locale");
+pod_coverage_ok("LedgerSMB::Log");
+pod_coverage_ok("LedgerSMB::Menufile");
diff --git a/t/data/12-menu1.ini b/t/data/12-menu1.ini
new file mode 100644
index 00000000..6ad5b3fb
--- /dev/null
+++ b/t/data/12-menu1.ini
@@ -0,0 +1,5 @@
+[AR]
+
+[AR--Add Transaction]
+module=ar.pl
+action=add
diff --git a/t/data/12-menu2.ini b/t/data/12-menu2.ini
new file mode 100644
index 00000000..0064ff6b
--- /dev/null
+++ b/t/data/12-menu2.ini
@@ -0,0 +1,9 @@
+# Second test inifile
+[section] ; New section
+[AR--foo] ; But appending now to an old one
+module=am.pl
+.
+No more content... Time to go home
+Yes, really.
+[This is not a real section]
+not=real
diff --git a/t/data/12-menu3.ini b/t/data/12-menu3.ini
new file mode 100644
index 00000000..858fddf2
--- /dev/null
+++ b/t/data/12-menu3.ini
@@ -0,0 +1,9 @@
+# Third test inifile
+[AR--foo] ; But appending now to an old one
+module=ax.pl
+[section] ; New section
+.
+No more content... Time to go home
+Yes, really.
+[This is not a real section]
+not=real
diff --git a/t/data/12-menu4.ini b/t/data/12-menu4.ini
new file mode 100644
index 00000000..1233af84
--- /dev/null
+++ b/t/data/12-menu4.ini
@@ -0,0 +1,19 @@
+# Fourth test menu file
+[AR]
+type=test
+target=acc_menu
+
+[AR--foo]
+module=ax.pl
+action=add
+type=foo
+[AR--test]
+module=test
+apples=login= ; becomes apples=$myconfig->{login}
+pears=numberformat=2 ; becomes pears=$myconfig->{numberformat}2
+
+[New Window]
+target=_blank
+
+[Website]
+href=ledgersmb.org