26459299cbccce8cd26023d185caa8627f9a6714
[scpubgit/stemmatology.git] / t / text_tradition_user.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More 'no_plan';
7 use File::Temp;
8
9 use_ok('Text::Tradition::Directory');
10
11 my $fh = File::Temp->new();
12 my $file = $fh->filename;
13 $fh->close;
14 my $dsn = "dbi:SQLite:dbname=$file";
15
16 my $user_store = Text::Tradition::Directory->new('dsn' => $dsn,
17                                                  'extra_args' => { 'create' => 1 } );
18
19 ## passwords
20 my $shortpass = 'bloggs';
21 ok(!$user_store->validate_password($shortpass), '"bloggs" is too short for a password');
22
23 ## create user
24 my $new_user = $user_store->add_user({ username => 'fred',
25                                        password => 'bloggspass'});
26 isa_ok($new_user, 'Text::Tradition::User');
27 is($new_user->active, 1, 'New user created and active');
28
29 ## find user
30 my $find_user = $user_store->find_user({ username => 'fred'});
31 isa_ok($find_user, 'Text::Tradition::User');
32 ok($find_user->check_password('bloggspass'), 'Stored & retrieved with correct password');
33
34 ## modify user
35 my $changed_user = $user_store->modify_user({ username => 'fred',
36                                               password => 'passbloggs' });
37 isa_ok($changed_user, 'Text::Tradition::User');
38 my $changed = $user_store->find_user({ username => 'fred'});
39 ok($changed->check_password('passbloggs'), 'Modified & retrieved with correct new password');
40
41 {
42 ## deactivate user
43 ## Sets all traditions to non-public, deactivates
44     my $user = $user_store->add_user({ username => 'testactive',
45                                        password => 'imanactiveuser' });
46     ok($user->active, 'Deactivate test user starts active');
47
48     my $d_user = $user_store->deactivate_user({ username => 'testactive' });
49     is($d_user->active, 0, 'Deactivated user');
50
51 ## TODO - add test where user has traditions to start with
52 }
53
54 {
55 ## reactivate user
56 ## reactivates user, does not mess with their traditions (as we don't know which were public to start with)
57
58     my $user = $user_store->add_user({ username => 'testinactive',
59                                        password => 'imaninactiveuser' });
60     my $d_user = $user_store->deactivate_user({ username => 'testactive' });
61     ok(!$d_user->active, 'Deactivate test user starts active');   
62     
63     my $a_user = $user_store->reactivate_user({ username => 'testinactive' });
64     is($a_user->active, 1, 'Re-activated user');
65 }
66
67 {
68 ## delete user (admin only?)
69     my $user = $user_store->add_user({ username => 'testdelete',
70                                        password => 'imgoingtobedeleted' });
71
72     my $gone = $user_store->delete_user({ username => 'testdelete' });
73
74     my $d_user = $user_store->find_user({ username => 'testdelete' });
75
76     ok($gone && !$d_user, 'Deleted user completely from store');
77 }
78