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-67ecbb4d7f56master
parent
b6d719dbbe
commit
121c37d832
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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__
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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__
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue