Bug 19821: Install sample data, ES mappings and Version syspref
[koha.git] / t / lib / Bootstrap.pm
1 package t::lib::Bootstrap;
2
3 use Modern::Perl;
4
5 use DBI;
6 use File::Temp qw( tempfile );
7 use XML::LibXML;
8
9 sub import {
10     my ($self, %args) = @_;
11
12     unless (defined $args{database}) {
13         die "Test database is not defined";
14     }
15
16     $args{marcflavour} //= 'MARC21';
17
18     my $xml = XML::LibXML->load_xml(location => $ENV{KOHA_CONF});
19     my $root = $xml->documentElement();
20     my ($databaseElement) = $root->findnodes('//config/database');
21     my $currentDatabase = $databaseElement->textContent();
22
23     if ($currentDatabase eq $args{database}) {
24         die "Test database is the same as database in KOHA_CONF, abort!";
25     }
26
27     $databaseElement->firstChild()->setData($args{database});
28
29     my ($fh, $filename) = tempfile('koha-conf.XXXXXX', TMPDIR => 1, UNLINK => 1);
30     $xml->toFH($fh);
31     close $fh;
32
33     $ENV{KOHA_CONF} = $filename;
34
35     require C4::Context;
36     C4::Context->import;
37
38     require C4::Installer;
39     C4::Installer->import;
40
41     require C4::Languages;
42
43     my $host = C4::Context->config('hostname');
44     my $port = C4::Context->config('port');
45     my $database = C4::Context->config('database');
46     my $user = C4::Context->config('user');
47     my $pass = C4::Context->config('pass');
48
49     say "Create test database $database...";
50
51     my $dbh = DBI->connect("dbi:mysql:;host=$host;port=$port", $user, $pass, {
52         RaiseError => 1,
53         PrintError => 0,
54     });
55
56     $dbh->do("DROP DATABASE IF EXISTS $database");
57     $dbh->do("CREATE DATABASE $database");
58
59     my $installer = C4::Installer->new();
60     $installer->load_db_schema();
61     $installer->set_marcflavour_syspref($args{marcflavour});
62     my (undef, $fwklist) = $installer->marc_framework_sql_list('en', $args{marcflavour});
63     my (undef, $list) = $installer->sample_data_sql_list('en');
64     my @frameworks;
65     foreach my $fwk (@$fwklist, @$list) {
66         foreach my $framework (@{ $fwk->{frameworks} }) {
67             push @frameworks, $framework->{fwkfile};
68         }
69     }
70     my $all_languages = C4::Languages::getAllLanguages();
71     $installer->load_sql_in_order($all_languages, @frameworks);
72     require Koha::SearchEngine::Elasticsearch;
73     Koha::SearchEngine::Elasticsearch->reset_elasticsearch_mappings;
74     $installer->set_version_syspref();
75 }
76
77 1;