fixed installer test
[koha.git] / t / lib / KohaTest / Installer / SqlScripts.pm
1 package KohaTest::Installer::SqlScripts;
2 use base qw( KohaTest::Installer );
3
4 use strict;
5 use warnings;
6
7 use Test::More;
8 use C4::Languages;
9 use C4::Installer;
10
11 sub startup_50_get_installer : Test( startup => 1 ) {
12     my $self = shift;
13     my $installer = C4::Installer->new();
14     is(ref($installer), "C4::Installer", "created installer");
15     $self->{installer} = $installer;
16 }
17
18 sub installer_all_sample_data : Tests {
19     my $self = shift;
20
21     skip "did not create installer" unless ref($self->{installer}) eq 'C4::Installer';
22
23     my $all_languages = getAllLanguages();
24     # find the available directory names
25     my $dir=C4::Context->config('intranetdir')."/installer/data/" . 
26             (C4::Context->config("db_scheme") ? C4::Context->config("db_scheme") : "mysql") . "/";
27     opendir (MYDIR,$dir);
28     my @languages = grep { !/^\.|CVS/ && -d "$dir/$_"} readdir(MYDIR);    
29     closedir MYDIR;
30     
31     cmp_ok(scalar(@languages), '>', 0, "at least one framework language defined");
32     
33     foreach my $lang_code (@languages) {
34         SKIP: {
35             my $marc_flavours = $self->{installer}->marcflavour_list($lang_code);
36             ok(defined($marc_flavours), "at least one MARC flavour for $lang_code");
37             skip "no MARC flavours for $lang_code" unless defined($marc_flavours);
38
39             foreach my $flavour (@$marc_flavours) {
40                 SKIP: {
41                     $self->clear_test_database();
42                     my $schema_error = $self->{installer}->load_db_schema();
43                     is($schema_error, "", "no errors during schema load");
44                     skip "error during schema load" if $schema_error ne "";
45         
46                     my $list = $self->{installer}->sql_file_list($lang_code, $flavour, { optional => 1, mandatory => 1 });
47                     my $sql_count = scalar(@$list);
48                     cmp_ok($sql_count, '>', 0, "at least one SQL init file for $lang_code, $flavour");
49                     skip "no SQL init files defined for $lang_code, $flavour" unless $sql_count > 0;
50
51                     my ($fwk_language, $installed_list) = $self->{installer}->load_sql_in_order($all_languages, @$list);
52
53                     # extract list of files
54                     my $level;
55                     my @file_list = map { 
56                                             map { $_->{level} = $level; $_ } @{ $level = $_->{level}; $_->{fwklist} } 
57                                         } @$installed_list; 
58                     my $num_processed = scalar(@file_list);
59                     cmp_ok($num_processed, '==', $sql_count, "processed all sql scripts for $lang_code, $flavour");
60
61                     my %sql_to_load = map { my $file = $_; 
62                                             my @file = split qr(\/|\\), $file; 
63                                             join("\t", $file[-2], $file[-1]) => 1 
64                                            } @$list;
65                     foreach my $sql (@file_list) {
66                         ok(exists($sql_to_load{ "$sql->{level}\t$sql->{fwkname}" }), 
67                             "SQL script $sql->{level}/$sql->{fwkname} is on list");
68                         delete $sql_to_load{ "$sql->{level}\t$sql->{fwkname}" };
69                         is($sql->{error}, "", "no errors when loading $sql->{fwkname}");
70                     }
71                     ok(not(%sql_to_load), "no SQL scripts for $lang_code, $flavour left unloaded");
72                 }
73             }
74         }
75     }
76 }
77
78 sub shutdown_50_clear_installer : Tests( shutdown ) {
79     my $self = shift;
80     delete $self->{installer};
81 }
82
83 1;