TODO tests for loading required attributes from config
Ryan D Johnson [Wed, 23 Apr 2008 18:54:29 +0000 (18:54 +0000)]
t/008_configfromfile.t [new file with mode: 0644]

diff --git a/t/008_configfromfile.t b/t/008_configfromfile.t
new file mode 100644 (file)
index 0000000..4b78e51
--- /dev/null
@@ -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' );
+}