summaryrefslogtreecommitdiff
path: root/t/config-file.t
blob: 4d476a6b2c1f7725549e808d7d238a489d925246 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!perl

use warnings;
use strict;

use Test::More tests => 18;

use File::Basename;

my $class = 'CPAN::Mini';

use_ok($class);
can_ok($class, 'config_file');

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# command line option case
{
  my $filename = 'Changes';
  ok(-e $filename, "file name [$filename] exists");

  local $ENV{CPAN_MINI_CONFIG} = 'Buster';
  my $options = { config_file => $filename, };

  is($class->config_file($options),
    $filename, 'selects config file name from command line');
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# environment variable case
{
  my $filename = $0;
  ok(-e $filename, "file name [$filename] exists");

  local $ENV{CPAN_MINI_CONFIG} = $filename;

  is($class->config_file, $filename,
    'selects config file name from environment with no args');
  is($class->config_file({}),
    $filename, 'selects config file name from environment with empty hash ref');
  is($class->config_file('trash'),
    $filename, 'selects config file name from environment with non-ref arg');
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# default case
# this is the case where there is a ~/.minicpanrc
{

  my $filename = 'Changes';
  ok(-e $filename, "file name [$filename] exists");

  {
    no strict 'refs';
    no warnings 'redefine';

    *{"${class}::__homedir_configfile"} = sub { $filename };
    is($class->__homedir_configfile,
      $filename, "__homedir_configfile returns mocked name");
  }

  local $ENV{CPAN_MINI_CONFIG} = undef;

  is($class->config_file, $filename, 'selects default config file name');
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# last ditch case
# this is the case wehre there is no ~/.minicpanrc
{
  local $ENV{CPAN_MINI_CONFIG} = undef;
  my $is_there_filename = 'Changes';
  ok(-e $is_there_filename, "file name [$is_there_filename] does exist");

  {
    no strict 'refs';
    no warnings 'redefine';

    *{"${class}::__homedir_configfile"} = sub { undef };
    is($class->__homedir_configfile,
      undef, "__homedir_configfile returns mocked name");
    *{"${class}::__default_configfile"} = sub { $is_there_filename };
    is($class->__default_configfile,
      $is_there_filename, "__default_configfile returns mocked name");
  }

  is($class->config_file, $is_there_filename,
    'selects default config file name');
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# everything failed case
{
  local $ENV{CPAN_MINI_CONFIG} = undef;

  {
    no strict 'refs';
    no warnings 'redefine';

    *{"${class}::__homedir_configfile"} = sub { undef };
    is($class->__homedir_configfile,
      undef, "__homedir_configfile returns mocked name");
    *{"${class}::__default_configfile"} = sub { undef };
    is($class->__default_configfile,
      undef, "__default_configfile returns mocked name");
  }

  is($class->config_file, undef, 'returns undef when no config file is found');
}