Prototype implementation of expiry_threshold, with POD
[catagits/Catalyst-Plugin-Session.git] / t / 01_setup.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 10;
7 use Class::MOP;
8 use Test::Deep;
9
10 my $m;
11 BEGIN { use_ok( $m = "Catalyst::Plugin::Session" ) }
12
13 my %config;
14 my $log_meta = Class::MOP::Class->create_anon_class(superclasses => ['Moose::Object']);
15 my $log      = $log_meta->name->new;
16 my @mock_isa = ();
17
18 my $calls = 0;
19 $log_meta->add_method("fatal" => sub { $calls++; 1; });
20
21 {
22
23     package MockCxt;
24     use MRO::Compat;
25     use base $m;
26     sub new { bless {}, $_[0] }
27     sub config { \%config }
28     sub log    { $log }
29
30     sub isa {
31         my $self  = shift;
32         my $class = shift;
33         grep { $_ eq $class } @mock_isa or $self->SUPER::isa($class);
34     }
35 }
36
37 can_ok( $m, "setup" );
38
39 eval { MockCxt->new->setup };    # throws OK is not working with NEXT
40 like(
41     $@,
42     qr/requires.*((?:State|Store).*){2}/i,
43     "can't setup an object that doesn't use state/store plugins"
44 );
45
46 is $calls, 1, 'Fatal error logged';
47
48 @mock_isa = qw/Catalyst::Plugin::Session::State/;
49 eval { MockCxt->new->setup };
50 like( $@, qr/requires.*(?:Store)/i,
51     "can't setup an object that doesn't use state/store plugins" );
52
53 @mock_isa = qw/Catalyst::Plugin::Session::Store/;
54 eval { MockCxt->new->setup };
55 like( $@, qr/requires.*(?:State)/i,
56     "can't setup an object that doesn't use state/store plugins" );
57
58 $calls = 0;
59
60 @mock_isa =
61   qw/Catalyst::Plugin::Session::State Catalyst::Plugin::Session::Store/;
62 eval { MockCxt->new->setup };
63 ok( !$@, "setup() lives with state/store plugins in use" );
64 is( $calls, 0, "no fatal error logged either" );
65
66 cmp_deeply(
67     [ keys %{ $config{'Plugin::Session'} } ],
68     bag(qw/expires verify_address verify_user_agent expiry_threshold/),
69     "default values for config were populated in successful setup",
70 );
71
72 %config = ( session => { expires => 1234 } );
73 MockCxt->new->setup;
74 is( $config{session}{expires},
75     1234, "user values are not overwritten in config" );
76