Add 'list' to admin
[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
770f7a2b 19my $scope = $user_store->new_scope;
20
ef02228c 21## passwords
22my $shortpass = 'bloggs';
23ok(!$user_store->validate_password($shortpass), '"bloggs" is too short for a password');
2006bd3f 24
d1ba091f 25## create user
ef02228c 26my $new_user = $user_store->add_user({ username => 'fred',
27 password => 'bloggspass'});
2006bd3f 28isa_ok($new_user, 'Text::Tradition::User');
570cf8ba 29is($new_user->active, 1, 'New user created and active');
2006bd3f 30
d1ba091f 31## find user
32my $find_user = $user_store->find_user({ username => 'fred'});
33isa_ok($find_user, 'Text::Tradition::User');
ef02228c 34ok($find_user->check_password('bloggspass'), 'Stored & retrieved with correct password');
35
36## modify user
37my $changed_user = $user_store->modify_user({ username => 'fred',
38 password => 'passbloggs' });
39isa_ok($changed_user, 'Text::Tradition::User');
40my $changed = $user_store->find_user({ username => 'fred'});
41ok($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