Skip to content

Commit

Permalink
fixed #12142: Copy fails on imported threads
Browse files Browse the repository at this point in the history
  • Loading branch information
frodwith committed May 25, 2011
1 parent 90b37da commit d450ded
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 8 deletions.
1 change: 1 addition & 0 deletions docs/changelog/7.x.x.txt
@@ -1,5 +1,6 @@
7.10.18
- fixed #12141: Macro_RenderThingData (bad tags) nothing to translate
- fixed #12142: Copy fails on imported threads

7.10.17
- fixed: Forced to use a PayDriver even with a balance of 0 in the cart.
Expand Down
20 changes: 12 additions & 8 deletions lib/WebGUI/Asset/Post/Thread.pm
Expand Up @@ -265,14 +265,18 @@ Extends the base method to handle creating a new subscription group.
=cut

sub duplicate {
my $self = shift;
my $session = $self->session;
my $copy = $self->SUPER::duplicate(@_);
if ($self->get('subscriptionGroupId')) {
my $group = WebGUI::Group->new($session, $self->get('subscriptionGroupId'));
my $copied_group = WebGUI::Group->new($session, 'new');
$copied_group->addUsers($group->getUsers('withoutExpired'));
$copy->update({subscriptionGroupId => $copied_group->getId});
my $self = shift;
my $session = $self->session;
my $copy = $self->SUPER::duplicate(@_);
my $oldGroupId = $self->get('subscriptionGroupId');

if ($oldGroupId) {
my $newGroup = WebGUI::Group->new($session, 'new');
my $oldGroup = WebGUI::Group->new($session, $oldGroupId);
if ($oldGroup) {
$newGroup->addUsers($oldGroup->getUsers('withoutExpired'));
}
$copy->update({subscriptionGroupId => $newGroup->getId});
}
return $copy;
}
Expand Down
48 changes: 48 additions & 0 deletions t/Asset/Post/Thread/bug_12142_duplicate.t
@@ -0,0 +1,48 @@
# vim:syntax=perl
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2009 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
#------------------------------------------------------------------

=head1 BUG DESCRIPTION
Thread's duplicate method fails if the subscriptionGroupId isn't a valid group
(for instance, if it was imported from another site). It should just not copy
the group in that case.
=cut

use warnings;
use strict;

use Test::More tests => 4;
use Test::Exception;
use FindBin;

use lib "$FindBin::Bin/../lib";
use WebGUI::Test;
use WebGUI::Asset;

my $session = WebGUI::Test->session;
my $thread = WebGUI::Asset->getImportNode($session)->addChild(
{
className => 'WebGUI::Asset::Post::Thread',
subscriptionGroupId => $session->id->generate(),
}
);
WebGUI::Test->addToCleanup($thread);

SKIP: {
my $copy;
skip('duplicate died', 3) unless
lives_ok { $copy = $thread->duplicate() } q"duplicate() doesn't die";
my $groupId = $copy->get('subscriptionGroupId');
ok $groupId, 'Copy has a group id';
isnt $groupId, $thread->get('subscriptionGroupId'), '...a different one';
ok(WebGUI::Group->new($session, $groupId), '...and it instantiates');
};
32 changes: 32 additions & 0 deletions t/_bug.skeleton
@@ -0,0 +1,32 @@
# vim:syntax=perl
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2009 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
#------------------------------------------------------------------

=head1 BUG DESCRIPTION
Blah blah blah, whatever the bug poster said in the initial post plus any
relevant clarification from the discussion thread.
=cut

use warnings;
use strict;

use Test::More tests => 0;
use FindBin;

use lib "$FindBin::Bin/../lib";
use WebGUI::Test;

my $session = WebGUI::Test->session;

# A bug test should test the bug it is named for and be placed in an
# appropriate place in the test tree. For example, if bug #34721 was a Snippet
# bug, it would go in t/Asset/Snippet/bug_34721_short_description.t.

0 comments on commit d450ded

Please sign in to comment.