Permalink
Fetching contributors…
Cannot retrieve contributors at this time
310 lines (232 sloc) 7.33 KB
#!/usr/bin/perl
use strict;
use Test::More;
BEGIN {
$ENV{MT_CONFIG} = 'mysql-test.cfg';
}
use lib 't/lib', 'extlib', 'lib', '../lib', '../extlib';
use MT::Test;
use MT;
my $mt;
BEGIN {
$mt = new MT;
my $grp_class = MT->model('group');
if (! $grp_class ) {
plan skip_all => "Groups are unavailable for testing.";
} else {
plan tests => 16;
}
}
MT::Test->import( qw( :db ) );
use MT::Blog;
use MT::Author;
use MT::Role;
use MT::Association;
use MT::Group;
use MT::Request;
my $r = MT::Request->instance;
# Users:
my $user_brad = new MT::Author();
$user_brad->name('Brad');
$user_brad->set_password('(none)');
$user_brad->save or die $user_brad->errstr;
my $user_chris = new MT::Author();
$user_chris->name('Chris');
$user_chris->set_password('(none)');
$user_chris->save;
my $user_garth = new MT::Author();
$user_garth->name('Garth');
$user_garth->set_password('(none)');
$user_garth->save;
my $user_gene = new MT::Author();
$user_gene->name('Gene');
$user_gene->set_password('(none)');
$user_gene->save;
my $user_jason = new MT::Author;
$user_jason->set_password('(none)');
$user_jason->name('Jason');
$user_jason->is_superuser(1);
$user_jason->save;
my $user_lilia = new MT::Author();
$user_lilia->name('Lilia');
$user_lilia->set_password('(none)');
$user_lilia->save;
my $user_luke = new MT::Author();
$user_luke->name('Luke');
$user_luke->set_password('(none)');
$user_luke->save;
my $user_mark = new MT::Author();
$user_mark->name('Mark');
$user_mark->set_password('(none)');
$user_mark->save;
my $user_melody = new MT::Author();
$user_melody->name('Melody');
$user_melody->set_password('(none)');
$user_melody->save;
my $user_randy = new MT::Author();
$user_randy->name('Randy');
$user_randy->set_password('(none)');
$user_randy->save;
my $user_walt = new MT::Author;
$user_walt->name('Walt');
$user_walt->set_password('(none)');
$user_walt->save;
# Groups
my $group_designers = new MT::Group;
$group_designers->name('Designers');
$group_designers->save;
$group_designers->add_user($user_lilia);
$group_designers->add_user($user_walt);
$group_designers->add_user($user_luke);
my $group_engineers = new MT::Group;
$group_engineers->name('Engineers');
$group_engineers->save;
$group_engineers->add_user($user_brad);
$group_engineers->add_user($user_gene);
$group_engineers->add_user($user_randy);
$group_engineers->add_user($user_mark);
$group_engineers->add_user($user_garth);
my $group_it = new MT::Group;
$group_it->name('IT');
$group_it->add_user($user_jason);
my $group_managers = new MT::Group;
$group_managers->name('Managers');
$group_managers->save;
$group_managers->add_user($user_brad);
$group_managers->add_user($user_garth);
$group_managers->add_user($user_randy);
my $group_mt = new MT::Group;
$group_mt->name('Movable Type');
$group_mt->save;
$group_mt->add_user($user_brad);
$group_mt->add_user($user_gene);
$group_mt->add_user($user_luke);
$group_mt->add_user($user_chris);
my $group_qa = new MT::Group;
$group_qa->name('QA');
$group_qa->save;
$group_qa->add_user($user_chris);
my $group_typepad = new MT::Group;
$group_typepad->name('TypePad');
$group_typepad->save;
$group_typepad->add_user($user_garth);
$group_typepad->add_user($user_mark);
$group_typepad->add_user($user_walt);
my $group_vox = new MT::Group;
$group_vox->name('Vox');
$group_vox->save;
$group_vox->add_user($user_lilia);
$group_vox->add_user($user_randy);
my $role_design = new MT::Role;
$role_design->name('Custom Designer');
$role_design->set_these_permissions('edit_templates');
$role_design->save;
my $role_admin = new MT::Role;
$role_admin->name('Custom Administrator');
$role_admin->set_these_permissions('administer_blog');
$role_admin->save;
my $role_writer = new MT::Role;
$role_writer->name('Custom Writer');
$role_writer->set_these_permissions('create_post');
$role_writer->save;
# Blogs
my $blog_mt = new MT::Blog;
$blog_mt->name('Movable Type');
$blog_mt->save;
my $blog_vox = new MT::Blog;
$blog_vox->name('Vox Themes');
$blog_vox->save;
my $blog_qa = new MT::Blog;
$blog_qa->name('QA Central');
$blog_qa->save;
my $blog_db = new MT::Blog;
$blog_db->name('Daily Build');
$blog_db->save;
my $blog_mgt = new MT::Blog;
$blog_mgt->name('Management');
$blog_mgt->save;
my $blog_tp = new MT::Blog;
$blog_tp->name('TypePadding');
$blog_tp->save;
# Associations
MT::Association->link($blog_mt => $group_mt => $role_writer);
MT::Association->link($blog_mt => $user_brad => $role_design);
MT::Association->link($blog_vox => $group_vox => $role_writer);
MT::Association->link($blog_qa => $group_qa => $role_writer);
MT::Association->link($blog_db => $group_engineers => $role_writer);
MT::Association->link($blog_mgt => $group_managers => $role_writer);
MT::Association->link($blog_tp => $group_typepad => $role_writer);
MT::Association->link($blog_mt => $group_designers => $role_design);
MT::Association->link($blog_vox => $group_designers => $role_design);
MT::Association->link($blog_qa => $group_designers => $role_design);
MT::Association->link($blog_db => $group_designers => $role_design);
MT::Association->link($blog_mgt => $group_designers => $role_design);
MT::Association->link($blog_tp => $group_designers => $role_design);
# Test 1 -- All blogs that designers have access to
my @blogs;
if (my $blog_iter = $group_designers->blog_iter()) {
while (my $blog = $blog_iter->()) {
push @blogs, $blog;
}
}
is(@blogs, 6);
# Blogs Walt has access to (all, through design group)
@blogs = ();
if (my $blog_iter = $user_walt->blog_iter()) {
while (my $blog = $blog_iter->()) {
push @blogs, $blog;
}
}
is(@blogs, 6);
# Blogs Brad has access to (MT, Daily Build, Managers)
@blogs = ();
if (my $blog_iter = $user_brad->blog_iter()) {
while (my $blog = $blog_iter->()) {
push @blogs, $blog;
}
}
is(@blogs, 3);
# Blog count for Melody
@blogs = ();
if (my $blog_iter = $user_melody->blog_iter()) {
while (my $blog = $blog_iter->()) {
push @blogs, $blog;
}
}
is(@blogs, 0);
# Can Brad edit templates the Daily Build blog?
ok(!$user_brad->permissions($blog_db)->can_edit_templates);
# Can Walt edit MT templates? Yes
ok($user_walt->permissions($blog_mt)->can_edit_templates);
MT::Association->link($user_walt => $role_writer => $blog_mt);
$r->reset();
# Can Walt write to MT? Yes
ok($user_walt->permissions($blog_mt)->can_create_post);
MT::Association->unlink($user_walt => $role_writer => $blog_mt);
$r->reset();
# Can Walt write to MT? No
ok(!$user_walt->permissions($blog_mt)->can_create_post);
$group_designers->remove_user($user_walt);
$r->reset();
# Can Walt edit MT templates? No
ok(!$user_walt->permissions($blog_mt)->can_edit_templates);
$group_designers->add_user($user_walt);
$r->reset();
# Can Walt edit MT templates? Yes
ok($user_walt->permissions($blog_mt)->can_edit_templates);
# Disable designer group
$group_designers->status(MT::Group::INACTIVE());
$group_designers->save;
$r->reset();
# Can Walt edit MT templates? No
ok(!$user_walt->permissions($blog_mt)->can_edit_templates);
ok(!$user_luke->permissions($blog_vox)->can_edit_templates);
ok(!$user_lilia->permissions($blog_tp)->can_edit_templates);
# Enable designer group
$group_designers->status(MT::Group::ACTIVE());
$group_designers->save;
$r->reset();
# Can Walt edit MT templates? Yes
ok($user_walt->permissions($blog_mt)->can_edit_templates);
ok($user_luke->permissions($blog_vox)->can_edit_templates);
ok($user_lilia->permissions($blog_tp)->can_edit_templates);