Commit | Line | Data |
2006bd3f |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More 'no_plan'; |
2006bd3f |
7 | use File::Temp; |
8 | |
cf7e4e7b |
9 | use_ok('Text::Tradition::Directory'); |
2006bd3f |
10 | |
11 | my $fh = File::Temp->new(); |
12 | my $file = $fh->filename; |
13 | $fh->close; |
14 | my $dsn = "dbi:SQLite:dbname=$file"; |
2006bd3f |
15 | |
cf7e4e7b |
16 | my $user_store = Text::Tradition::Directory->new('dsn' => $dsn, |
ef02228c |
17 | 'extra_args' => { 'create' => 1 } ); |
18 | |
770f7a2b |
19 | my $scope = $user_store->new_scope; |
20 | |
ef02228c |
21 | ## passwords |
22 | my $shortpass = 'bloggs'; |
23 | ok(!$user_store->validate_password($shortpass), '"bloggs" is too short for a password'); |
2006bd3f |
24 | |
d1ba091f |
25 | ## create user |
ef02228c |
26 | my $new_user = $user_store->add_user({ username => 'fred', |
27 | password => 'bloggspass'}); |
2006bd3f |
28 | isa_ok($new_user, 'Text::Tradition::User'); |
570cf8ba |
29 | is($new_user->active, 1, 'New user created and active'); |
2006bd3f |
30 | |
d1ba091f |
31 | ## find user |
32 | my $find_user = $user_store->find_user({ username => 'fred'}); |
33 | isa_ok($find_user, 'Text::Tradition::User'); |
ef02228c |
34 | ok($find_user->check_password('bloggspass'), 'Stored & retrieved with correct password'); |
35 | |
36 | ## modify user |
37 | my $changed_user = $user_store->modify_user({ username => 'fred', |
38 | password => 'passbloggs' }); |
39 | isa_ok($changed_user, 'Text::Tradition::User'); |
40 | my $changed = $user_store->find_user({ username => 'fred'}); |
41 | ok($changed->check_password('passbloggs'), 'Modified & retrieved with correct new password'); |
d1ba091f |
42 | |
570cf8ba |
43 | { |
44 | ## deactivate user |
45 | ## Sets all traditions to non-public, deactivates |
46 | my $user = $user_store->add_user({ username => 'testactive', |
47 | password => 'imanactiveuser' }); |
48 | ok($user->active, 'Deactivate test user starts active'); |
49 | |
50 | my $d_user = $user_store->deactivate_user({ username => 'testactive' }); |
51 | is($d_user->active, 0, 'Deactivated user'); |
df8c12f0 |
52 | is($user_store->find_user({ username => 'testactive' }), undef, 'Deactivated user not returned by find_user'); |
570cf8ba |
53 | |
54 | ## TODO - add test where user has traditions to start with |
55 | } |
56 | |
57 | { |
58 | ## reactivate user |
59 | ## reactivates user, does not mess with their traditions (as we don't know which were public to start with) |
60 | |
61 | my $user = $user_store->add_user({ username => 'testinactive', |
62 | password => 'imaninactiveuser' }); |
df8c12f0 |
63 | my $d_user = $user_store->deactivate_user({ username => 'testinactive' }); |
570cf8ba |
64 | ok(!$d_user->active, 'Deactivate test user starts active'); |
65 | |
66 | my $a_user = $user_store->reactivate_user({ username => 'testinactive' }); |
67 | is($a_user->active, 1, 'Re-activated user'); |
df8c12f0 |
68 | ok($user_store->find_user({ username => 'testinactive' }), 'Re-activated user returned by find_user again'); |
570cf8ba |
69 | } |
70 | |
71 | { |
72 | ## delete user (admin only?) |
73 | my $user = $user_store->add_user({ username => 'testdelete', |
74 | password => 'imgoingtobedeleted' }); |
75 | |
76 | my $gone = $user_store->delete_user({ username => 'testdelete' }); |
77 | |
78 | my $d_user = $user_store->find_user({ username => 'testdelete' }); |
79 | |
80 | ok($gone && !$d_user, 'Deleted user completely from store'); |
81 | } |
d1ba091f |
82 | |
fefeeeda |
83 | { |
84 | ## add_tradition |
85 | use Text::Tradition; |
86 | my $t = Text::Tradition->new( |
87 | 'name' => 'inline', |
88 | 'input' => 'Tabular', |
89 | 'file' => 't/data/simple.txt', |
90 | ); |
91 | |
92 | my $uuid = $user_store->save($t); |
93 | my $user = $user_store->add_user({ username => 'testadd', |
94 | password => 'testingtraditions' }); |
95 | $user->add_tradition($t); |
96 | $user_store->update($user); |
fefeeeda |
97 | |
98 | is( scalar @{$user->traditions}, 1, 'Added one tradition'); |
99 | |
7d52d62b |
100 | my @tlist = $user_store->traditionlist($user); |
101 | is($tlist[0]->{name}, $t->name, 'Traditionlist returns same named user->tradition'); |
102 | is($tlist[0]->{id}, $uuid, 'Traditionlist returns actual tradition with same uuid we put in earlier'); |
fefeeeda |
103 | } |
104 | |