From a6238e079b4e8e62d3e23f019e0895c626133c83 Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Thu, 25 Jun 2015 03:35:16 +0000 Subject: Bug 1144485: Adapt upstream Selenium test suite to BMO --- qa/t/test_votes.t | 251 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 qa/t/test_votes.t (limited to 'qa/t/test_votes.t') diff --git a/qa/t/test_votes.t b/qa/t/test_votes.t new file mode 100644 index 000000000..99b191c80 --- /dev/null +++ b/qa/t/test_votes.t @@ -0,0 +1,251 @@ +# 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 strict; +use warnings; +use lib qw(lib); + +use Test::More "no_plan"; + +use QA::Util; + +my ($sel, $config) = get_selenium(); + +unless ($config->{test_extensions}) { + ok(1, "this installation doesn't test extensions. Skipping test_votes.t completely."); + exit; +} + +log_in($sel, $config, 'admin'); +set_parameters($sel, { "Bug Fields" => {"useclassification-off" => undef}, + "Administrative Policies" => {"allowbugdeletion-on" => undef} + }); + +# Create a new product, so that we can safely play with vote settings. + +add_product($sel); +$sel->type_ok("product", "Eureka"); +$sel->type_ok("description", "A great new product"); +$sel->type_ok("votesperuser", 10); +$sel->type_ok("maxvotesperbug", 5); +$sel->type_ok("votestoconfirm", 3); +$sel->select_ok("default_op_sys_id", "Unspecified"); +$sel->select_ok("default_platform_id", "Unspecified"); +$sel->click_ok('//input[@type="submit" and @value="Add"]'); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Product Created"); +$sel->click_ok("link=add at least one component"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Add component to the Eureka product"); +$sel->type_ok("component", "Pegasus"); +$sel->type_ok("description", "A constellation in the north hemisphere."); +$sel->type_ok("initialowner", $config->{permanent_user}, "Setting the default owner"); +$sel->uncheck_ok("watch_user_auto"); +$sel->type_ok("watch_user", "pegasus\@eureka.bugs"); +$sel->check_ok("watch_user_auto"); +$sel->click_ok("create"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Component Created"); +my $text = trim($sel->get_text("message")); +ok($text =~ qr/The component Pegasus has been created/, "Component 'Pegasus' created"); + +# Create a new bug with the CONFIRMED status. + +file_bug_in_product($sel, 'Eureka'); +# CONFIRMED must be the default bug status for users with editbugs privs. +$sel->selected_label_is("bug_status", "CONFIRMED"); +$sel->type_ok("short_desc", "Aries"); +$sel->type_ok("comment", "1st constellation"); +$sel->click_ok("commit"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->is_text_present_ok('has been added to the database'); +my $bug1_id = $sel->get_value('//input[@name="id" and @type="hidden"]'); + +# Now vote for this bug. + +$sel->click_ok("link=vote"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Change Votes"); +# No comment :-/ +my $full_text = trim($sel->get_body_text()); +# OK, this is not the most robust regexp, but that's better than nothing. +ok($full_text =~ /only 5 votes allowed per bug in this product/, + "Notice about the number of votes allowed per bug displayed"); +$sel->type_ok("bug_$bug1_id", 4); +$sel->click_ok("change"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Change Votes"); +$full_text = trim($sel->get_body_text()); +# OK, we may get a false positive if another product has the exact same numbers, +# but I have no better idea to check this information. +ok($full_text =~ /4 votes used out of 10 allowed/, "Display the number of votes used"); + +# File a new bug, now as UNCONFIRMED. We will confirm it by popular votes. + +file_bug_in_product($sel, 'Eureka'); +$sel->select_ok("bug_status", "UNCONFIRMED"); +$sel->type_ok("short_desc", "Taurus"); +$sel->type_ok("comment", "2nd constellation"); +$sel->click_ok("commit"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->is_text_present_ok('has been added to the database'); +my $bug2_id = $sel->get_value('//input[@name="id" and @type="hidden"]'); + +# Put enough votes on this bug to confirm it by popular votes. + +$sel->click_ok("link=vote"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Change Votes"); +$sel->type_ok("bug_$bug2_id", 5); +$sel->click_ok("change"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Change Votes"); +$sel->is_text_present_ok("Bug $bug2_id confirmed by number of votes"); + +# File a third bug, again as UNCONFIRMED. We will confirm it +# by decreasing the number required to confirm bugs by popular votes. + +file_bug_in_product($sel, 'Eureka'); +$sel->select_ok("bug_status", "UNCONFIRMED"); +$sel->type_ok("short_desc", "Gemini"); +$sel->type_ok("comment", "3rd constellation"); +$sel->click_ok("commit"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->is_text_present_ok('has been added to the database'); +my $bug3_id = $sel->get_value('//input[@name="id" and @type="hidden"]'); + +# Vote for this bug, but remain below the threshold required +# to confirm the bug by popular votes. +# We also change votes set on other bugs for testing purposes. + +$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", 2); +$sel->type_ok("bug_$bug3_id", 2); +$sel->click_ok("change"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Change Votes"); +# Illegal change: max is 5 votes per bug! +$sel->type_ok("bug_$bug2_id", 15); +$sel->click_ok("change"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Illegal Vote"); +$text = trim($sel->get_text("error_msg")); +ok($text =~ /You may only use at most 5 votes for a single bug in the Eureka product, but you are trying to use 15/, + "Too many votes per bug"); + +# FIXME: We cannot use go_back_ok() here, because Firefox complains about +# POST data not being stored in its cache. As a workaround, we go to +# the bug we just visited and click the 'vote' link again. + +go_to_bug($sel, $bug3_id); +$sel->click_ok("link=vote"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Change Votes"); + +# Illegal change: max is 10 votes for this product! +$sel->type_ok("bug_$bug2_id", 5); +$sel->type_ok("bug_$bug1_id", 5); +$sel->click_ok("change"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Illegal Vote"); +$text = trim($sel->get_text("error_msg")); +ok($text =~ /You tried to use 12 votes in the Eureka product, which exceeds the maximum of 10 votes for this product/, + "Too many votes for this product"); + +# Decrease the confirmation threshold so that $bug3 becomes confirmed. + +edit_product($sel, 'Eureka'); +$sel->type_ok("votestoconfirm", 2); +$sel->click_ok('//input[@type="submit" and @value="Save Changes"]'); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Updating Product 'Eureka'"); +$full_text = trim($sel->get_body_text()); +ok($full_text =~ /Updated number of votes needed to confirm a bug from 3 to 2/, + "Confirming the new number of votes to confirm"); +$sel->is_text_present_ok("Bug $bug3_id confirmed by number of votes"); + +# Decrease the number of votes per bug so that $bug2 is updated. + +$sel->click_ok("link='Eureka'"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Edit Product 'Eureka'"); +$sel->type_ok("maxvotesperbug", 4); +$sel->click_ok('//input[@type="submit" and @value="Save Changes"]'); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Updating Product 'Eureka'"); +$full_text = trim($sel->get_body_text()); +ok($full_text =~ /Updated maximum votes per bug from 5 to 4/, "Confirming the new number of votes per bug"); +$sel->is_text_present_ok("removed votes for bug $bug2_id from " . $config->{admin_user_login}, undef, + "Removed votes from the admin"); + +# Go check that $bug2 has been correctly updated. + +$sel->click_ok("link=$bug2_id"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_like(qr/$bug2_id /); +$text = trim($sel->get_text("votes_container")); +ok($text =~ /4 votes/, "4 votes remaining"); + +# Decrease the number per user. Bugs should keep at least one vote, +# i.e. not all votes are removed (which was the old behavior). + +edit_product($sel, "Eureka"); +$sel->type_ok("votesperuser", 5); +$sel->click_ok('//input[@type="submit" and @value="Save Changes"]'); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Updating Product 'Eureka'"); +$full_text = trim($sel->get_body_text()); +ok($full_text =~ /Updated votes per user from 10 to 5/, "Confirming the new number of votes per user"); +$sel->is_text_present_ok("removed votes for bug"); + +# Go check that $bug3 has been correctly updated. + +$sel->click_ok("link=$bug3_id"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_like(qr/$bug3_id /); +$text = trim($sel->get_text("votes_container")); +ok($text =~ /2 votes/, "2 votes remaining"); + +# Now disable UNCONFIRMED. + +edit_product($sel, "Eureka"); +$sel->click_ok("allows_unconfirmed"); +$sel->click_ok('//input[@type="submit" and @value="Save Changes"]'); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Updating Product 'Eureka'"); +$full_text = trim($sel->get_body_text()); +ok($full_text =~ /The product no longer allows the UNCONFIRMED status/, "Disable UNCONFIRMED"); + +# File a new bug. UNCONFIRMED must not be listed as a valid bug status. + +file_bug_in_product($sel, "Eureka"); +ok(!scalar(grep {$_ eq "UNCONFIRMED"} $sel->get_select_options("bug_status")), "UNCONFIRMED not listed"); +$sel->type_ok("short_desc", "Cancer"); +$sel->type_ok("comment", "4th constellation"); +$sel->click_ok("commit"); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->is_text_present_ok('has been added to the database'); +my $bug4_id = $sel->get_value('//input[@name="id" and @type="hidden"]'); + +# Now delete the 'Eureka' 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=Eureka"]'); +$sel->wait_for_page_to_load_ok(WAIT_TIME); +$sel->title_is("Delete Product 'Eureka'"); +$full_text = trim($sel->get_body_text()); +ok($full_text =~ /There are 4 bugs entered for this product/, "Display warning about existing bugs"); +ok($full_text =~ /Pegasus: A constellation in the north hemisphere/, "Display product description"); +$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