return $class->$orig( $args );
};
+## These checks don't cover store($id, $obj)
before [ qw/ store update insert delete / ] => sub {
my $self = shift;
my @nontrad;
foreach my $obj ( @_ ) {
-# if( ref( $obj ) && ref( $obj ) ne 'Text::Tradition' ) {
-
if( ref( $obj ) && ref( $obj ) ne 'Text::Tradition'
&& ref ($obj) ne 'Text::Tradition::User' ) {
# Is it an id => Tradition hash?
my ($self, $user) = @_;
my @tlist;
- if(ref $user) {
+ if(ref $user && $user->is_admin) {
+ ## Admin sees all
+ return $self->traditionlist();
+ } elsif(ref $user) {
## We have a user object already, so just fetch its traditions and use tose
foreach my $t (@{ $user->traditions }) {
push( @tlist, { 'id' => $self->object_to_id( $t ),
my ($self, $userinfo) = @_;
my $username = $userinfo->{url} || $userinfo->{username};
my $password = $userinfo->{password};
+ my $role = $userinfo->{role} || 'user';
return unless ($username =~ /^https?:/
|| ($username && $self->validate_password($password))) ;
my $user = Text::Tradition::User->new(
id => $username,
password => ($password ? crypt_password($password) : ''),
+ role => $role,
);
$self->store($user->kiokudb_object_id, $user);
password => 'bloggspass'});
isa_ok($new_user, 'Text::Tradition::User');
is($new_user->active, 1, 'New user created and active');
+ok(!$new_user->is_admin, 'New user is not an admin');
## find user
my $find_user = $user_store->find_user({ username => 'fred'});
my @tlist = $user_store->traditionlist($user);
is($tlist[0]->{name}, $t->name, 'Traditionlist returns same named user->tradition');
is($tlist[0]->{id}, $uuid, 'Traditionlist returns actual tradition with same uuid we put in earlier');
+ my $fetched_t = $user_store->tradition($tlist[0]->{id});
+ is($fetched_t->user->id, $user->id, 'Traditionlist returns item belonging to this user');
+
+ ## add a second, not owned by this user, we shouldn't return it from
+ ## traditionslist
+ my $t2 = Text::Tradition->new(
+ 'name' => 'inline',
+ 'input' => 'Tabular',
+ 'file' => 't/data/simple.txt',
+ );
+ $user_store->save($t2);
+ my @tlist2 = $user_store->traditionlist($user);
+ is(scalar @tlist2, 1, 'With 2 stored traditions, we only fetch one');
+ my $fetched_t2 = $user_store->tradition($tlist[0]->{id});
+ is($fetched_t2->user->id, $user->id, 'Traditionlist returns item belonging to this user');
+
+
+}
+
+
+TODO: {
+ local $TODO = 'searching on public attr not implemented yet';
+ ## Fetch public traditions, not user traditions, when not fetching with a user
+ use Text::Tradition;
+ my $t = Text::Tradition->new(
+ 'name' => 'inline',
+ 'input' => 'Tabular',
+ 'file' => 't/data/simple.txt',
+ );
+
+ $user_store->save($t);
+ my $user = $user_store->add_user({ username => 'testpublic',
+ password => 'testingtraditions' });
+ $user->add_tradition($t);
+ $user_store->update($user);
+
+ ## add a second, not owned by this user, we shouldn't return it from
+ ## traditionslist
+ my $t2 = Text::Tradition->new(
+ 'name' => 'inline',
+ 'input' => 'Tabular',
+ 'file' => 't/data/simple.txt',
+ );
+ $t2->public(1);
+ my $uuid = $user_store->save($t2);
+
+ my @tlist = $user_store->traditionlist('public');
+ is(scalar @tlist, 1, 'Got one public tradition');
+ is($tlist[0]->{name}, $t2->name, 'Traditionlist returns same named user->tradition');
+ is($tlist[0]->{id}, $uuid, 'Traditionlist returns actual tradition with same uuid we put in earlier');
+ my $fetched_t = $user_store->tradition($tlist[0]->{id});
+ ok($fetched_t->public, 'Traditionlist returns public item');
+
}
{
is(scalar @tlist, 0, 'Traditionlist now empty');
}
+{
+ ## Add admin user
+ my $admin = $user_store->add_user({
+ username => 'adminuser',
+ password => 'adminpassword',
+ role => 'admin' });
+
+ ok($admin->is_admin, 'Got an admin user');
+
+ ## test admins get all traditions
+ use Text::Tradition;
+ my $t = Text::Tradition->new(
+ 'name' => 'inline',
+ 'input' => 'Tabular',
+ 'file' => 't/data/simple.txt',
+ );
+
+ $user_store->save($t);
+
+ my @tlist = $user_store->traditionlist(); ## all traditions
+ my @admin_tlist = $user_store->traditionlist($admin);
+
+ is(scalar @admin_tlist, scalar @tlist, 'Got all traditions for admin user');
+
+}