]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1546788 - Deselect bug type by default unless component-specific type is defined
authorKohei Yoshino <kohei.yoshino@gmail.com>
Thu, 27 Jun 2019 20:08:25 +0000 (16:08 -0400)
committerdklawren <dklawren@users.noreply.github.com>
Thu, 27 Jun 2019 20:08:25 +0000 (16:08 -0400)
16 files changed:
Bugzilla/Config/BugFields.pm
Bugzilla/Field.pm
Bugzilla/Test/Util.pm
conf/checksetup_answers.txt
docs/en/rst/api/core/v1/bugzilla.rst
extensions/BugModal/template/en/default/bug_modal/field.html.tmpl
extensions/BugModal/web/bug_modal.js
js/field.js
qa/t/lib/QA/Util.pm
qa/t/test_bug_edit.t
qa/t/webservice_bug_fields.t
scripts/c9-install
scripts/generate_bmo_data.pl
template/en/default/bug/field.html.tmpl
template/en/default/global/header.html.tmpl
vagrant_support/checksetup_answers.j2

index dee0717ce0350eadf4fb578000cea02b8caa460c..3100412d3700a1e7a56e4969bd5af4ad31d1ca8b 100644 (file)
@@ -44,7 +44,7 @@ sub get_param_list {
       name    => 'default_bug_type',
       type    => 's',
       choices => \@legal_types,
-      default => 'defect',
+      default => $legal_types[-1],
       checker => \&check_bug_type
     },
 
index 5f581e3775054e3f48dd414d0b362c9ae95d9b83..a12cf2e868f27649da61d79f60cd70efcfb8a482 100644 (file)
@@ -252,6 +252,7 @@ use constant DEFAULT_FIELDS => (
     name           => 'bug_type',
     desc           => 'Type',
     in_new_bugmail => 1,
+    is_mandatory   => 1,
     type           => FIELD_TYPE_SINGLE_SELECT,
     buglist        => 1
   },
index e826d97e004be14b4c7bef7a0edbfbf6be1cde8b..4d7d662ff9cba3365ab6e8a59a8afc5579381874 100644 (file)
@@ -103,7 +103,7 @@ sub create_bug {
       default => sub {$Component}
     },
     bug_type => Str,
-    {default => 'defect'},
+    {default => '--'},
     bug_severity => Str,
     {default => 'normal'},
     groups => ArrayRef [Str],
index 19ecce06ba3693e95a48c64f3fe73afc7a147a8e..236139fa6859c6e46a053ec0a2f87039f6b2ea20 100644 (file)
@@ -22,7 +22,7 @@ $answer{'usetargetmilestone'}   = 1;
 $answer{'webdotbase'}           = '/usr/bin/dot';
 $answer{'auth_delegation'}      = 1;
 $answer{'insidergroup'}         = 'admin';
-$answer{'default_bug_type'}     = 'defect';
+$answer{'default_bug_type'}     = '--';
 $answer{'defaultpriority'}      = '--';
 $answer{'defaultseverity'}      = 'normal';
 $answer{'skin'}                 = 'Mozilla';
index d0453887dbc88914de471a810ecf813d6338ea30..c934d33ac7a6418b79ac142effb054ab823a343d 100644 (file)
@@ -193,7 +193,7 @@ Example response for authenticated user:
           "defaultplatform" : "",
           "defaultpriority" : "--",
           "defaultseverity" : "normal",
-          "default_bug_type" : "defect",
+          "default_bug_type" : "--",
           "duplicate_or_move_bug_status" : "RESOLVED",
           "emailregexp" : "^[\\w\\.\\+\\-=']+@[\\w\\.\\-]+\\.[\\w\\-]+$",
           "emailsuffix" : "",
index d37d0e933d7b1528b24639382702185fdde485e5..14f42afc8d9b9bae700b19d8fd544cfbdd6842a1 100644 (file)
@@ -190,11 +190,13 @@ END;
           [%# single value select %]
           <input type="hidden" id="[% name FILTER html %]-dirty">
           [% IF use_buttons %]
-          <div role="radiogroup" class="buttons toggle" id="[% name FILTER html %]" [% aria_labelledby_html FILTER none %]>
+          <div role="radiogroup" class="buttons toggle" id="[% name FILTER html %]"
+               [%= 'aria-required="true"' IF field.is_mandatory %] [%= aria_labelledby_html FILTER none %]>
             [% IF values.defined %]
               [% FOREACH v IN values %]
                 [% NEXT IF NOT v.is_active AND NOT value.contains(v.name).size %]
                 [% NEXT IF NOT bug.check_can_change_field(name, bug.${field_name}, v.name) %]
+                [% NEXT IF field.is_mandatory && v.name == '--' %]
                 <div class="item">
                   <input id="v[% v.id FILTER html %]_[% name FILTER html %]" type="radio" name="[% name FILTER html %]"
                          value="[% v.name FILTER html %]" [% " checked" IF value.contains(v.name).size %]>
index 04e3f01b40ee6770d588630b44a917347f31ed72..c8ca6fe59faa10815ba0b8969b371a293d39122e 100644 (file)
@@ -548,9 +548,13 @@ $(function() {
                         if (!$select) return;
                         // It can be radio-button-like UI
                         const use_buttons = $select.matches('.buttons.toggle');
+                        const is_required = $select.matches('[aria-required="true"]');
                         const selected = use_buttons ? $select.querySelector('input').value : $select.value;
                         $select.innerHTML = '';
                         value.forEach(({ name }) => {
+                            if (is_required && name === '--') {
+                                return;
+                            }
                             if (use_buttons) {
                                 $select.insertAdjacentHTML('beforeend', `
                                   <div class="item">
index 497d0da424df1ac9d99a5bcd7fd0054a64ba138b..da1c44b9ae7f9b772d77651205bf56351df6a738 100644 (file)
@@ -35,6 +35,7 @@ function validateEnterBug(theform) {
     var short_desc = theform.short_desc;
     var version = theform.version;
     var bug_status = theform.bug_status;
+    var bug_type = theform.bug_type;
     var description = theform.comment;
     var attach_data = theform.data;
     var attach_desc = theform.description;
@@ -76,6 +77,10 @@ function validateEnterBug(theform) {
         _errorFor(component);
         focus_me = component;
     }
+    if (!bug_type.value) {
+        _errorFor(document.querySelector('#bug_type'));
+        focus_me = bug_type[0];
+    }
 
     if (focus_me) {
         focus_me.focus();
index 28ff07e577f5dcbd890b69e190ee12c1586d7235..1e73fca0dbda1fbffc9ae51ed6a012ff64fe45a9 100644 (file)
@@ -260,6 +260,12 @@ sub file_bug_in_product {
   }
   $sel->title_is("Enter Bug: $product", "Display form to enter bug data");
   sleep(1); # FIXME: Delay for slow page performance
+
+  # Select the defect type by default
+  # `check_ok()` doesn't work here because the checkbox is invisible
+  $sel->driver->execute_script('
+    document.querySelector(\'input[name="bug_type"][value="defect"]\').checked = true;
+  ');
 }
 
 sub create_bug {
index 765a531bc4da045a92d265984c84461184fcf7a8..9ccbfdf27318be675f27b1f8fbf8792a2cabb43a 100644 (file)
@@ -53,7 +53,6 @@ logout($sel);
 
 log_in($sel, $config, 'QA_Selenium_TEST');
 file_bug_in_product($sel, 'TestProduct');
-$sel->check_ok('//input[@name="bug_type" and @value="defect"]');
 $sel->select_ok("bug_severity", "label=critical");
 $sel->type_ok("short_desc", "Test bug editing");
 $sel->type_ok("comment",    "ploc");
@@ -339,7 +338,6 @@ logout($sel);
 
 log_in($sel, $config, 'QA_Selenium_TEST');
 file_bug_in_product($sel, 'TestProduct');
-$sel->check_ok('//input[@name="bug_type" and @value="defect"]');
 $sel->select_ok("bug_severity", "label=blocker");
 $sel->type_ok("short_desc", "New bug from me");
 
index 48373a8855a7c3c1c1d37f4a3f0496fa84e3b1a9..ab4a43e1b439c105cc8605f9f7b6bc128b3bb950 100644 (file)
@@ -83,7 +83,7 @@ use constant ALL_SELECT_FIELDS =>
 use constant PRODUCT_FIELDS => qw(version target_milestone component);
 use constant ALL_FIELDS =>
   (GLOBAL_GENERAL_FIELDS, ALL_SELECT_FIELDS, PRODUCT_FIELDS);
-use constant MANDATORY_FIELDS => qw(short_desc product version component);
+use constant MANDATORY_FIELDS => qw(short_desc product version component bug_type);
 
 use constant PUBLIC_PRODUCT  => 'Another Product';
 use constant PRIVATE_PRODUCT => 'QA-Selenium-TEST';
index 89cec5716085ed68ba71565c02fd98e206d86f4b..aabe4578200f9196bfdb3e5a41916db638d45096 100755 (executable)
@@ -55,7 +55,7 @@ $answer{'usetargetmilestone'}   = 1;
 $answer{'webdotbase'}           = '/usr/bin/dot';
 $answer{'auth_delegation'}      = 1;
 $answer{'insidergroup'}         = 'admin';
-$answer{'default_bug_type'}     = 'defect';
+$answer{'default_bug_type'}     = '--';
 $answer{'defaultpriority'}      = '--';
 $answer{'defaultseverity'}      = 'normal';
 $answer{'maxattachmentsize'}    = 4095;
index 7b5ff6108aefd90854c0fbe95c1df5871102d2cc..30ae5a49e569988e85c0da402d8880d49b350ab8 100755 (executable)
@@ -483,7 +483,7 @@ my %set_params = (
   confirmuniqueusermatch => 0,
   maxusermatches         => '100',
   debug_group            => 'editbugs',
-  default_bug_type       => 'defect',
+  default_bug_type       => '--',
   defaultpriority        => '--',         # FIXME: add priority
   defaultquery => 'resolution=---&emailassigned_to1=1&emailassigned_to2=1'
     . '&emailreporter2=1&emailqa_contact2=1&emailtype1=exact'
index d9cc8e7c25b3224c89cc840e069759fc9aeeab68..e47542ada793c1b4ed870584c011251c55fe399b 100644 (file)
               constants.FIELD_TYPE_MULTI_SELECT ] %]
         <input type="hidden" id="[% field.name FILTER html %]_dirty">
         [% IF use_buttons %]
-        <div role="radiogroup" class="buttons toggle" id="[% field.name FILTER html %]">
+        <div role="radiogroup" class="buttons toggle" id="[% field.name FILTER html %]"
+             [% ' aria-required="true"' IF field.is_mandatory %]>
         [% ELSE %]
         <select id="[% field.name FILTER html %]"
                 name="[% field.name FILTER html %]"
             [% END %]
 
             [% IF use_buttons %]
+            [% NEXT IF field.is_mandatory && legal_value.name == '--' %]
             <div class="item">
               <input id="[% option_id FILTER html %]" type="radio"
                      name="[% field.name FILTER html %]" value="[% legal_value.name FILTER html %]"
index 73c2050e51a2e4b4dcbfa4bf5247f95e9b50cbb9..dc98cae5904cbc5f96f976bfafa7fe021dd8bc53 100644 (file)
             },
             string => {
                 # Please keep these in alphabetical order.
+                bug_type_required =>
+                    "You must select a Type for this $terms.bug",
                 component_required =>
                     "You must select a Component for this $terms.bug",
                 description_required =>
index a79df9b62347e24bfa60fa3434ff7ee62f413053..75505e7518d767965451f968bbea44587b79e244 100644 (file)
@@ -33,7 +33,7 @@ $answer{'usetargetmilestone'}   = 1;
 $answer{'webdotbase'}           = '/usr/bin/dot';
 $answer{'auth_delegation'}      = 1;
 $answer{'insidergroup'}         = 'admin';
-$answer{'default_bug_type'}     = 'defect';
+$answer{'default_bug_type'}     = '--';
 $answer{'defaultpriority'}      = '--';
 $answer{'defaultseverity'}      = 'normal';
 $answer{'skin'}                 = 'Mozilla';