From 9b6ec1f545da1cc4088ddf9cc117747954e58e65 Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Fri, 26 Feb 2016 17:57:55 +0000 Subject: Bug 1069799 - move the QA repository into the main repository r=LpSolit --- xt/selenium/edit_products_properties.t | 338 +++++++++++++++++++++++++++++++++ 1 file changed, 338 insertions(+) create mode 100644 xt/selenium/edit_products_properties.t (limited to 'xt/selenium/edit_products_properties.t') diff --git a/xt/selenium/edit_products_properties.t b/xt/selenium/edit_products_properties.t new file mode 100644 index 000000000..1f9851729 --- /dev/null +++ b/xt/selenium/edit_products_properties.t @@ -0,0 +1,338 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +use 5.10.1; +use strict; +use warnings; + +use FindBin qw($RealBin); +use lib "$RealBin/../lib"; + +use Test::More "no_plan"; + +use QA::Util; + +my ($sel, $config) = get_selenium(); + +my $admin_user_login = $config->{admin_user_login}; +my $unprivileged_user_login = $config->{unprivileged_user_login}; +my $permanent_user = $config->{permanent_user}; + +log_in($sel, $config, 'admin'); +set_parameters($sel, { "Bug Fields" => {"useclassification-off" => undef, + "usetargetmilestone-on" => undef}, + "Administrative Policies" => {"allowbugdeletion-on" => undef} + }); + +# Create a product and add components to it. Do some cleanup first +# if the script failed during a previous run. + +go_to_admin($sel); +$sel->click_ok("link=Products"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +# No risk to get the "Select classification" page. We turned off useclassification. +$sel->title_is("Select product"); + +my $text = trim($sel->get_text("bugzilla-body")); +if ($text =~ /(Kill me!|Kill me nicely)/) { + my $product = $1; + my $escaped_product = url_quote($product); + $sel->click_ok("//a[\@href='editproducts.cgi?action=del&product=$escaped_product']"); + $sel->wait_for_page_to_load_ok(WAIT_TIME); + $sel->title_is("Delete Product '$product'"); + $sel->click_ok("delete"); + $sel->wait_for_page_to_load_ok(WAIT_TIME); + $sel->title_is("Product Deleted"); +} + +$sel->click_ok("link=Add"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Add Product"); +$sel->type_ok("product", "Kill me!"); +$sel->type_ok("description", "I will disappear very soon. Do not add bugs to it."); +$sel->type_ok("defaultmilestone", "0.1a"); +# Since Bugzilla 4.0, the voting system is in an extension. +if ($config->{test_extensions}) { + $sel->type_ok("votesperuser", "1"); + $sel->type_ok("maxvotesperbug", "1"); + $sel->type_ok("votestoconfirm", "10"); +} +$sel->type_ok("version", "0.1a"); +$sel->type_ok("component", "first comp"); +$sel->type_ok("comp_desc", "comp 1"); +$sel->type_ok("initialowner", $admin_user_login); +$sel->click_ok("add-product"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Product Created"); + +# Try creating a second component with the same name. + +$sel->click_ok("link=Edit components:"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Select component of product 'Kill me!'"); +$sel->click_ok("link=Add"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Add component to the Kill me! product"); +$sel->type_ok("component", "first comp"); +$sel->type_ok("description", "comp 2"); +$sel->type_ok("initialowner", $admin_user_login); +$sel->click_ok("create"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Component Already Exists"); + +# Now really create a second component, with a distinct name. + +$sel->go_back_ok(); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->type_ok("component", "second comp"); +# FIXME - Re-enter the default assignee (regression due to bug 577574) +$sel->type_ok("initialowner", $admin_user_login); +$sel->type_ok("initialcc", $permanent_user); +$sel->click_ok("create"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Component Created"); + +# Add a new version. + +edit_product($sel, "Kill me!"); +$sel->click_ok("link=Edit versions:"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Select version of product 'Kill me!'"); +$sel->click_ok("link=Add"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->type_ok("version", "0.1"); +$sel->click_ok("create"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Version Created"); + +# Add a new milestone. + +$sel->click_ok("link='Kill me!'"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Edit Product 'Kill me!'"); +$sel->click_ok("link=Edit milestones:"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Select milestone of product 'Kill me!'"); +$sel->click_ok("link=Add"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Add Milestone to Product 'Kill me!'"); +$sel->type_ok("milestone", "0.2"); +$sel->type_ok("sortkey", "2"); +$sel->click_ok("create"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Milestone Created"); + +# Add another milestone. + +$sel->click_ok("link=Add"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Add Milestone to Product 'Kill me!'"); +$sel->type_ok("milestone", "0.1a"); +# Negative sortkeys are valid for milestones. +$sel->type_ok("sortkey", "-2"); +$sel->click_ok("create"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Milestone Already Exists"); +$sel->go_back_ok(); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->type_ok("milestone", "pre-0.1"); +$sel->click_ok("create"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Milestone Created"); + +# Now create an UNCONFIRMED bug and add it to the newly created product. + +file_bug_in_product($sel, "Kill me!"); +$sel->select_ok("version", "label=0.1a"); +$sel->select_ok("component", "label=first comp"); +# UNCONFIRMED must be present. +$sel->select_ok("bug_status", "label=UNCONFIRMED"); +$sel->type_ok("cc", $unprivileged_user_login); +$sel->type_ok("bug_file_loc", "http://www.test.com"); +my $bug_summary = "test create/edit product properties"; +$sel->type_ok("short_desc", $bug_summary); +$sel->type_ok("comment", "this bug will soon be dead"); +my $bug1_id = create_bug($sel, $bug_summary); +my @cc_list = $sel->get_select_options("cc"); +ok(grep($_ eq $unprivileged_user_login, @cc_list), "$unprivileged_user_login correctly added to the CC list"); +ok(!grep($_ eq $permanent_user, @cc_list), "$permanent_user not in the CC list for 'first comp' by default"); + +# File a second bug, and make sure users in the default CC list are added. +file_bug_in_product($sel, "Kill me!"); +$sel->select_ok("version", "label=0.1a"); +$sel->select_ok("component", "label=second comp"); +my $bug_summary2 = "check default CC list"; +$sel->type_ok("short_desc", $bug_summary2); +$sel->type_ok("comment", "is the CC list populated correctly?"); +create_bug($sel, $bug_summary2); +@cc_list = $sel->get_select_options("cc"); +ok(grep($_ eq $permanent_user, @cc_list), "$permanent_user in the CC list for 'second comp' by default"); + +# Edit product properties and set votes_to_confirm to 0, which has +# the side-effect to disable auto-confirmation (new behavior compared +# to Bugzilla 3.4 and older). + +edit_product($sel, "Kill me!"); +$sel->type_ok("product", "Kill me nicely"); +$sel->type_ok("description", "I will disappear very soon. Do not add bugs to it (except for testing)."); +$sel->select_ok("defaultmilestone", "label=0.2"); +if ($config->{test_extensions}) { + $sel->type_ok("votesperuser", "2"); + $sel->type_ok("maxvotesperbug", 5); + $sel->type_ok("votestoconfirm", "0"); +} +$sel->click_ok("update-product"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Updating Product 'Kill me nicely'"); +$sel->is_text_present_ok("Updated product name from 'Kill me!' to 'Kill me nicely'"); +$sel->is_text_present_ok("Updated description"); +$sel->is_text_present_ok("Updated default milestone"); +if ($config->{test_extensions}) { + $sel->is_text_present_ok("Updated votes per user"); + $sel->is_text_present_ok("Updated maximum votes per bug"); + $sel->is_text_present_ok("Updated number of votes needed to confirm a bug"); + $text = trim($sel->get_text("bugzilla-body")); + # We use .{1} in place of the right arrow character, which fails otherwise. + ok($text =~ /Checking unconfirmed bugs in this product for any which now have sufficient votes\.{3} .{1}there were none/, + "No bugs confirmed by popular votes (votestoconfirm = 0 disables auto-confirmation)"); + + # Now set votestoconfirm to 2, vote for a bug, and then set + # this attribute back to 1, to trigger auto-confirmation. + + $sel->click_ok("link=Kill me nicely"); + $sel->wait_for_page_to_load_ok(WAIT_TIME); + $sel->title_is("Edit Product 'Kill me nicely'", "Display properties of Kill me nicely"); + $sel->type_ok("votestoconfirm", 2); + $sel->click_ok("update-product"); + $sel->wait_for_page_to_load_ok(WAIT_TIME); + $sel->title_is("Updating Product 'Kill me nicely'"); + $sel->is_text_present_ok("Updated number of votes needed to confirm a bug"); + + go_to_bug($sel, $bug1_id); + $sel->click_ok("link=vote"); + $sel->wait_for_page_to_load_ok(WAIT_TIME); + $sel->title_is("Change Votes"); + $sel->type_ok("bug_$bug1_id", 1); + $sel->click_ok("change"); + $sel->wait_for_page_to_load_ok(WAIT_TIME); + $sel->title_is("Change Votes"); + $sel->is_text_present_ok("The changes to your votes have been saved"); + + edit_product($sel, "Kill me nicely"); + $sel->type_ok("votestoconfirm", 1); + $sel->click_ok("update-product"); + $sel->wait_for_page_to_load_ok(WAIT_TIME); + $sel->title_is("Updating Product 'Kill me nicely'"); + $sel->is_text_present_ok("Updated number of votes needed to confirm a bug"); + $text = trim($sel->get_text("bugzilla-body")); + ok($text =~ /Bug $bug1_id confirmed by number of votes/, "Bug $bug1_id is confirmed by popular votes"); +} + +# Edit the bug. + +go_to_bug($sel, $bug1_id); +$sel->selected_label_is("product", "Kill me nicely"); +$sel->selected_label_is("bug_status", "CONFIRMED") if $config->{test_extensions}; +$sel->select_ok("target_milestone", "label=pre-0.1"); +$sel->select_ok("component", "label=second comp"); +edit_bug_and_return($sel, $bug1_id, $bug_summary); +@cc_list = $sel->get_select_options("cc"); +ok(grep($_ eq $permanent_user, @cc_list), "User $permanent_user automatically added to the CC list"); + +# Delete the milestone the bug belongs to. This should retarget the bug +# to the default milestone. + +edit_product($sel, "Kill me nicely"); +$sel->click_ok("link=Edit milestones:"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Select milestone of product 'Kill me nicely'"); +$sel->click_ok('//a[@href="editmilestones.cgi?action=del&product=Kill%20me%20nicely&milestone=pre-0.1"]'); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Delete Milestone of Product 'Kill me nicely'"); +$text = trim($sel->get_text("bugzilla-body")); +ok($text =~ /There is 1 bug entered for this milestone/, "Warning displayed"); +ok($text =~ /Do you really want to delete this milestone\?/, "Requesting confirmation"); +$sel->click_ok("delete"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Milestone Deleted"); +$text = trim($sel->get_text("message")); +ok($text =~ /Bugs targetted to this milestone have been retargetted to the default milestone/, "Bug retargetted"); + +# Try deleting the version used by the bug. This action must be rejected. + +$sel->click_ok("link='Kill me nicely'"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Edit Product 'Kill me nicely'"); +$sel->click_ok("link=Edit versions:"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Select version of product 'Kill me nicely'"); +$sel->click_ok("//a[contains(\@href, 'editversions.cgi?action=del&product=Kill%20me%20nicely&version=0.1a')]"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Delete Version of Product 'Kill me nicely'"); +$text = trim($sel->get_text("bugzilla-body")); +ok($text =~ /Sorry, there are 2 outstanding bugs for this version/, "Rejecting version deletion"); +$sel->go_back_ok(); +$sel->wait_for_page_to_load_ok(WAIT_TIME); + +# Delete an unused version. The action must succeed. + +$sel->click_ok('//a[@href="editversions.cgi?action=del&product=Kill%20me%20nicely&version=0.1"]'); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Delete Version of Product 'Kill me nicely'"); +$text = trim($sel->get_text("bugzilla-body")); +ok($text =~ /Do you really want to delete this version\?/, "Requesting confirmation"); +$sel->click_ok("delete"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Version Deleted"); + +# Delete the component the bug belongs to. The action must succeed. + +$sel->click_ok("link='Kill me nicely'"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Edit Product 'Kill me nicely'"); +$sel->click_ok("link=Edit components:"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Select component of product 'Kill me nicely'"); +$sel->click_ok("//a[contains(\@href, 'editcomponents.cgi?action=del&product=Kill%20me%20nicely&component=second%20comp')]"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Delete component 'second comp' from 'Kill me nicely' product"); +$text = trim($sel->get_text("bugzilla-body")); +ok($text =~ /There are 2 bugs entered for this component/, "Warning displayed"); +ok($text =~ /Do you really want to delete this component\?/, "Requesting confirmation"); +$sel->click_ok("delete"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Component Deleted"); +$text = trim($sel->get_text("bugzilla-body")); +ok($text =~ /The component second comp has been deleted/, "Component deletion confirmed"); +ok($text =~ /All bugs being in this component and all references to them have also been deleted/, + "Bug deletion confirmed"); + +# Only one value for component, version and milestone available. They should +# be selected by default. + +file_bug_in_product($sel, "Kill me nicely"); +$bug_summary2 = "bye bye everybody!"; +$sel->type_ok("short_desc", $bug_summary2); +$sel->type_ok("comment", "I'm dead :("); +create_bug($sel, $bug_summary2); + +# Now delete the product. + +go_to_admin($sel); +$sel->click_ok("link=Products"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Select product"); +$sel->click_ok("//a[\@href='editproducts.cgi?action=del&product=Kill%20me%20nicely']"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Delete Product 'Kill me nicely'"); +$text = trim($sel->get_text("bugzilla-body")); +ok($text =~ /There is 1 bug entered for this product/, "Warning displayed"); +ok($text =~ /Do you really want to delete this product\?/, "Confirmation request displayed"); +$sel->click_ok("delete"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Product Deleted"); +logout($sel); -- cgit v1.2.3-24-g4f1b