summaryrefslogtreecommitdiff
path: root/t/62-api.t
blob: 02b5dea64627bdbbd03167604bc85bc2ccab32e3 (plain)
  1. BEGIN {
  2. use LedgerSMB;
  3. use Test::More;
  4. use LedgerSMB::Template;
  5. use LedgerSMB::Sysconfig;
  6. use LedgerSMB::DBTest;
  7. }
  8. if (defined $ENV{LSMB_TEST_DB}){
  9. if (defined $ENV{LSMB_NEW_DB}){
  10. $ENV{PGDATABASE} = $ENV{LSMB_NEW_DB};
  11. }
  12. if (!defined $ENV{PGDATABASE}){
  13. die "Oops... LSMB_TEST_DB set but no db selected!";
  14. }
  15. plan 'no_plan';
  16. } else {
  17. plan skip_all => 'Skipping, LSMB_TEST_DB environment variable not set.';
  18. }
  19. do 't/data/62-request-data'; # Import test case hashes
  20. for (qw( drafts.pl login.pl payment.pl
  21. report.pl employee.pl menu.pl vendor.pl
  22. customer.pl inventory.pl vouchers.pl)
  23. ){
  24. ok(eval { require "scripts/$_" }, "Importing $_");
  25. if ($@){
  26. print STDERR "Error: $@\n";
  27. }
  28. } # Import new code namespaces
  29. my $dbh = LedgerSMB::DBTest->connect("dbi:Pg:dbname=$ENV{PGDATABASE}", undef, undef);
  30. my $locale = LedgerSMB::Locale->get_handle( ${LedgerSMB::Sysconfig::language} );
  31. for my $test (@$test_request_data){
  32. if (ref $pre_test_subs->{"$test->{_test_id}"} eq 'CODE'){
  33. $pre_test_subs->{"$test->{_test_id}"}();
  34. }
  35. if (lc $test->{_codebase} eq 'old'){
  36. next; # skip old codebase tests for now
  37. old_code_test::_load_script($test->{module});
  38. my $qtring = "$test->{module}?";
  39. for $key (keys(%$test)){
  40. if ($key !~ /^_/){
  41. $qstring .= qq|$key=$test->{"$key"}&|;
  42. }
  43. }
  44. $qstring =~ s/&$//;
  45. $old_code_test::form = Form->new($qstring);
  46. for (keys (%$test)){
  47. $form->{$_} = $test->{$_};
  48. }
  49. is('old_code_test'->can($test->{action}), 0,
  50. "$test->{_test_id}: Action Successful");
  51. } else {
  52. my $request = LedgerSMB->new();
  53. $request->merge($test);
  54. $request->{_locale} = $locale;
  55. my $script = $test->{module};
  56. $request->{dbh} = $dbh;
  57. if (ref $api_test_cases->{"$test->{_test_id}"} eq 'CODE'){
  58. $request->{_test_cases} =
  59. $api_test_cases->{"$test->{_test_id}"};
  60. }
  61. delete $api_test_cases->{"$test->{_test_id}"};
  62. $script =~ s/\.pl$//;
  63. is(ref "LedgerSMB::Scripts::$script"->can($request->{action}),
  64. 'CODE',
  65. "$test->{_test_id}: Action ($request->{action}) Defined");
  66. ok("LedgerSMB::Scripts::$script"->can($request->{action})->($request), "$test->{_test_id}: Action Successful");
  67. }
  68. if (ref $api_test_cases->{"$test->{_test_id}"} eq 'CODE'){
  69. $request->{_test_cases} =
  70. $api_test_cases->{"$test->{_test_id}"};
  71. }
  72. ok($dbh->rollback, "$test->{_test_id}: rollback");
  73. }
  74. package LedgerSMB::Template;
  75. # Don't render templates. Just return so we can run tests on data structures.
  76. sub render {
  77. my ($self, $data) = @_;
  78. if (ref $data->{_test_cases} eq 'CODE'){
  79. $data->{_test_cases}($data);
  80. }
  81. return 1;
  82. }
  83. sub _http_output {
  84. return 1;
  85. }
  86. package old_code_test;
  87. # Keeps old code isolated in a different namespace, and provides for reasonable
  88. # reload facilities.
  89. our $form;
  90. sub _load_script {
  91. do "bin/arapprn.pl";
  92. do "bin/arap.pl";
  93. do "bin/io.pl";
  94. do "bin/$1[0]";
  95. }