Merge UserStore and Directory as we had fun assigning users to traditions otherwise.
[scpubgit/stemmatology.git] / t / text_tradition_user.t
CommitLineData
2006bd3f 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More 'no_plan';
2006bd3f 7use File::Temp;
8
cf7e4e7b 9use_ok('Text::Tradition::Directory');
2006bd3f 10
11my $fh = File::Temp->new();
12my $file = $fh->filename;
13$fh->close;
14my $dsn = "dbi:SQLite:dbname=$file";
2006bd3f 15
cf7e4e7b 16my $user_store = Text::Tradition::Directory->new('dsn' => $dsn,
ef02228c 17 'extra_args' => { 'create' => 1 } );
18
19## passwords
20my $shortpass = 'bloggs';
21ok(!$user_store->validate_password($shortpass), '"bloggs" is too short for a password');
2006bd3f 22
d1ba091f 23## create user
ef02228c 24my $new_user = $user_store->add_user({ username => 'fred',
25 password => 'bloggspass'});
2006bd3f 26isa_ok($new_user, 'Text::Tradition::User');
570cf8ba 27is($new_user->active, 1, 'New user created and active');
2006bd3f 28
d1ba091f 29## find user
30my $find_user = $user_store->find_user({ username => 'fred'});
31isa_ok($find_user, 'Text::Tradition::User');
ef02228c 32ok($find_user->check_password('bloggspass'), 'Stored & retrieved with correct password');
33
34## modify user
35my $changed_user = $user_store->modify_user({ username => 'fred',
36 password => 'passbloggs' });
37isa_ok($changed_user, 'Text::Tradition::User');
38my $changed = $user_store->find_user({ username => 'fred'});
39ok($changed->check_password('passbloggs'), 'Modified & retrieved with correct new password');
d1ba091f 40
570cf8ba 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}
d1ba091f 78