support the configfile sub being totally overridden
[gitmo/MooseX-Getopt.git] / t / 008_configfromfile.t
index 7cf5887..cb54a1c 100644 (file)
@@ -2,7 +2,7 @@ use strict;
 use warnings;
 
 use Test::Requires { 'MooseX::ConfigFromFile' => '0.06' };    # skip all if not installed
-use Test::More tests => 38;
+use Test::More tests => 50;
 use Test::Fatal;
 use Path::Tiny;
 use Test::NoWarnings 1.04 ':early';
@@ -47,8 +47,7 @@ use Test::NoWarnings 1.04 ':early';
             optional_from_config => 'from_config_2',
         );
 
-        my $cpath = Path::Tiny::path('/notused/default');
-        if ( $file ne $cpath ) {
+        if ( $file ne Path::Tiny::path('/notused/default') ) {
             $config{config_from_override} = 1;
         }
 
@@ -78,6 +77,16 @@ use Test::NoWarnings 1.04 ':early';
     );
 }
 
+{
+    package App::ConfigFileWrapped;
+
+    use Moose;
+    extends 'App';
+
+    around configfile => sub { '/notused/default' };
+}
+
+
 # No config specified
 {
     local @ARGV = qw( --required_from_argv 1 );
@@ -98,11 +107,6 @@ use Test::NoWarnings 1.04 ':early';
         is( $app->configfile, path('/notused/default'),
             '... configfile is /notused/default as expected' );
     }
-}
-
-# No config specified
-{
-    local @ARGV = qw( --required_from_argv 1 );
 
     {
         my $app = App::DefaultConfigFileCodeRef->new_with_options;
@@ -115,11 +119,23 @@ use Test::NoWarnings 1.04 ':early';
         is( $app->configfile, path('/notused/default'),
             '... configfile is /notused/default as expected' );
     }
+
+    {
+        my $app = App::ConfigFileWrapped->new_with_options;
+        isa_ok( $app, 'App::ConfigFileWrapped' );
+        app_ok( $app );
+
+        ok(  !$app->config_from_override,
+            '... config_from_override false as expected' );
+
+        is( $app->configfile, path('/notused/default'),
+            '... configfile is /notused/default as expected' );
+    }
 }
 
 # Config specified
 {
-    local @ARGV = qw( --configfile /notused --required_from_argv 1 );
+    local @ARGV = qw( --configfile /notused/override --required_from_argv 1 );
 
     {
         my $app = App->new_with_options;
@@ -135,8 +151,8 @@ use Test::NoWarnings 1.04 ':early';
         ok( $app->config_from_override,
              '... config_from_override true as expected' );
 
-        is( $app->configfile, path('/notused'),
-            '... configfile is /notused as expected' );
+        is( $app->configfile, path('/notused/override'),
+            '... configfile is /notused/override as expected' );
     }
     {
         my $app = App::DefaultConfigFileCodeRef->new_with_options;
@@ -146,14 +162,29 @@ use Test::NoWarnings 1.04 ':early';
         ok( $app->config_from_override,
              '... config_from_override true as expected' );
 
-        is( $app->configfile, path('/notused'),
+        is( $app->configfile, path('/notused/override'),
+            '... configfile is /notused/override as expected' );
+    }
+    TODO: {
+        my $app = App::ConfigFileWrapped->new_with_options;
+        isa_ok( $app, 'App::ConfigFileWrapped' );
+        app_ok( $app );
+
+        ok( $app->config_from_override,
+             '... config_from_override true as expected' );
+
+# FIXME - in order for this to work, we need to fix CFF so the
+# configfile method always returns the actual value of the attribute,
+# not the default sub thingy.
+        local $TODO = 'MooseX::ConfigFromFile needs fixes';
+        is( $app->configfile, path('/notused/override'),
             '... configfile is /notused as expected' );
     }
 }
 
 # Required arg not supplied from cmdline
 {
-    local @ARGV = qw( --configfile /notused );
+    local @ARGV = qw( --configfile /notused/override );
     like exception { App->new_with_options },
         ($Getopt::Long::Descriptive::VERSION >= 0.091
             ? qr/Mandatory parameter 'required_from_argv' missing/
@@ -162,7 +193,7 @@ use Test::NoWarnings 1.04 ':early';
 
 # Config file value overriden from cmdline
 {
-    local @ARGV = qw( --configfile /notused --required_from_argv 1 --required_from_config override );
+    local @ARGV = qw( --configfile /notused/override --required_from_argv 1 --required_from_config override );
 
     my $app = App->new_with_options;
     isa_ok( $app, 'App' );