From: Ryan D Johnson Date: Wed, 23 Apr 2008 18:54:29 +0000 (+0000) Subject: TODO tests for loading required attributes from config X-Git-Tag: 0_15~15 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=62c4891a67e6c7f3a79eb48adec1bf3eca3ff4d1;p=gitmo%2FMooseX-Getopt.git TODO tests for loading required attributes from config --- diff --git a/t/008_configfromfile.t b/t/008_configfromfile.t new file mode 100644 index 0000000..4b78e51 --- /dev/null +++ b/t/008_configfromfile.t @@ -0,0 +1,171 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +use Test::Exception; +use Test::More; + +if ( !require MooseX::ConfigFromFile ) +{ + plan skip_all => 'Test requires MooseX::ConfigFromFile'; +} +else +{ + plan tests => 24; +} + +{ + package App; + + use Moose; + with 'MooseX::Getopt'; + with 'MooseX::ConfigFromFile'; + + has 'config_from_override' => ( + is => 'ro', + isa => 'Bool', + default => 0, + ); + + has 'optional_from_config' => ( + is => 'ro', + isa => 'Str', + required => 0, + ); + + has 'required_from_config' => ( + is => 'ro', + isa => 'Str', + required => 1, + ); + + has 'required_from_argv' => ( + is => 'ro', + isa => 'Str', + required => 1, + ); + + sub get_config_from_file + { + my ( $class, $file ) = @_; + + my %config = ( + required_from_config => 'from_config_1', + optional_from_config => 'from_config_2', + ); + + if ( $file ne '/notused/default' ) { + $config{config_from_override} = 1; + } + + return \%config; + } +} + +{ + package App::DefaultConfigFile; + + use Moose; + extends 'App'; + + has '+configfile' => ( + default => '/notused/default', + ); +} + +# No config specified +{ + local @ARGV = qw( --required_from_argv 1 ); + + throws_ok { App->new_with_options } qr/Required option missing: required_from_config/; + + + TODO: { + local $TODO = 'Cannot supply required args from config'; + + my $app = eval { App::DefaultConfigFile->new_with_options }; + isa_ok( $app, 'App::DefaultConfigFile' ); + app_ok( $app ); + + ok( $app && !$app->config_from_override, + '... config_from_override false as expected' ); + + is( $app && $app->configfile, '/notused/default', + '... configfile is /notused/default as expected' ); + } +} + +# Config specified +{ + local @ARGV = qw( --configfile /notused --required_from_argv 1 ); + + TODO: { + local $TODO = 'Cannot supply required args from config'; + + my $app = eval { App->new_with_options }; + isa_ok( $app, 'App' ); + app_ok( $app ); + } + + TODO: { + local $TODO = 'Cannot supply required args from config'; + + my $app = eval { App::DefaultConfigFile->new_with_options }; + isa_ok( $app, 'App::DefaultConfigFile' ); + app_ok( $app ); + + is ( $app && $app->config_from_override, + '... config_from_override true as expected' ); + + is( $app && $app->configfile, '/notused', + '... configfile is /notused as expected' ); + } +} + +# Required arg not supplied from cmdline +{ + local @ARGV = qw( --configfile /notused ); + throws_ok { App->new_with_options } qr/Required option missing: required_from_argv/; +} + +# Config file value overriden from cmdline +{ + local @ARGV = qw( --configfile /notused --required_from_argv 1 --required_from_config override ); + + my $app = App->new_with_options; + isa_ok( $app, 'App' ); + + is( $app->required_from_config, 'override', + '... required_from_config is override as expected' ); + + is( $app->optional_from_config, 'from_config_2', + '... optional_from_config is from_config_2 as expected' ); +} + +# No config file +{ + local @ARGV = qw( --required_from_argv 1 --required_from_config noconfig ); + + my $app = App->new_with_options; + isa_ok( $app, 'App' ); + + is( $app->required_from_config, 'noconfig', + '... required_from_config is noconfig as expected' ); + + ok( !defined $app->optional_from_config, + '... optional_from_config is undef as expected' ); +} + +sub app_ok { + my $app = shift; + + is( $app && $app->required_from_config, 'from_config_1', + '... required_from_config is from_config_1 as expected' ); + + is( $app && $app->optional_from_config, 'from_config_2', + '... optional_from_config is from_config_2 as expected' ); + + is( $app && $app->required_from_argv, '1', + '... required_from_argv is 1 as expected' ); +}