name => 'default_bug_type',
type => 's',
choices => \@legal_types,
- default => 'defect',
+ default => $legal_types[-1],
checker => \&check_bug_type
},
name => 'bug_type',
desc => 'Type',
in_new_bugmail => 1,
+ is_mandatory => 1,
type => FIELD_TYPE_SINGLE_SELECT,
buglist => 1
},
default => sub {$Component}
},
bug_type => Str,
- {default => 'defect'},
+ {default => '--'},
bug_severity => Str,
{default => 'normal'},
groups => ArrayRef [Str],
$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';
"defaultplatform" : "",
"defaultpriority" : "--",
"defaultseverity" : "normal",
- "default_bug_type" : "defect",
+ "default_bug_type" : "--",
"duplicate_or_move_bug_status" : "RESOLVED",
"emailregexp" : "^[\\w\\.\\+\\-=']+@[\\w\\.\\-]+\\.[\\w\\-]+$",
"emailsuffix" : "",
[%# 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 %]>
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">
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;
_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();
}
$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 {
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");
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");
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';
$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;
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'
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 %]"
},
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 =>
$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';