- added: Inbox is now pruned after 1 year

- Added about a hundred tests for Collaboration system, Post, and Thread 
permissions
- Cleaned up code tested by the aforementioned tests
- Fixed all Test::WWW::Mechanize tests and updated the skeleton. Should be 
usable now.
This commit is contained in:
Doug Bell 2008-04-26 02:23:10 +00:00
parent ea1dac4064
commit 98992b8920
16 changed files with 742 additions and 120 deletions

View file

@ -31,6 +31,12 @@
displayed
- fixed: Thingy: thing view screen always displays all fields
- fixed: Thingy: search result "sort by" not working
- added: Inbox is now pruned after 1 year
- Added about a hundred tests for Collaboration system, Post, and Thread
permissions
- Cleaned up code tested by the aforementioned tests
- Fixed all Test::WWW::Mechanize tests and updated the skeleton. Should be
usable now.
7.5.10

View file

@ -25,6 +25,7 @@ my $session = start(); # this line required
# upgrade functions go here
addCalendarEventWorkflow( $session );
addPurgeOldInboxActivity( $session );
addingInStoreCredit($session);
insertCommerceTaxTable($session);
migrateOldTaxTable($session);
@ -63,6 +64,12 @@ sub addCalendarEventWorkflow {
print "DONE!\n" unless $quiet;
}
#----------------------------------------------------------------------------
# Add the new PurgeOldInboxMessages activity to the config file
sub addPurgeOldInboxActivity {
my $session = shift;
print "\tAdding Purge Old Inbox Messages workflow activity... " unless $quiet;
#-------------------------------------------------
sub addingInStoreCredit {
my $session = shift;
@ -77,6 +84,12 @@ sub addingInStoreCredit {
)");
}
my $activity = $session->config->get( "workflowActivities" );
push @{ $activity->{"None"} }, 'WebGUI::Workflow::Activity::PurgeOldInboxMessages';
$session->config->set( "workflowActivities", $activity );
print "DONE!\n" unless $quiet;
}
#-------------------------------------------------
sub upgradeEMS {

View file

@ -92,13 +92,36 @@ sub canAdd {
#-------------------------------------------------------------------
sub canEdit {
my $self = shift;
return (($self->session->form->process("func") eq "add" || ($self->session->form->process("assetId") eq "new" && $self->session->form->process("func") eq "editSave" && $self->session->form->process("class","className") eq "WebGUI::Asset::Post")) && $self->getThread->getParent->canPost) || # account for new posts
my $self = shift;
my $userId = shift || $self->session->user->userId;
my $session = $self->session;
my $form = $self->session->form;
my $user = WebGUI::User->new( $session, $userId );
($self->isPoster && $self->getThread->getParent->get("editTimeout") > ($self->session->datetime->time() - $self->get("revisionDate"))) ||
$self->session->user->isInGroup($self->getThread->getParent->get('groupToEditPost')) ||
$self->getThread->getParent->canEdit;
# Handle adding new posts
if (
( $form->get("func") eq "add"
|| ( $form->get("func") eq "editSave" && $form->get("assetId") eq "new" )
)
&& $form->get("class") eq "WebGUI::Asset::Post"
) {
return $self->getThread->getParent->canPost;
}
# User who posted can edit their own post
if ( $self->isPoster( $userId ) ) {
my $editTimeout = $self->getThread->getParent->get( 'editTimeout' );
if ( $editTimeout > time - $self->get( "revisionDate" ) ) {
return 1;
}
}
# Users in groupToEditPost of the Collab can edit any post
if ( $user->isInGroup( $self->getThread->getParent->get('groupToEditPost') ) ) {
return 1;
}
return $self->getThread->getParent->canEdit( $userId );
}
#-------------------------------------------------------------------
@ -690,15 +713,16 @@ sub isNew {
#-------------------------------------------------------------------
=head2 isPoster ( )
=head2 isPoster ( userId )
Returns a boolean that is true if the current user created this post and is not a visitor.
=cut
sub isPoster {
my $self = shift;
return ($self->session->user->userId ne "1" && $self->session->user->userId eq $self->get("ownerUserId"));
my $self = shift;
my $userId = shift || $self->session->user->userId;
return ( $userId ne "1" && $userId eq $self->get("ownerUserId") );
}

View file

@ -47,14 +47,19 @@ sub canAdd {
#-------------------------------------------------------------------
sub canReply {
my $self = shift;
return !$self->isThreadLocked && $self->getParent->get("allowReplies") && $self->getParent->canPost;
my $self = shift;
my $userId = shift || $self->session->user->userId;
return !$self->isThreadLocked
&& $self->getParent->get("allowReplies")
&& $self->getParent->canPost( $userId )
;
}
#-------------------------------------------------------------------
sub canSubscribe {
my $self = shift;
return ($self->session->user->userId ne "1" && $self->canView);
my $self = shift;
my $userId = shift || $self->session->user->userId;
return ($userId ne "1" && $self->canView( $userId ) );
}
#-------------------------------------------------------------------

View file

@ -248,7 +248,8 @@ sub appendTemplateLabels {
#-------------------------------------------------------------------
sub canEdit {
my $self = shift;
my $self = shift;
my $userId = shift || $self->session->user->userId;
return (
(
(
@ -259,85 +260,109 @@ sub canEdit {
$self->session->form->process("class") eq "WebGUI::Asset::Post::Thread"
)
) &&
$self->canPost
) || # account for new posts
$self->SUPER::canEdit()
$self->canStartThread( $userId )
) || # account for new threads
$self->SUPER::canEdit( $userId )
);
}
#-------------------------------------------------------------------
sub canModerate {
my $self = shift;
return $self->SUPER::canEdit;
my $self = shift;
my $userId = shift || $self->session->user->userId;
return $self->SUPER::canEdit( $userId );
}
#-------------------------------------------------------------------
sub canPost {
my $self = shift;
return (
(
$self->get("status") eq "approved" ||
$self->getTagCount > 1 # checks to make sure that the cs has been committed at least once
) && (
$self->session->user->isInGroup($self->get("postGroupId"))
|| $self->SUPER::canEdit
)
);
my $self = shift;
my $userId = shift;
my $session = $self->session;
my $user = $userId
? WebGUI::User->new( $session, $userId )
: $self->session->user
;
# checks to make sure that the cs has been committed at least once
if ( $self->get("status") ne "approved" && $self->getTagCount <= 1 ) {
return 0;
}
# Users in the postGroupId can post
elsif ( $user->isInGroup( $self->get("postGroupId") ) ) {
return 1;
}
# Users who can edit the collab can post
else {
return $self->SUPER::canEdit( $userId );
}
}
#-------------------------------------------------------------------
sub canSubscribe {
my $self = shift;
return ($self->session->user->userId ne "1" && $self->canView);
my $self = shift;
my $userId = shift;
my $session = $self->session;
my $user = $userId
? WebGUI::User->new( $session, $userId )
: $self->session->user
;
return ($user->userId ne "1" && $self->canView( $userId ) );
}
#-------------------------------------------------------------------
sub canStartThread {
my $self = shift;
return (
(
$self->get("status") eq "approved" ||
$self->getTagCount > 1 # checks to make sure that the cs has been committed at least once
) && (
$self->session->user->isInGroup($self->get("canStartThreadGroupId"))
|| $self->SUPER::canEdit
)
);
my $self = shift;
my $userId = shift;
my $session = $self->session;
my $user = $userId
? WebGUI::User->new( $session, $userId )
: $self->session->user
;
return (
(
$self->get("status") eq "approved" ||
$self->getTagCount > 1 # checks to make sure that the cs has been committed at least once
) && (
$user->isInGroup($self->get("canStartThreadGroupId"))
|| $self->SUPER::canEdit( $userId )
)
);
}
#-------------------------------------------------------------------
sub canView {
my $self = shift;
return $self->SUPER::canView || $self->canPost;
my $userId = shift || $self->session->user->userId;
return $self->SUPER::canView( $userId ) || $self->canPost( $userId );
}
#-------------------------------------------------------------------
sub commit {
my $self = shift;
$self->SUPER::commit;
my $cron = undef;
if ($self->get("getMailCronId")) {
$cron = WebGUI::Workflow::Cron->new($self->session, $self->get("getMailCronId"));
}
my $i18n = WebGUI::International->new($self->session, "Asset_Collaboration");
unless (defined $cron) {
$cron = WebGUI::Workflow::Cron->create($self->session, {
title=>$self->getTitle." ".$i18n->get("mail"),
minuteOfHour=>"*/".($self->get("getMailInterval")/60),
className=>(ref $self),
methodName=>"new",
parameters=>$self->getId,
workflowId=>"csworkflow000000000001"
});
$self->update({getMailCronId=>$cron->getId});
}
if ($self->get("getMail")) {
$cron->set({enabled=>1,title=>$self->getTitle." ".$i18n->get("mail"), minuteOfHour=>"*/".($self->get("getMailInterval")/60)});
} else {
$cron->set({enabled=>0,title=>$self->getTitle." ".$i18n->get("mail"), minuteOfHour=>"*/".($self->get("getMailInterval")/60)});
}
my $self = shift;
$self->SUPER::commit;
my $cron = undef;
if ($self->get("getMailCronId")) {
$cron = WebGUI::Workflow::Cron->new($self->session, $self->get("getMailCronId"));
}
my $i18n = WebGUI::International->new($self->session, "Asset_Collaboration");
unless (defined $cron) {
$cron = WebGUI::Workflow::Cron->create($self->session, {
title=>$self->getTitle." ".$i18n->get("mail"),
minuteOfHour=>"*/".($self->get("getMailInterval")/60),
className=>(ref $self),
methodName=>"new",
parameters=>$self->getId,
workflowId=>"csworkflow000000000001"
});
$self->update({getMailCronId=>$cron->getId});
}
if ($self->get("getMail")) {
$cron->set({enabled=>1,title=>$self->getTitle." ".$i18n->get("mail"), minuteOfHour=>"*/".($self->get("getMailInterval")/60)});
} else {
$cron->set({enabled=>0,title=>$self->getTitle." ".$i18n->get("mail"), minuteOfHour=>"*/".($self->get("getMailInterval")/60)});
}
}
#-------------------------------------------------------------------

View file

@ -0,0 +1,124 @@
package WebGUI::Workflow::Activity::PurgeOldInboxMessages;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2008 Plain Black Corporation.
-------------------------------------------------------------------
Please read the legal notices (docs/legal.txt) and the license
(docs/license.txt) that came with this distribution before using
this software.
-------------------------------------------------------------------
http://www.plainblack.com info@plainblack.com
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Workflow::Activity';
use WebGUI::Asset;
=head1 NAME
Package WebGUI::Workflow::Activity::PurgeOldInboxMessages
=head1 DESCRIPTION
Removes old, completed inbox messages from the database
=head1 SYNOPSIS
See WebGUI::Workflow::Activity for details on how to use any activity.
=head1 METHODS
These methods are available from this class:
=cut
#-------------------------------------------------------------------
=head2 definition ( session, definition )
See WebGUI::Workflow::Activity::defintion() for details.
=cut
sub definition {
my $class = shift;
my $session = shift;
my $definition = shift;
my $i18n = WebGUI::International->new($session, "Workflow_Activity_PurgeOldInboxMessages");
push @{$definition}, {
name => $i18n->get("activityName"),
properties => {
purgeAfter => {
fieldType => "interval",
defaultValue => 60 * 60 * 24 * 365,
label => $i18n->get("editForm purgeAfter label"),
hoverHelp => $i18n->get("editForm purgeAfter description"),
},
},
};
return $class->SUPER::definition($session,$definition);
}
#-------------------------------------------------------------------
=head2 execute ( )
See WebGUI::Workflow::Activity::execute() for details.
=cut
sub execute {
my ($self, $nothing, $instance) = @_;
my $session = $self->session;
my $log = $session->errorHandler;
# keep track of how much time it's taking
my $start = time;
# Only purge this many per operation to prevent MySQL returning
# a half-million rows (which will take longer than the time we have)
my $limit = 2_500;
my $sth
= $session->db->read(
"SELECT messageId FROM inbox WHERE completedOn IS NOT NULL AND dateStamp < ? ORDER BY dateStamp ASC LIMIT $limit",
[ $start - $self->get('purgeAfter') ],
);
while ( ( my $messageId ) = $sth->array ) {
$session->db->write(
"DELETE FROM inbox WHERE messageId = ?",
[ $messageId ],
);
# give up if we're taking too long
if (time - $start > 120) {
$sth->finish;
return $self->WAITING;
}
}
# If there are more messages waiting to be purged, return WAITING
if ( $sth->rows >= $limit ) {
return $self->WAITING;
}
else {
return $self->COMPLETE;
}
}
1;

View file

@ -0,0 +1,25 @@
package WebGUI::i18n::English::Workflow_Activity_PurgeOldInboxMessages;
use strict;
our $I18N = {
'activityName' => {
message => q{Purge Old Inbox Messages},
lastUpdated => 0,
context => 'Title of workflow activity',
},
'editForm purgeAfter label' => {
message => q{Purge After},
lastUpdated => 0,
context => 'Label for workflow property',
},
'editForm purgeAfter description' => {
message => q{The length of time a message is allowed to remain in the inbox after it has been set to "completed"},
lastUpdated => 0,
context => 'Description of workflow property',
},
};
1;

View file

@ -65,9 +65,16 @@ $versionTags[-1]->commit;
#----------------------------------------------------------------------------
# Tests
plan tests => 9; # Increment this number for each test you create
if ( !eval { require Test::WWW::Mechanize; 1; } ) {
plan skip_all => 'Cannot load Test::WWW::Mechanize. Will not test.';
}
$mech = Test::WWW::Mechanize->new;
$mech->get( $baseUrl );
if ( !$mech->success ) {
plan skip_all => "Cannot load URL '$baseUrl'. Will not test.";
}
use_ok( 'Test::WWW::Mechanize' ) or BAIL_OUT("Cannot continue without Test::WWW::Mechanize");
plan tests => 8; # Increment this number for each test you create
#----------------------------------------------------------------------------
# Add event: Users without permission are not shown form

View file

@ -31,6 +31,9 @@ my %oldSettings;
# userFunctionStyleId
$oldSettings{ userFunctionStyleId } = $session->setting->get( 'userFunctionStyleId' );
$session->setting->set( 'userFunctionStyleId', 'PBtmpl0000000000000132' );
# specialState
$oldSettings{ specialState } = $session->setting->get( 'specialState' );
$session->setting->set( 'specialState', '' );
# Create a user for testing purposes
my $user = WebGUI::User->new( $session, "new" );
@ -67,62 +70,66 @@ my $photo;
#----------------------------------------------------------------------------
# Tests
plan tests => 6; # Increment this number for each test you create
if ( !eval { require Test::WWW::Mechanize; 1; } ) {
plan skip_all => 'Cannot load Test::WWW::Mechanize. Will not test.';
}
$mech = Test::WWW::Mechanize->new;
$mech->get( $baseUrl );
if ( !$mech->success ) {
plan skip_all => "Cannot load URL '$baseUrl'. Will not test.";
}
SKIP: {
plan tests => 5; # Increment this number for each test you create
use_ok( 'Test::WWW::Mechanize' ) or skip( "Cannot continue without Test::WWW::Mechanize", 5 );
#----------------------------------------------------------------------------
# Test permissions for new photos
$mech = Test::WWW::Mechanize->new;
#----------------------------------------------------------------------------
# Test permissions for new photos
$mech = Test::WWW::Mechanize->new;
# Save a new photo
$mech->get( $baseUrl . $album->getUrl("func=add;class=WebGUI::Asset::File::GalleryFile::Photo") );
$mech->content_lacks( 'value="editSave"' );
# Save a new photo
$mech->get( $baseUrl . $album->getUrl("func=add;class=WebGUI::Asset::File::GalleryFile::Photo") );
$mech->content_lacks( 'value="editSave"' );
#----------------------------------------------------------------------------
# Test creating a new Photo
SKIP: {
skip "File control needs to be fixed to be more 508-compliant before this can be used", 4;
$mech = getMechLogin( $baseUrl, $user, $identifier );
$mech->get_ok( $baseUrl . $album->getUrl("func=add;class=WebGUI::Asset::File::GalleryFile::Photo") );
#----------------------------------------------------------------------------
# Test creating a new Photo
SKIP: {
skip "File control needs to be fixed to be more 508-compliant before this can be used", 4;
$mech = getMechLogin( $baseUrl, $user, $identifier );
$mech->get_ok( $baseUrl . $album->getUrl("func=add;class=WebGUI::Asset::File::GalleryFile::Photo") );
open my $file, '<', WebGUI::Test->getTestCollateralPath( 'lamp.jpg' )
or die( "Couldn't open test collateral 'lamp.jpg' for reading: $!" );
my $properties = {
title => 'Photo Title' . time,
synopsis => '<p>Photo Synopsis' . time . '</p>',
newFile_file => $file,
};
open my $file, '<', WebGUI::Test->getTestCollateralPath( 'lamp.jpg' )
or die( "Couldn't open test collateral 'lamp.jpg' for reading: $!" );
my $properties = {
title => 'Photo Title' . time,
synopsis => '<p>Photo Synopsis' . time . '</p>',
newFile_file => $file,
};
$mech->submit_form_ok(
{
form_number => 1,
fields => $properties,
},
'Submit new Photo'
);
$mech->submit_form_ok(
{
form_number => 1,
fields => $properties,
},
'Submit new Photo'
);
# Add properties that should be default and remove those that should be different
delete $properties->{ newFile_file };
$properties = {
%{ $properties },
ownerUserId => $user->userId,
filename => 'lamp.jpg',
};
# Add properties that should be default and remove those that should be different
delete $properties->{ newFile_file };
$properties = {
%{ $properties },
ownerUserId => $user->userId,
filename => 'lamp.jpg',
};
# Make sure properties were saved
my $photo = WebGUI::Asset->newByDynamicClass( $session, $album->getFileIds->[0] );
cmp_deeply( $photo->get, superhashof( $properties ), "Photo properties saved correctly" );
# Make sure properties were saved
my $photo = WebGUI::Asset->newByDynamicClass( $session, $album->getFileIds->[0] );
cmp_deeply( $photo->get, superhashof( $properties ), "Photo properties saved correctly" );
# First File in an album should update assetIdThumbnail
my $album = WebGUI::Asset->newByDynamicClass( $session, $album->getId );
is(
$album->get('assetIdThumbnail'), $photo->getId,
"Album assetIdThumbnail gets set by first File added",
);
}
# First File in an album should update assetIdThumbnail
my $album = WebGUI::Asset->newByDynamicClass( $session, $album->getId );
is(
$album->get('assetIdThumbnail'), $photo->getId,
"Album assetIdThumbnail gets set by first File added",
);
}
#----------------------------------------------------------------------------

View file

@ -0,0 +1,129 @@
# vim:syntax=perl
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2008 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#------------------------------------------------------------------
# Write a little about what this script tests.
#
#
use FindBin;
use strict;
use lib "$FindBin::Bin/../../../lib";
use Test::More;
use WebGUI::Test; # Must use this before any other WebGUI modules
use WebGUI::Session;
use WebGUI::Test::Maker::Permission;
#----------------------------------------------------------------------------
# Init
my $session = WebGUI::Test->session;
$session->user( { userId => 3 } );
my $maker = WebGUI::Test::Maker::Permission->new;
my $node = WebGUI::Asset->getImportNode( $session );
my %user;
$user{"2"} = WebGUI::User->new( $session, "new" );
$user{"2"}->addToGroups( ['2'] ); # Registered user
my $versionTag = WebGUI::VersionTag->getWorking( $session );
$versionTag->set( { name => "Collaboration Test" } );
my @addArgs = ( undef, undef, { skipAutoCommitWorkflows => 1 } );
my $collab
= $node->addChild({
className => "WebGUI::Asset::Wobject::Collaboration",
groupIdView => 7, # Everyone
groupIdEdit => 3, # Admins
groupToEditPost => 3, # Admins
ownerUserId => 3, # Admin
postGroupId => 2, # Registered Users
canStartThreadGroupId => 3, # Admin
allowReplies => 1,
editTimeout => 60 * 60 * 24, # 24 hours
}, @addArgs );
my $thread
= $collab->addChild({
className => 'WebGUI::Asset::Post::Thread',
ownerUserId => $user{"2"}->userId,
groupIdView => 7,
}, @addArgs );
$versionTag->commit( { timeout => 1_000_000 } );
# Re-load the collab to get the newly committed properties
$collab = WebGUI::Asset->newByDynamicClass( $session, $collab->getId );
$thread = WebGUI::Asset->newByDynamicClass( $session, $thread->getId );
#----------------------------------------------------------------------------
# Tests
plan tests => 36;
#----------------------------------------------------------------------------
# Permissions for threads
# View
$maker->prepare( {
object => $thread,
method => 'canView',
pass => [ '1', $user{"2"}, '3', ],
} )->run;
# Subscribe
$maker->prepare( {
object => $thread,
method => 'canSubscribe',
pass => [ $user{"2"}, '3', ],
fail => [ '1', ],
} )->run;
# Edit
$maker->prepare( {
object => $thread,
method => 'canEdit',
pass => [ $user{"2"}, '3', ],
fail => [ '1', ],
} )->run;
# Reply
$maker->prepare( {
object => $thread,
method => 'canReply',
pass => [ $user{"2"}, '3', ],
fail => [ '1', ],
} )->run;
# Reply with allowReplies = 0
$collab->update({ allowReplies => 0 });
$thread = WebGUI::Asset->newByDynamicClass( $session, $thread->getId );
$maker->prepare( {
object => $thread,
method => 'canReply',
fail => [ '1', $user{"2"}, '3', ],
} )->run;
$collab->update({ allowReplies => 1 });
# Reply with thread isLocked
$thread->lock;
$maker->prepare( {
object => $thread,
method => 'canReply',
fail => [ '1', $user{"2"}, '3', ],
} )->run;
$thread->unlock;
#----------------------------------------------------------------------------
# Cleanup
END {
for my $user ( values %user ) {
$user->delete;
}
$versionTag->rollback;
}

100
t/Asset/Post/permission.t Normal file
View file

@ -0,0 +1,100 @@
# vim:syntax=perl
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2008 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#------------------------------------------------------------------
# Write a little about what this script tests.
#
#
use FindBin;
use strict;
use lib "$FindBin::Bin/../../lib";
use Test::More;
use WebGUI::Test; # Must use this before any other WebGUI modules
use WebGUI::Session;
use WebGUI::Test::Maker::Permission;
#----------------------------------------------------------------------------
# Init
my $session = WebGUI::Test->session;
$session->user( { userId => 3 } );
my $maker = WebGUI::Test::Maker::Permission->new;
my $node = WebGUI::Asset->getImportNode( $session );
my %user;
$user{"2"} = WebGUI::User->new( $session, "new" );
$user{"2"}->addToGroups( ['2'] ); # Registered user
my $versionTag = WebGUI::VersionTag->getWorking( $session );
$versionTag->set( { name => "Collaboration Test" } );
my @addArgs = ( undef, undef, { skipAutoCommitWorkflows => 1 } );
my $collab
= $node->addChild({
className => "WebGUI::Asset::Wobject::Collaboration",
groupIdView => 7, # Everyone
groupIdEdit => 3, # Admins
groupToEditPost => 3, # Admins
ownerUserId => 3, # Admin
postGroupId => 2, # Registered Users
canStartThreadGroupId => 3, # Admin
allowReplies => 1,
editTimeout => 60 * 60 * 24, # 24 hours
}, @addArgs );
my $thread
= $collab->addChild({
className => 'WebGUI::Asset::Post::Thread',
ownerUserId => $user{"2"}->userId,
}, @addArgs );
my $post
= $thread->addChild({
className => 'WebGUI::Asset::Post',
ownerUserId => $user{"2"}->userId,
}, @addArgs );
$versionTag->commit( { timeout => 1_000_000 } );
# Re-load the collab to get the newly committed properties
$collab = WebGUI::Asset->newByDynamicClass( $session, $collab->getId );
$thread = WebGUI::Asset->newByDynamicClass( $session, $thread->getId );
$post = WebGUI::Asset->newByDynamicClass( $session, $post->getId );
#----------------------------------------------------------------------------
# Tests
plan tests => 12;
#----------------------------------------------------------------------------
# Permissions for posts
# View
$maker->prepare( {
object => $post,
method => 'canView',
pass => [ '1', $user{"2"}, '3', ],
} )->run;
# Edit
$maker->prepare( {
object => $post,
method => 'canEdit',
pass => [ $user{"2"}, '3', ],
fail => [ '1', ],
} )->run;
#----------------------------------------------------------------------------
# Cleanup
END {
for my $user ( values %user ) {
$user->delete;
}
$versionTag->rollback;
}

View file

@ -33,10 +33,13 @@ my %oldSettings;
# userFunctionStyleId
$oldSettings{ userFunctionStyleId } = $session->setting->get( 'userFunctionStyleId' );
$session->setting->set( 'userFunctionStyleId', 'PBtmpl0000000000000132' );
# specialState
$oldSettings{ specialState } = $session->setting->get( 'specialState' );
$session->setting->set( 'specialState', '' );
# Create a user for testing purposes
my $user = WebGUI::User->new( $session, "new" );
$user->username( 'dufresne' . time );
$user->username( 'dufresne' );
my $identifier = 'ritahayworth';
my $auth = WebGUI::Operation::Auth::getInstance( $session, $user->authMethod, $user->userId );
$auth->saveParams( $user->userId, $user->authMethod, {
@ -65,9 +68,16 @@ $versionTags[-1]->commit;
#----------------------------------------------------------------------------
# Tests
plan tests => 13; # Increment this number for each test you create
if ( !eval { require Test::WWW::Mechanize; 1; } ) {
plan skip_all => 'Cannot load Test::WWW::Mechanize. Will not test.';
}
$mech = Test::WWW::Mechanize->new;
$mech->get( $baseUrl );
if ( !$mech->success ) {
plan skip_all => "Cannot load URL '$baseUrl'. Will not test.";
}
use_ok( 'Test::WWW::Mechanize' );
plan tests => 12; # Increment this number for each test you create
#----------------------------------------------------------------------------
# Test operation with a public Redirect

View file

@ -0,0 +1,115 @@
# vim:syntax=perl
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2008 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#------------------------------------------------------------------
# Write a little about what this script tests.
#
#
use FindBin;
use strict;
use lib "$FindBin::Bin/../../../lib";
use Test::More;
use WebGUI::Test; # Must use this before any other WebGUI modules
use WebGUI::Session;
use WebGUI::Test::Maker::Permission;
#----------------------------------------------------------------------------
# Init
my $session = WebGUI::Test->session;
$session->user( { userId => 3 } );
my $maker = WebGUI::Test::Maker::Permission->new;
my $node = WebGUI::Asset->getImportNode( $session );
my %user;
$user{"2"} = WebGUI::User->new( $session, "new" );
$user{"2"}->addToGroups( ['2'] ); # Registered user
my $versionTag = WebGUI::VersionTag->getWorking( $session );
$versionTag->set( { name => "Collaboration Test" } );
my @addArgs = ( undef, undef, { skipAutoCommitWorkflows => 1 } );
my $collab
= $node->addChild({
className => "WebGUI::Asset::Wobject::Collaboration",
groupIdView => 7, # Everyone
groupIdEdit => 3, # Admins
ownerUserId => 3, # Admin
postGroupId => 2, # Registered Users
canStartThreadGroupId => 3, # Admin
}, @addArgs );
$versionTag->commit( { timeout => 1_000_000 } );
# Re-load the collab to get the newly committed properties
$collab = WebGUI::Asset->newByDynamicClass( $session, $collab->getId );
#----------------------------------------------------------------------------
# Tests
plan tests => 36;
#----------------------------------------------------------------------------
# Permissions for collaboration systems
# View
$maker->prepare( {
object => $collab,
method => 'canView',
pass => [ '1', $user{"2"}, '3', ],
} )->run;
# Edit
$maker->prepare( {
object => $collab,
method => 'canEdit',
pass => [ '3', ],
fail => [ '1', $user{"2"}, ],
} )->run;
# Post
$maker->prepare( {
object => $collab,
method => 'canPost',
pass => [ $user{"2"}, '3', ],
fail => [ '1', ],
} )->run;
# Post Thread
$maker->prepare( {
object => $collab,
method => 'canStartThread',
pass => [ '3', ],
fail => [ '1', $user{"2"}, ],
} )->run;
# Subscribe
$maker->prepare( {
object => $collab,
method => 'canSubscribe',
pass => [ $user{"2"}, '3', ],
fail => [ '1', ],
} )->run;
# Moderate
$maker->prepare( {
object => $collab,
method => 'canModerate',
pass => [ '3', ],
fail => [ '1', $user{"2"}, ],
} )->run;
#----------------------------------------------------------------------------
# Cleanup
END {
for my $user ( values %user ) {
$user->delete;
}
$versionTag->rollback;
}

View file

@ -33,6 +33,9 @@ my %oldSettings;
# userFunctionStyleId
$oldSettings{ userFunctionStyleId } = $session->setting->get( 'userFunctionStyleId' );
$session->setting->set( 'userFunctionStyleId', 'PBtmpl0000000000000132' );
# specialState
$oldSettings{ specialState } = $session->setting->get( 'specialState' );
$session->setting->set( 'specialState', '' );
# Create a user for testing purposes
my $user = WebGUI::User->new( $session, "new" );
@ -62,6 +65,15 @@ $versionTags[-1]->commit;
#----------------------------------------------------------------------------
# Tests
if ( !eval { require Test::WWW::Mechanize; 1; } ) {
plan skip_all => 'Cannot load Test::WWW::Mechanize. Will not test.';
}
$mech = Test::WWW::Mechanize->new;
$mech->get( $baseUrl );
if ( !$mech->success ) {
plan skip_all => "Cannot load URL '$baseUrl'. Will not test.";
}
plan tests => 6; # Increment this number for each test you create
#----------------------------------------------------------------------------

View file

@ -38,6 +38,9 @@ my %oldSettings;
# userFunctionStyleId
$oldSettings{ userFunctionStyleId } = $session->setting->get( 'userFunctionStyleId' );
$session->setting->set( 'userFunctionStyleId', 'PBtmpl0000000000000132' );
# specialState
$oldSettings{ specialState } = $session->setting->get( 'specialState' );
$session->setting->set( 'specialState', '' );
# Create a user for testing purposes
my $USERNAME = 'dufresne';
@ -72,9 +75,16 @@ my $assetUrl = $baseUrl . $asset->get('url');
#----------------------------------------------------------------------------
# Tests
plan tests => 41; # Increment this number for each test you create
if ( !eval { require Test::WWW::Mechanize; 1; } ) {
plan skip_all => 'Cannot load Test::WWW::Mechanize. Will not test.';
}
$mech = Test::WWW::Mechanize->new;
$mech->get( $baseUrl );
if ( !$mech->success ) {
plan skip_all => "Cannot load URL '$baseUrl'. Will not test.";
}
use_ok( 'Test::WWW::Mechanize' );
plan tests => 40; # Increment this number for each test you create
#----------------------------------------------------------------------------
# no form: Test logging in on a normal page sends the user back to the same page

View file

@ -43,6 +43,9 @@ my %oldSettings;
# userFunctionStyleId
$oldSettings{ userFunctionStyleId } = $session->setting->get( 'userFunctionStyleId' );
$session->setting->set( 'userFunctionStyleId', 'PBtmpl0000000000000132' );
# specialState
$oldSettings{ specialState } = $session->setting->get( 'specialState' );
$session->setting->set( 'specialState', '' );
# Create a user for testing purposes
my $user = WebGUI::User->new( $session, "new" );
@ -62,9 +65,16 @@ my $baseUrl = 'http://' . $session->config->get('sitename')->[0];
#----------------------------------------------------------------------------
# Tests
plan tests => 1; # Increment this number for each test you create
if ( !eval { require Test::WWW::Mechanize; 1; } ) {
plan skip_all => 'Cannot load Test::WWW::Mechanize. Will not test.';
}
$mech = Test::WWW::Mechanize->new;
$mech->get( $baseUrl );
if ( !$mech->success ) {
plan skip_all => "Cannot load URL '$baseUrl'. Will not test.";
}
use_ok( 'Test::WWW::Mechanize' ) or BAIL_OUT( "Cannot continue without Test::WWW::Mechanize" );
plan tests => 1; # Increment this number for each test you create
#----------------------------------------------------------------------------
# put your tests here