Fix small typo
[gitmo/MooseX-Params-Validate.git] / t / 002_basic_list.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Fatal;
8
9 {
10     package Roles::Blah;
11     use Moose::Role;
12
13     requires 'foo';
14     requires 'bar';
15     requires 'baz';
16
17     package Foo;
18     use Moose;
19     use Moose::Util::TypeConstraints;
20     use MooseX::Params::Validate;
21
22     with 'Roles::Blah';
23
24     sub foo {
25         my ( $self, $bar ) = validated_list(
26             \@_,
27             bar => { isa => 'Str', default => 'Moose' },
28         );
29         return "Horray for $bar!";
30     }
31
32     sub bar {
33         my $self = shift;
34         my ( $foo, $baz ) = validated_list(
35             \@_,
36             foo => { isa => 'Foo' },
37             baz => { isa => 'ArrayRef | HashRef', optional => 1 },
38         );
39         [ $foo, $baz ];
40     }
41
42     sub baz {
43         my $self = shift;
44         my ( $foo, $bar, $boo ) = validated_list(
45             \@_,
46             foo => {
47                 isa      => subtype( 'Object' => where { $_->isa('Foo') } ),
48                 optional => 1
49             },
50             bar => { does => 'Roles::Blah', optional => 1 },
51             boo => {
52                 does     => role_type('Roles::Blah'),
53                 optional => 1
54             },
55         );
56         return $foo || $bar || $boo;
57     }
58 }
59
60 my $foo = Foo->new;
61 isa_ok( $foo, 'Foo' );
62
63 is( $foo->foo, 'Horray for Moose!', '... got the right return value' );
64 is(
65     $foo->foo( bar => 'Rolsky' ), 'Horray for Rolsky!',
66     '... got the right return value'
67 );
68
69 is( $foo->baz( foo => $foo ), $foo, '... foo param must be a Foo instance' );
70
71 like(
72     exception { $foo->baz( foo => 10 ) }, qr/\QThe 'foo' parameter ("10")/,
73     '... the foo param in &baz must be a Foo instance'
74 );
75 like(
76     exception { $foo->baz( foo => "foo" ) },
77     qr/\QThe 'foo' parameter ("foo")/,
78     '... the foo param in &baz must be a Foo instance'
79 );
80 like(
81     exception { $foo->baz( foo => [] ) }, qr/\QThe 'foo' parameter/,
82     '... the foo param in &baz must be a Foo instance'
83 );
84
85 is( $foo->baz( bar => $foo ), $foo, '... bar param must do Roles::Blah' );
86
87 like(
88     exception { $foo->baz( bar => 10 ) }, qr/\QThe 'bar' parameter ("10")/,
89     '... the bar param in &baz must be do Roles::Blah'
90 );
91 like(
92     exception { $foo->baz( bar => "foo" ) },
93     qr/\QThe 'bar' parameter ("foo")/,
94     '... the bar param in &baz must be do Roles::Blah'
95 );
96 like(
97     exception { $foo->baz( bar => [] ) }, qr/\QThe 'bar' parameter/,
98     '... the bar param in &baz must be do Roles::Blah'
99 );
100
101 is( $foo->baz( boo => $foo ), $foo, '... boo param must do Roles::Blah' );
102
103 like(
104     exception { $foo->baz( boo => 10 ) }, qr/\QThe 'boo' parameter ("10")/,
105     '... the boo param in &baz must be do Roles::Blah'
106 );
107 like(
108     exception { $foo->baz( boo => "foo" ) },
109     qr/\QThe 'boo' parameter ("foo")/,
110     '... the boo param in &baz must be do Roles::Blah'
111 );
112 like(
113     exception { $foo->baz( boo => [] ) }, qr/\QThe 'boo' parameter/,
114     '... the boo param in &baz must be do Roles::Blah'
115 );
116
117 like(
118     exception { $foo->bar }, qr/\QMandatory parameter 'foo'/,
119     '... bar has a required param'
120 );
121 like(
122     exception { $foo->bar( foo => 10 ) }, qr/\QThe 'foo' parameter ("10")/,
123     '... the foo param in &bar must be a Foo instance'
124 );
125 like(
126     exception { $foo->bar( foo => "foo" ) },
127     qr/\QThe 'foo' parameter ("foo")/,
128     '... the foo param in &bar must be a Foo instance'
129 );
130 like(
131     exception { $foo->bar( foo => [] ) }, qr/\QThe 'foo' parameter/,
132     '... the foo param in &bar must be a Foo instance'
133 );
134 like( exception { $foo->bar( baz => [] ) }, qr/\QMandatory parameter 'foo'/ );
135
136 is_deeply(
137     $foo->bar( foo => $foo ),
138     [ $foo, undef ],
139     '... the foo param in &bar got a Foo instance'
140 );
141
142 is_deeply(
143     $foo->bar( foo => $foo, baz => [] ),
144     [ $foo, [] ],
145     '... the foo param and baz param in &bar got a correct args'
146 );
147
148 is_deeply(
149     $foo->bar( foo => $foo, baz => {} ),
150     [ $foo, {} ],
151     '... the foo param and baz param in &bar got a correct args'
152 );
153
154 like(
155     exception { $foo->bar( foo => $foo, baz => undef ) },
156     qr/\QThe 'baz' parameter (undef)/,
157     '... baz requires a ArrayRef | HashRef'
158 );
159 like(
160     exception { $foo->bar( foo => $foo, baz => 10 ) },
161     qr/\QThe 'baz' parameter ("10")/,
162     '... baz requires a ArrayRef | HashRef'
163 );
164 like(
165     exception { $foo->bar( foo => $foo, baz => 'Foo' ) },
166     qr/\QThe 'baz' parameter ("Foo")/,
167     '... baz requires a ArrayRef | HashRef'
168 );
169 like(
170     exception { $foo->bar( foo => $foo, baz => \( my $var ) ) },
171     qr/\QThe 'baz' parameter/, '... baz requires a ArrayRef | HashRef'
172 );
173
174 done_testing();