Using global constants turned not to be a good idea, some more tests.
This commit is contained in:
parent
33431ec290
commit
9f347030e3
1
cpanfile
1
cpanfile
@ -12,3 +12,4 @@ requires 'DateTime';
|
|||||||
requires 'DateTime::Format::ISO8601';
|
requires 'DateTime::Format::ISO8601';
|
||||||
requires 'Test::Most';
|
requires 'Test::Most';
|
||||||
requires 'Test::MockModule';
|
requires 'Test::MockModule';
|
||||||
|
requires 'Test::Warnings';
|
||||||
|
@ -13,10 +13,8 @@ use Mojo::File;
|
|||||||
use Const::Fast;
|
use Const::Fast;
|
||||||
use Params::ValidationCompiler 'validation_for';
|
use Params::ValidationCompiler 'validation_for';
|
||||||
|
|
||||||
use BeastBB::Constants (
|
use BeastBB::Constants ( 'HomeConfigDir', 'ConfigFile',
|
||||||
'$HOME_DIR', '$HOME_CONFIG_DIR', '$CONFIG_FILE',
|
'SecretDefaultSize' );
|
||||||
'$SECRET_DEFAULT_SIZE'
|
|
||||||
);
|
|
||||||
use BeastBB::ConfigWriter;
|
use BeastBB::ConfigWriter;
|
||||||
use BeastBB::Database;
|
use BeastBB::Database;
|
||||||
use BeastBB::Response;
|
use BeastBB::Response;
|
||||||
@ -53,7 +51,8 @@ sub PrepareHelpers {
|
|||||||
logged_user => sub {
|
logged_user => sub {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $session = $self->session;
|
my $session = $self->session;
|
||||||
return BeastBB::Response->new( is_error => 1, error_message => 'User is not logged in.');
|
return BeastBB::Response->new( is_error => 1,
|
||||||
|
error_message => 'User is not logged in.' );
|
||||||
my $username = $session->{username};
|
my $username = $session->{username};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -107,13 +106,13 @@ sub PrepareInstallationRoutes {
|
|||||||
|
|
||||||
sub PrepareConfig {
|
sub PrepareConfig {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
$HOME_CONFIG_DIR->make_path if !-e $HOME_CONFIG_DIR;
|
HomeConfigDir()->make_path if !-e HomeConfigDir();
|
||||||
if ( !-e $CONFIG_FILE ) {
|
if ( !-e ConfigFile() ) {
|
||||||
my $config_writer =
|
my $config_writer =
|
||||||
BeastBB::ConfigWriter->new( config_file => $CONFIG_FILE );
|
BeastBB::ConfigWriter->new( config_file => ConfigFile() );
|
||||||
$config_writer->PopulateExampleConfigFile(
|
$config_writer->PopulateExampleConfigFile(
|
||||||
secret_size => $SECRET_DEFAULT_SIZE );
|
secret_size => SecretDefaultSize() );
|
||||||
}
|
}
|
||||||
$self->plugin( Config => file => $CONFIG_FILE->to_string );
|
$self->plugin( Config => file => ConfigFile()->to_string );
|
||||||
}
|
}
|
||||||
1;
|
1;
|
||||||
|
@ -9,10 +9,18 @@ use Exporter qw/import/;
|
|||||||
use Const::Fast;
|
use Const::Fast;
|
||||||
|
|
||||||
our @EXPORT_OK =
|
our @EXPORT_OK =
|
||||||
( '$HOME_DIR', '$HOME_CONFIG_DIR', '$CONFIG_FILE', '$SECRET_DEFAULT_SIZE' );
|
( '&HomeDir', '&HomeConfigDir', '&ConfigFile', '&SecretDefaultSize' );
|
||||||
|
|
||||||
const our $HOME_DIR => Mojo::File->new( $ENV{HOME} );
|
sub HomeDir {
|
||||||
const our $HOME_CONFIG_DIR => $HOME_DIR->child( '.config', 'beastbb' );
|
return Mojo::File->new( $ENV{HOME} );
|
||||||
const our $CONFIG_FILE => $HOME_CONFIG_DIR->child('BeastBB.conf');
|
}
|
||||||
const our $SECRET_DEFAULT_SIZE => 64;
|
sub HomeConfigDir {
|
||||||
|
return HomeDir->child( '.config', 'beastbb' );
|
||||||
|
}
|
||||||
|
sub ConfigFile {
|
||||||
|
return HomeConfigDir->child('BeastBB.conf');
|
||||||
|
}
|
||||||
|
sub SecretDefaultSize {
|
||||||
|
return 64;
|
||||||
|
}
|
||||||
1;
|
1;
|
||||||
|
@ -14,7 +14,7 @@ use Types::Standard qw/Str HashRef/;
|
|||||||
use BeastBB::Database;
|
use BeastBB::Database;
|
||||||
use BeastBB::ConfigWriter;
|
use BeastBB::ConfigWriter;
|
||||||
use BeastBB::DAO::UserManager;
|
use BeastBB::DAO::UserManager;
|
||||||
use BeastBB::Constants ('$CONFIG_FILE');
|
use BeastBB::Constants ('ConfigFile');
|
||||||
|
|
||||||
sub welcome {
|
sub welcome {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -64,7 +64,7 @@ sub install_database {
|
|||||||
$self->config->{db} = $config_db;
|
$self->config->{db} = $config_db;
|
||||||
local $Data::Dumper::Terse = 1;
|
local $Data::Dumper::Terse = 1;
|
||||||
my $config_writer =
|
my $config_writer =
|
||||||
BeastBB::ConfigWriter->new( config_file => $CONFIG_FILE );
|
BeastBB::ConfigWriter->new( config_file => ConfigFile() );
|
||||||
$config_writer->WriteToConfigFile(
|
$config_writer->WriteToConfigFile(
|
||||||
content => Data::Dumper::Dumper $self->config );
|
content => Data::Dumper::Dumper $self->config );
|
||||||
$self->redirect_to('/');
|
$self->redirect_to('/');
|
||||||
@ -100,7 +100,7 @@ sub admin_user_create {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $config_writer =
|
my $config_writer =
|
||||||
BeastBB::ConfigWriter->new( config_file => $CONFIG_FILE );
|
BeastBB::ConfigWriter->new( config_file => ConfigFile );
|
||||||
$config->{finished_install} = 1;
|
$config->{finished_install} = 1;
|
||||||
local $Data::Dumper::Terse = 1;
|
local $Data::Dumper::Terse = 1;
|
||||||
$config_writer->WriteToConfigFile(
|
$config_writer->WriteToConfigFile(
|
||||||
|
37
t/00-beastbb.t
Normal file
37
t/00-beastbb.t
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
use 5.32.1;
|
||||||
|
|
||||||
|
use Test::Most tests => 4;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Path::Tiny;
|
||||||
|
use Test::MockModule;
|
||||||
|
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
|
use BeastBB::Constants qw/ConfigFile/;
|
||||||
|
|
||||||
|
{
|
||||||
|
use_ok 'BeastBB';
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
# GIVEN
|
||||||
|
my $path_tiny_tempdir_home = Path::Tiny->tempdir;
|
||||||
|
my $mock_module_constants = Test::MockModule->new('BeastBB::Constants');
|
||||||
|
$mock_module_constants->mock(
|
||||||
|
HomeDir => sub {
|
||||||
|
return Mojo::File->new($path_tiny_tempdir_home . '');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
my $beastbb = BeastBB->new;
|
||||||
|
# WHEN
|
||||||
|
$beastbb->PrepareConfig;
|
||||||
|
# THEN
|
||||||
|
my $config = eval ConfigFile->slurp;
|
||||||
|
ok length $config->{secrets}[0] == 128, 'The config has been successfully created';
|
||||||
|
is_deeply $beastbb->config, $config, 'The populated in program config matches the content of the file.';
|
||||||
|
$config->{secrets} = [];
|
||||||
|
is_deeply $config, { secrets => [] }, 'The config matches the expected structure.';
|
||||||
|
}
|
36
t/01-response.t
Normal file
36
t/01-response.t
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
use 5.32.1;
|
||||||
|
|
||||||
|
use Test::Most tests => 4;
|
||||||
|
use Test::Warnings ':all';
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
{
|
||||||
|
use_ok 'BeastBB::Response';
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
like(
|
||||||
|
warning {
|
||||||
|
BeastBB::Response->new(
|
||||||
|
is_error => 1,
|
||||||
|
content => 'example_content', error_message => 'example_error'
|
||||||
|
)
|
||||||
|
},
|
||||||
|
qr/Error should not have content/,
|
||||||
|
'BeastBB::Response warns on construction if is_error is true and content is passed.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
like(
|
||||||
|
warning {
|
||||||
|
BeastBB::Response->new(
|
||||||
|
is_error => 1,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
qr/You should pass a error message on error\./,
|
||||||
|
'BeastBB::Response warns on construction if is_error is true and error message is not passed.'
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user