Bug 72826, Bug 64428

Remove flag types and bugs inside tests
Add checkers sql refresh to checksetup
Fix Bugzilla flag retarget (change flag type on product/component change when flag type with same name is available)


git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1150 6955db30-a419-402b-8a0d-67ecbb4d7f56
master
vfilippov 2010-12-08 18:30:31 +00:00
parent b6d719dbbe
commit 121c37d832
7 changed files with 65 additions and 70 deletions

View File

@ -336,6 +336,7 @@ sub set_flag {
# Extract the current flag object from the object.
my ($obj_flagtype) = grep { $_->id == $flag->type_id } @{$obj->flag_types};
# If no flagtype can be found for this flag, this means the bug is being
# moved into a product/component where the flag is no longer valid.
# So either we can attach the flag to another flagtype having the same
@ -530,6 +531,7 @@ sub update_flags {
if ($self->isa('Bugzilla::Bug')
&& ($self->{_old_product_name} || $self->{_old_component_name}))
{
delete $self->{flag_types}; # very important (cleans cached flag types)
my @removed = $class->force_cleanup($self);
push(@old_summaries, @removed);
}
@ -553,7 +555,7 @@ sub retarget {
my $success = 0;
foreach my $flagtype (@flagtypes) {
next if !$flagtype->is_active;
next if (!$flagtype->is_multiplicable && scalar @{$flagtype->{flags}});
next if (!$flagtype->is_multiplicable && grep { $_->id != $self->id } @{$flagtype->{flags}});
next unless (($self->status eq '?' && $self->setter->can_request_flag($flagtype))
|| $self->setter->can_set_flag($flagtype));
@ -595,7 +597,8 @@ sub force_cleanup {
AND (bugs.component_id = e.component_id OR e.component_id IS NULL)',
undef, $bug->id);
push(@removed , $class->force_retarget($flag_ids, $bug));
push @removed, $class->force_retarget($flag_ids, $bug);
return @removed;
}

View File

@ -62,6 +62,7 @@ set_hook('custis', 'bug_pre_update', 'Checkers::bug_pre_update');
set_hook('custis', 'bug_end_of_update', 'Checkers::bug_end_of_update');
set_hook('custis', 'post_bug_post_create', 'Checkers::post_bug_post_create');
add_hook('custis', 'savedsearch_post_update', 'Checkers::savedsearch_post_update');
set_hook('custis', 'install_before_final_checks', 'Checkers::install_before_final_checks');
# Прочие хуки
set_hook('custis', 'auth_post_login', 'CustisMiscHooks::auth_post_login');

View File

@ -233,5 +233,13 @@ sub savedsearch_post_update
return 1;
}
# Конец checksetup'а - обновляем SQL-код проверок
sub install_before_final_checks
{
Bugzilla->request_cache->{user} = Bugzilla::User->super_user;
eval { $_->update } for Bugzilla::Checker->get_all;
return 1;
}
1;
__END__

View File

@ -50,7 +50,7 @@ sub flag_check_requestee_list
{
my $group_users = Bugzilla->dbh->selectall_arrayref(
'SELECT watcher.*, watched.login_name group_user FROM profiles watcher, watch, profiles watched WHERE watcher.userid=watch.watcher AND watched.userid=watch.watched AND watched.login_name IN ('.
join(',', ('?') x @$requestees).') AND watched.disable_mail AND watched.realname LIKE "Группа%"', {Slice=>{}}, @$requestees
join(',', ('?') x @$requestees).') AND watched.disable_mail>0 AND watched.realname LIKE \'Группа%\'', {Slice=>{}}, @$requestees
);
my %del = map { ($_->{group_user} => 1) } @$group_users;
@$requestees = ((grep { !$del{$_} } @$requestees), (map { $_->{login_name} } @$group_users));

View File

@ -20,13 +20,15 @@ use base qw(Exporter);
log_in
logout
file_bug_in_product
delete_bugs
go_to_admin
edit_product
add_product
open_advanced_search_page
set_parameters
delete_bugs
delete_flag_types
get_selenium
get_rpc_clients
@ -349,6 +351,11 @@ sub delete_bugs
$sel->select_ok("component", "label=KillerComponent");
$sel->click_ok("commit");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
if ($sel->get_title() =~ /Verify/)
{
$sel->click_ok("change_product");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
}
$sel->title_is("Bug $_ processed");
}
# Delete KillerComponent and all bugs in it
@ -364,5 +371,35 @@ sub delete_bugs
$sel->title_is("Component Deleted");
}
sub delete_flag_types
{
my ($sel, $config, $regexp) = @_;
go_to_admin($sel);
$sel->click_ok("link=Flags");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Administer Flag Types");
for ('flag_types_bugs', 'flag_types_attachments')
{
my $flagtype_count = $sel->get_xpath_count("//table[\@id='$_']/tbody/tr");
for (my $i = 2; $i <= $flagtype_count; $i++)
{
my $flag_name = trim($sel->get_text("//table[\@id='$_']/tbody/tr[$i]/td[1]"));
if ($flag_name =~ /$regexp/)
{
$sel->click_ok("//table[\@id='$_']/tbody/tr[$i]//a[contains(\@href,'action=confirmdelete')]");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Confirm Deletion of Flag Type '$flag_name'");
$sel->click_ok("link=Yes, delete");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Flag Type '$flag_name' Deleted");
my $msg = trim($sel->get_text("message"));
_ok($msg eq "The flag type $flag_name has been deleted.", "Flag type $flag_name deleted");
$flagtype_count = $sel->get_xpath_count("//table[\@id='$_']/tbody/tr");
$i--;
}
}
}
}
1;
__END__

View File

@ -19,30 +19,9 @@ my $test_patch_file = abs_path(dirname($0).'/../config/testfile.diff');
log_in($sel, $config, 'admin');
go_to_admin($sel);
$sel->click_ok("link=Flags");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Administer Flag Types");
# Delete flag types left from previous unsuccessful runs
for ('flag_types_bugs', 'flag_types_attachments')
{
my $flagtype_count = $sel->get_xpath_count("//table[\@id='$_']/tbody/tr");
for (my $i = 2; $i <= $flagtype_count; $i++)
{
my $flag_name = $sel->get_text("//table[\@id='$_']/tbody/tr[$i]/td[1]");
if ($flag_name =~ /Selenium(Bug|Attachment)Flag\d*Test/)
{
$sel->click_ok("//table[\@id='$_']/tbody/tr[$i]//a[contains(\@href,'action=confirmdelete')]");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Confirm Deletion of Flag Type '$flag_name'");
$sel->click_ok("link=Yes, delete");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Flag Type '$flag_name' Deleted");
$flagtype_count = $sel->get_xpath_count("//table[\@id='$_']/tbody/tr");
$i--;
}
}
}
delete_flag_types($sel, $config, qr/Selenium(Bug|Attachment)Flag\d*Test/);
$sel->click_ok("link=Create Flag Type for Bugs");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
@ -489,29 +468,9 @@ $sel->click_ok("update");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_like(qr/Changes Submitted to Attachment \d+ of Bug \d+/);
# It's time to delete all created flag types.
go_to_admin($sel);
$sel->click_ok("link=Flags");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Administer Flag Types");
foreach my $flagtype ([$flagtype1_id, "SeleniumBugFlag1Test"], [$flagtype2_id, "SeleniumBugFlag2Test"],
[$flagtype3_id, "SeleniumBugFlag3Test"], [$aflagtype1_id, "SeleniumAttachmentFlag1Test"],
[$aflagtype2_id, "SeleniumAttachmentFlag2Test"], [$aflagtype3_id, "SeleniumAttachmentFlag3Test"])
{
my $flag_id = $flagtype->[0];
my $flag_name = $flagtype->[1];
$sel->click_ok("//a[\@href='editflagtypes.cgi?action=confirmdelete&id=$flag_id']");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Confirm Deletion of Flag Type '$flag_name'");
$sel->click_ok("link=Yes, delete");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Flag Type '$flag_name' Deleted");
my $msg = trim($sel->get_text("message"));
ok($msg eq "The flag type $flag_name has been deleted.", "Flag type $flag_name deleted");
}
# It's time to delete all created flag types and bugs.
delete_flag_types($sel, $config, qr/Selenium(Bug|Attachment)Flag\d*Test/);
delete_bugs($sel, $config, [$bug1_id]);
logout($sel);

View File

@ -18,6 +18,9 @@ my ($sel, $config) = get_selenium(CHROME_MODE);
# Start by creating a flag type for bugs.
log_in($sel, $config, 'admin');
delete_flag_types($sel, $config, qr/^selenium(_review)?$/);
go_to_admin($sel);
$sel->click_ok("link=Flags");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
@ -172,8 +175,6 @@ $sel->select_ok("product", "label=TestProduct2");
$sel->type_ok("comment", "Moving to TestProduct2 / c1. The flag should be preserved.");
$sel->click_ok("commit");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Verify New Product Details...");
$sel->select_ok("component", "label=c1");
$sel->click_ok("change_product");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Bug $bug1_id processed");
@ -208,6 +209,7 @@ _ok(!$sel->is_editable("flag_type-$flagtype1_id"), "The selenium bug flag type i
$sel->select_ok("component", "label=c1");
$sel->is_editable_ok("flag_type-$flagtype1_id", "The selenium bug flag type is not selectable");
$sel->select_ok("flag_type-$flagtype1_id", "label=?");
$sel->type_ok("requestee_type-$flagtype1_id", " ");
$sel->type_ok("short_desc", "Create a new selenium flag for c2");
$sel->type_ok("comment", ".");
$sel->click_ok("commit");
@ -307,7 +309,7 @@ $sel->select_ok("product", "label=TestProduct");
$sel->type_ok("comment", "selenium flag will be lost. I don't have editbugs privs.");
$sel->click_ok("commit");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Verify New Product Details...");
$sel->title_is("Verify Field Values");
$sel->select_ok("component", "index=0") if $sel->is_text_present("Component:");
$sel->select_ok("target_milestone", "index=0") if $sel->is_text_present("Target Milestone:");
$sel->select_ok("version", "index=0") if $sel->is_text_present("Version:");
@ -322,26 +324,11 @@ _ok(!$sel->is_editable("flag_type-$flagtype1_id"), "Flag type 'selenium' not edi
_ok(!$sel->is_element_present("flag_type-$flagtype2_id"), "Flag type not available in c1");
logout($sel);
# Time to delete created flag types.
# Time to delete created flag types and bugs.
log_in($sel, $config, 'admin');
go_to_admin($sel);
$sel->click_ok("link=Flags");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Administer Flag Types");
foreach my $flagtype ([$flagtype1_id, "selenium"], [$flagtype2_id, "selenium"],
[$aflagtype1_id, "selenium_review"], [$aflagtype2_id, "selenium_review"])
{
my $flag_id = $flagtype->[0];
my $flag_name = $flagtype->[1];
$sel->click_ok("//a[\@href='editflagtypes.cgi?action=confirmdelete&id=$flag_id']");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Confirm Deletion of Flag Type '$flag_name'");
$sel->click_ok("link=Yes, delete");
$sel->wait_for_page_to_load_ok(WAIT_TIME);
$sel->title_is("Flag Type '$flag_name' Deleted");
my $msg = trim($sel->get_text("message"));
ok($msg eq "The flag type $flag_name has been deleted.", "Flag type $flag_name deleted");
}
delete_flag_types($sel, $config, qr/^selenium(_review)?$/);
delete_bugs($sel, $config, [$bug1_id, $bug2_id]);
logout($sel);