aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/TestAppProve.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/TestAppProve.pm')
-rw-r--r--perllib/FixMyStreet/TestAppProve.pm90
1 files changed, 54 insertions, 36 deletions
diff --git a/perllib/FixMyStreet/TestAppProve.pm b/perllib/FixMyStreet/TestAppProve.pm
index d549b0148..049f7da6c 100644
--- a/perllib/FixMyStreet/TestAppProve.pm
+++ b/perllib/FixMyStreet/TestAppProve.pm
@@ -33,6 +33,59 @@ END {
cleanup();
}
+my $pg;
+
+sub spin_up_database {
+ warn "Spinning up a Pg cluster/database...\n";
+ $pg = Test::PostgreSQL->new();
+
+ warn sprintf "# Connected to %s\n", $pg->dsn;
+
+ my $dbh = DBI->connect($pg->dsn);
+
+ my $tmpwarn = $SIG{__WARN__};
+ $SIG{__WARN__} =
+ sub { print STDERR @_ if $_[0] !~ m/NOTICE: CREATE TABLE/; };
+ $dbh->do( path('db/schema.sql')->slurp ) or die $!;
+ $dbh->do( path('db/fixture.sql')->slurp ) or die $!;
+ $dbh->do( path('db/generate_secret.sql')->slurp ) or die $!;
+ $SIG{__WARN__} = $tmpwarn;
+
+ return {
+ FMS_DB_PORT => $pg->port,
+ FMS_DB_NAME => 'test',
+ FMS_DB_USER => 'postgres',
+ FMS_DB_HOST => 'localhost',
+ FMS_DB_PASS => '',
+ };
+}
+
+sub get_config {
+ my $cls = shift;
+ my $extra_config = shift;
+ my $config_file = delete $extra_config->{config_file};
+ my $db_config_file = delete $extra_config->{db_config_file};
+
+ my $config = YAML::Load( path($config_file)->slurp );
+ if ($db_config_file) {
+ my $db_config = YAML::Load( path($db_config_file)->slurp );
+ $config->{FMS_DB_PORT} = $db_config->{FMS_DB_PORT};
+ $config->{FMS_DB_NAME} = $db_config->{FMS_DB_NAME};
+ $config->{FMS_DB_USER} = $db_config->{FMS_DB_USER};
+ $config->{FMS_DB_HOST} = $db_config->{FMS_DB_HOST};
+ $config->{FMS_DB_PASS} = $db_config->{FMS_DB_PASS};
+ } else {
+ my $new_db_config = $cls->spin_up_database();
+ $config = { %$config, %$new_db_config };
+ }
+
+ $config = { %$config, %$extra_config };
+
+ my $config_out = "general-test-autogenerated.$$.yml";
+ path("conf/$config_out")->spew( YAML::Dump($config) );
+ return $config_out;
+}
+
sub run {
my ($class, @args) = @_;
local @ARGV = @args;
@@ -53,42 +106,7 @@ sub run {
'state=s@' => \@state,
);
- my $config = YAML::Load( path($config_file)->slurp );
- my $pg;
- if ($db_config_file) {
- my $db_config = YAML::Load( path($db_config_file)->slurp );
- $config->{FMS_DB_PORT} = $db_config->{FMS_DB_PORT};
- $config->{FMS_DB_NAME} = $db_config->{FMS_DB_NAME};
- $config->{FMS_DB_USER} = $db_config->{FMS_DB_USER};
- $config->{FMS_DB_HOST} = $db_config->{FMS_DB_HOST};
- $config->{FMS_DB_PASS} = $db_config->{FMS_DB_PASS};
- }
- else {
- warn "Spinning up a Pg cluster/database...\n";
- $pg = Test::PostgreSQL->new();
-
- warn sprintf "# Connected to %s\n", $pg->dsn;
-
- my $dbh = DBI->connect($pg->dsn);
-
- my $tmpwarn = $SIG{__WARN__};
- $SIG{__WARN__} =
- sub { print STDERR @_ if $_[0] !~ m/NOTICE: CREATE TABLE/; };
- $dbh->do( path('db/schema.sql')->slurp ) or die $!;
- $dbh->do( path('db/fixture.sql')->slurp ) or die $!;
- $dbh->do( path('db/generate_secret.sql')->slurp ) or die $!;
- $SIG{__WARN__} = $tmpwarn;
-
- $config->{FMS_DB_PORT} = $pg->port;
- $config->{FMS_DB_NAME} = 'test';
- $config->{FMS_DB_USER} = 'postgres';
- $config->{FMS_DB_HOST} = 'localhost';
- $config->{FMS_DB_PASS} = '';
- }
-
- my $config_out = "general-test-autogenerated.$$.yml";
- path("conf/$config_out")->spew( YAML::Dump($config) );
-
+ my $config_out = $class->get_config({ config_file => $config_file, db_config_file => $db_config_file });
local $ENV{FMS_OVERRIDE_CONFIG} = $config_out;
my $prove = App::Prove->new;