1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More;
7use Catalyst::Authentication::Store::LDAP::Backend;
8use lib 't/lib';
9use LDAPTest;
10
11my $server = LDAPTest::spawn_server();
12
13# the tests  currently don't require a real Catalyst app instance
14my $c;
15
16my $stringy_session_value;
17subtest "persist_in_session unset" => sub {
18    my $back = Catalyst::Authentication::Store::LDAP::Backend->new(
19        {   'ldap_server' => LDAPTest::server_host(),
20            'binddn'      => 'anonymous',
21            'bindpw'      => 'dontcarehow',
22            'start_tls'   => 0,
23            'user_basedn' => 'ou=foobar',
24            'user_filter' => '(&(objectClass=person)(uid=%s))',
25            'user_scope'  => 'one',
26            'user_field'  => 'uid',
27            'use_roles'   => 0,
28        }
29    );
30
31    my $user = $back->find_user( { username => 'somebody' } );
32    ok($stringy_session_value = $user->for_session, 'for_session ok');
33    is($stringy_session_value, 'somebody', 'for_session returns correct data');
34    ok($back->from_session($c, $stringy_session_value), 'from_session ok');
35};
36
37my $hash_session_value;
38subtest "persist_in_session 'all'" => sub {
39    my $back = Catalyst::Authentication::Store::LDAP::Backend->new(
40        {   ldap_server         => LDAPTest::server_host(),
41            binddn              => 'anonymous',
42            bindpw              => 'dontcarehow',
43            start_tls           => 0,
44            user_basedn         => 'ou=foobar',
45            user_filter         => '(&(objectClass=person)(uid=%s))',
46            user_scope          => 'one',
47            user_field          => 'uid',
48            use_roles           => 0,
49            persist_in_session  => 'all',
50        }
51    );
52    my $user = $back->find_user( { username => 'somebody' } );
53    ok($hash_session_value = $user->for_session, 'for_session ok');
54    is_deeply($hash_session_value,
55        {
56            persist_in_session => 'all',
57            user => $user->user,
58            _roles => [],
59        },
60        "for_session returns correct data");
61    ok($back->from_session($c, $hash_session_value), 'from_session ok');
62    ok($back->from_session($c, $stringy_session_value), 'from_session ok for stringy value');
63};
64
65subtest "persist_in_session 'username'" => sub {
66    my $back = Catalyst::Authentication::Store::LDAP::Backend->new(
67        {   ldap_server         => LDAPTest::server_host(),
68            binddn              => 'anonymous',
69            bindpw              => 'dontcarehow',
70            start_tls           => 0,
71            user_basedn         => 'ou=foobar',
72            user_filter         => '(&(objectClass=person)(uid=%s))',
73            user_scope          => 'one',
74            user_field          => 'uid',
75            use_roles           => 0,
76            persist_in_session  => 'username',
77        }
78    );
79    my $user = $back->find_user( { username => 'somebody' } );
80    ok(my $session = $stringy_session_value = $user->for_session, 'for_session ok');
81    is($session, 'somebody', 'for_session returns correct data');
82    ok($back->from_session($c, $session), 'from_session ok');
83    ok($back->from_session($c, $hash_session_value), 'from_session ok for hash value')
84        or diag explain $hash_session_value;
85};
86
87done_testing;
88