File: env-assert-public-assert.t

package info (click to toggle)
env-assert 0.010-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 172 kB
  • sloc: perl: 433; makefile: 2
file content (114 lines) | stat: -rw-r--r-- 4,217 bytes parent folder | download | duplicates (2)
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
109
110
111
112
113
114
#!perl
## no critic [ValuesAndExpressions::ProhibitConstantPragma]
use strict;
use warnings;
use Test2::V0;

use Env::Assert qw( assert );

use constant {
    ENV_ASSERT_MISSING_FROM_ENVIRONMENT    => 1,
    ENV_ASSERT_INVALID_CONTENT_IN_VARIABLE => 2,
    ENV_ASSERT_MISSING_FROM_DEFINITION     => 3,
};

subtest 'Externals' => sub {

    {
        my %env  = ( USER => 'random_user', );
        my %want = (
            options => {
                exact => 1,
            },
            variables => {},
        );
        my %opts = ();

        my $r = assert( \%env, \%want, \%opts );
        is( $r->{'success'},                                   0,                                  'assert not success' );
        is( keys %{ $r->{'errors'} },                          1,                                  'has errors' );
        is( $r->{'errors'}->{'variables'}->{'USER'}->{'type'}, ENV_ASSERT_MISSING_FROM_DEFINITION, 'var missing from def' );
    }

    {
        my %env  = ( USER => 'random_user', );
        my %want = (
            options => {
                exact => 1,
            },
            variables => {
                USER => { regexp => '^[[:word:]]{1}$', required => 1 },
            },
        );
        my %opts = ();

        my $r = assert( \%env, \%want, \%opts );
        is( $r->{'success'},                                   0,                                      'assert not success' );
        is( keys %{ $r->{'errors'} },                          1,                                      'has errors' );
        is( $r->{'errors'}->{'variables'}->{'USER'}->{'type'}, ENV_ASSERT_INVALID_CONTENT_IN_VARIABLE, 'invalid content in var' );
    }

    {
        my %env  = ( USER => 'random_user', );
        my %want = (
            options => {
                exact => 1,
            },
            variables => {
                NOUSER => { regexp => '^[[:word:]]{1}$', required => 1 },
            },
        );
        my %opts = ();

        my $r = assert( \%env, \%want, \%opts );
        is( $r->{'success'},                                     0,                                   'assert not success' );
        is( keys %{ $r->{'errors'} },                            1,                                   'has errors' );
        is( $r->{'errors'}->{'variables'}->{'NOUSER'}->{'type'}, ENV_ASSERT_MISSING_FROM_ENVIRONMENT, 'var missing from env' );
    }

    {
        my %env  = ( USER => 'random_user', );
        my %want = (
            options   => { exact => 0, },
            variables => {
                NOUSER => { regexp => '^[[:word:]]{1}$', required => 1 },
                NOPATH => { regexp => '^[[:word:]]{1}$', required => 1 },
            },
        );
        my %opts = ( break_at_first_error => 0, );

        my $r = assert( \%env, \%want, \%opts );
        is( $r->{'success'},                                     0,                                   'assert not success' );
        is( scalar keys %{ $r->{'errors'}->{'variables'} },      2,                                   'has errors' );
        is( $r->{'errors'}->{'variables'}->{'NOUSER'}->{'type'}, ENV_ASSERT_MISSING_FROM_ENVIRONMENT, 'var missing from env' );
        is( $r->{'errors'}->{'variables'}->{'NOPATH'}->{'type'}, ENV_ASSERT_MISSING_FROM_ENVIRONMENT, 'var missing from env' );
    }

    {
        my %env = (
            USER    => 'random_user',
            HOME    => '/home/users/random_user',
            A_DIGIT => '123456',
        );
        my %want = (
            options => {
                exact => 1,
            },
            variables => {
                USER    => { regexp => '^[[:word:]]{1,}$',                  required => 1 },
                HOME    => { regexp => '^[/]{1}[a-z0-9/_-]{1,}[a-z0-9]{1}', required => 1 },
                A_DIGIT => { regexp => '\d+',                               required => 1 },
            },
        );
        my %opts = ( break_at_first_error => 0, );
        my $r    = assert( \%env, \%want, \%opts );

        ok( $r->{'success'}, 'assert success' );
        is( $r->{'success'},     1, 'assert not success' );
        is( %{ $r->{'errors'} }, 0, 'no errors' );
    }

    done_testing;
};

done_testing;