diff options
Diffstat (limited to 'qa/config/generate_test_data.pl')
-rw-r--r-- | qa/config/generate_test_data.pl | 1126 |
1 files changed, 610 insertions, 516 deletions
diff --git a/qa/config/generate_test_data.pl b/qa/config/generate_test_data.pl index 6bd9dd355..47e583471 100644 --- a/qa/config/generate_test_data.pl +++ b/qa/config/generate_test_data.pl @@ -14,12 +14,16 @@ use warnings; use File::Basename; use File::Spec; + BEGIN { - require lib; - my $dir = File::Spec->rel2abs( - File::Spec->catdir(dirname(__FILE__), "..", "..") - ); - lib->import($dir, File::Spec->catdir($dir, "lib"), File::Spec->catdir($dir, qw(local lib perl5))); + require lib; + my $dir + = File::Spec->rel2abs(File::Spec->catdir(dirname(__FILE__), "..", "..")); + lib->import( + $dir, + File::Spec->catdir($dir, "lib"), + File::Spec->catdir($dir, qw(local lib perl5)) + ); } use Cwd; @@ -29,15 +33,14 @@ my $conf_path; my $config; BEGIN { - print "reading the config file...\n"; - my $conf_file = $ENV{BZ_QA_CONF_FILE} // "selenium_test.conf"; - if (@ARGV) { - $conf_file = shift @ARGV; - } - $config = do "$conf_file" - or die "can't read configuration '$conf_file': $!$@"; - - $conf_path = $config->{bugzilla_path}; + print "reading the config file...\n"; + my $conf_file = $ENV{BZ_QA_CONF_FILE} // "selenium_test.conf"; + if (@ARGV) { + $conf_file = shift @ARGV; + } + $config = do "$conf_file" or die "can't read configuration '$conf_file': $!$@"; + + $conf_path = $config->{bugzilla_path}; } use lib $conf_path; @@ -69,40 +72,34 @@ Bugzilla->usage_mode(USAGE_MODE_CMDLINE); # Create missing priorities # BMO uses P1-P5 which is different from upstream -my $field = Bugzilla::Field->new({ name => 'priority' }); +my $field = Bugzilla::Field->new({name => 'priority'}); foreach my $value (qw(Highest High Normal Low Lowest)) { - Bugzilla::Field::Choice->type($field)->create({ - value => $value, - sortkey => 0 - }); + Bugzilla::Field::Choice->type($field)->create({value => $value, sortkey => 0}); } # Add missing platforms -$field = Bugzilla::Field->new({ name => 'rep_platform' }); +$field = Bugzilla::Field->new({name => 'rep_platform'}); foreach my $value (qw(PC)) { - Bugzilla::Field::Choice->type($field)->create({ - value => $value, - sortkey => 0 - }); + Bugzilla::Field::Choice->type($field)->create({value => $value, sortkey => 0}); } my %set_params = ( - usebugaliases => 1, - useqacontact => 1, - mail_delivery_method => 'Test', - maxattachmentsize => 256, - defaultpriority => 'Highest', # BMO CHANGE - timetrackinggroup => 'editbugs', # BMO CHANGE - letsubmitterchoosepriority => 1, # BMO CHANGE - createemailregexp => '.*', # BMO CHANGE + usebugaliases => 1, + useqacontact => 1, + mail_delivery_method => 'Test', + maxattachmentsize => 256, + defaultpriority => 'Highest', # BMO CHANGE + timetrackinggroup => 'editbugs', # BMO CHANGE + letsubmitterchoosepriority => 1, # BMO CHANGE + createemailregexp => '.*', # BMO CHANGE ); my $params_modified; foreach my $param (keys %set_params) { - my $value = $set_params{$param}; - next unless defined $value && Bugzilla->params->{$param} ne $value; - SetParam($param, $value); - $params_modified = 1; + my $value = $set_params{$param}; + next unless defined $value && Bugzilla->params->{$param} ne $value; + SetParam($param, $value); + $params_modified = 1; } write_params() if $params_modified; @@ -117,71 +114,68 @@ write_params() if $params_modified; my %user_prefs = (post_bug_submit_action => 'nothing'); foreach my $pref (keys %user_prefs) { - my $value = $user_prefs{$pref}; - Bugzilla::User::Setting::set_default($pref, $value, 1); + my $value = $user_prefs{$pref}; + Bugzilla::User::Setting::set_default($pref, $value, 1); } ########################################################################## # Create Users ########################################################################## # First of all, remove the default .* regexp for the editbugs group. -my $group = new Bugzilla::Group({ name => 'editbugs' }); +my $group = new Bugzilla::Group({name => 'editbugs'}); $group->set_user_regexp(''); $group->update(); my @usernames = ( - 'admin', 'no-privs', - 'QA-Selenium-TEST', 'canconfirm', - 'tweakparams', 'permanent_user', - 'editbugs', 'disabled', + 'admin', 'no-privs', 'QA-Selenium-TEST', 'canconfirm', + 'tweakparams', 'permanent_user', 'editbugs', 'disabled', ); print "creating user accounts...\n"; foreach my $username (@usernames) { - my $password; - my $login; - my $realname = exists $config->{"$username" . "_user_username"} - ? $config->{"$username" . "_user_username"} - : $username; - - if ($username eq 'permanent_user') { - $password = $config->{admin_user_passwd}; - $login = $config->{$username}; - } - elsif ($username eq 'no-privs') { - $password = $config->{unprivileged_user_passwd}; - $login = $config->{unprivileged_user_login}; - } - elsif ($username eq 'QA-Selenium-TEST') { - $password = $config->{QA_Selenium_TEST_user_passwd}; - $login = $config->{QA_Selenium_TEST_user_login}; - } - else { - $password = $config->{"$username" . "_user_passwd"}; - $login = $config->{"$username" . "_user_login"}; + my $password; + my $login; + my $realname + = exists $config->{"$username" . "_user_username"} + ? $config->{"$username" . "_user_username"} + : $username; + + if ($username eq 'permanent_user') { + $password = $config->{admin_user_passwd}; + $login = $config->{$username}; + } + elsif ($username eq 'no-privs') { + $password = $config->{unprivileged_user_passwd}; + $login = $config->{unprivileged_user_login}; + } + elsif ($username eq 'QA-Selenium-TEST') { + $password = $config->{QA_Selenium_TEST_user_passwd}; + $login = $config->{QA_Selenium_TEST_user_login}; + } + else { + $password = $config->{"$username" . "_user_passwd"}; + $login = $config->{"$username" . "_user_login"}; + } + + if (is_available_username($login)) { + my %extra_args; + if ($username eq 'disabled') { + $extra_args{disabledtext} = '!!This is the text!!'; } - if ( is_available_username($login) ) { - my %extra_args; - if ($username eq 'disabled') { - $extra_args{disabledtext} = '!!This is the text!!'; - } - - Bugzilla::User->create( - { - login_name => $login, - realname => $realname, - cryptpassword => $password, - %extra_args, - } - ); - - if ( $username eq 'admin' or $username eq 'permanent_user' ) { - - Bugzilla::Install::make_admin($login); - } + Bugzilla::User->create({ + login_name => $login, + realname => $realname, + cryptpassword => $password, + %extra_args, + }); + + if ($username eq 'admin' or $username eq 'permanent_user') { + + Bugzilla::Install::make_admin($login); } + } } ########################################################################## @@ -191,115 +185,159 @@ foreach my $username (@usernames) { # We need to add in the upstream statuses in addition to the BMO ones. my @statuses = ( - { - value => undef, - transitions => [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['NEW', 0], - ['ASSIGNED', 0], ['IN_PROGRESS', 0]], - }, - { - value => 'UNCONFIRMED', - sortkey => 100, - isactive => 1, - isopen => 1, - transitions => [['CONFIRMED', 0], ['NEW', 0], ['ASSIGNED', 0], - ['IN_PROGRESS', 0], ['RESOLVED', 0]], - }, - { - value => 'CONFIRMED', - sortkey => 200, - isactive => 1, - isopen => 1, - transitions => [['UNCONFIRMED', 0], ['NEW', 0], ['ASSIGNED', 0], - ['IN_PROGRESS', 0], ['RESOLVED', 0]], - }, - { - value => 'NEW', - sortkey => 300, - isactive => 1, - isopen => 1, - transitions => [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['ASSIGNED', 0], - ['IN_PROGRESS', 0], ['RESOLVED', 0]], - }, - { - value => 'ASSIGNED', - sortkey => 400, - isactive => 1, - isopen => 1, - transitions => [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['NEW', 0], - ['IN_PROGRESS', 0], ['RESOLVED', 0]], - }, - { - value => 'IN_PROGRESS', - sortkey => 500, - isactive => 1, - isopen => 1, - transitions => [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['NEW', 0], - ['ASSIGNED', 0], ['RESOLVED', 0]], - }, - { - value => 'REOPENED', - sortkey => 600, - isactive => 1, - isopen => 1, - transitions => [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['NEW', 0], - ['ASSIGNED', 0], ['IN_PROGRESS', 0], ['RESOLVED', 0]], - }, - { - value => 'RESOLVED', - sortkey => 700, - isactive => 1, - isopen => 0, - transitions => [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['REOPENED', 0], - ['VERIFIED', 0]], - }, - { - value => 'VERIFIED', - sortkey => 800, - isactive => 1, - isopen => 0, - transitions => [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['REOPENED', 0], - ['RESOLVED', 0]], - }, - { - value => 'CLOSED', - sortkey => 900, - isactive => 1, - isopen => 0, - transitions => [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['REOPENED', 0], - ['RESOLVED', 0]], - }, + { + value => undef, + transitions => [ + ['UNCONFIRMED', 0], + ['CONFIRMED', 0], + ['NEW', 0], + ['ASSIGNED', 0], + ['IN_PROGRESS', 0] + ], + }, + { + value => 'UNCONFIRMED', + sortkey => 100, + isactive => 1, + isopen => 1, + transitions => [ + ['CONFIRMED', 0], + ['NEW', 0], + ['ASSIGNED', 0], + ['IN_PROGRESS', 0], + ['RESOLVED', 0] + ], + }, + { + value => 'CONFIRMED', + sortkey => 200, + isactive => 1, + isopen => 1, + transitions => [ + ['UNCONFIRMED', 0], + ['NEW', 0], + ['ASSIGNED', 0], + ['IN_PROGRESS', 0], + ['RESOLVED', 0] + ], + }, + { + value => 'NEW', + sortkey => 300, + isactive => 1, + isopen => 1, + transitions => [ + ['UNCONFIRMED', 0], + ['CONFIRMED', 0], + ['ASSIGNED', 0], + ['IN_PROGRESS', 0], + ['RESOLVED', 0] + ], + }, + { + value => 'ASSIGNED', + sortkey => 400, + isactive => 1, + isopen => 1, + transitions => [ + ['UNCONFIRMED', 0], + ['CONFIRMED', 0], + ['NEW', 0], + ['IN_PROGRESS', 0], + ['RESOLVED', 0] + ], + }, + { + value => 'IN_PROGRESS', + sortkey => 500, + isactive => 1, + isopen => 1, + transitions => [ + ['UNCONFIRMED', 0], + ['CONFIRMED', 0], + ['NEW', 0], + ['ASSIGNED', 0], + ['RESOLVED', 0] + ], + }, + { + value => 'REOPENED', + sortkey => 600, + isactive => 1, + isopen => 1, + transitions => [ + ['UNCONFIRMED', 0], + ['CONFIRMED', 0], + ['NEW', 0], + ['ASSIGNED', 0], + ['IN_PROGRESS', 0], + ['RESOLVED', 0] + ], + }, + { + value => 'RESOLVED', + sortkey => 700, + isactive => 1, + isopen => 0, + transitions => + [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['REOPENED', 0], ['VERIFIED', 0]], + }, + { + value => 'VERIFIED', + sortkey => 800, + isactive => 1, + isopen => 0, + transitions => + [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['REOPENED', 0], ['RESOLVED', 0]], + }, + { + value => 'CLOSED', + sortkey => 900, + isactive => 1, + isopen => 0, + transitions => + [['UNCONFIRMED', 0], ['CONFIRMED', 0], ['REOPENED', 0], ['RESOLVED', 0]], + }, ); -if ($dbh->selectrow_array("SELECT 1 FROM bug_status WHERE value = 'ASSIGNED'")) { - $dbh->do('DELETE FROM bug_status'); - $dbh->do('DELETE FROM status_workflow'); +if ($dbh->selectrow_array("SELECT 1 FROM bug_status WHERE value = 'ASSIGNED'")) +{ + $dbh->do('DELETE FROM bug_status'); + $dbh->do('DELETE FROM status_workflow'); - print "creating status workflow...\n"; + print "creating status workflow...\n"; - # One pass to add the status entries. - foreach my $status (@statuses) { - next if !$status->{value}; - $dbh->do('INSERT INTO bug_status (value, sortkey, isactive, is_open) VALUES (?, ?, ?, ?)', - undef, ( $status->{value}, $status->{sortkey}, $status->{isactive}, $status->{isopen} )); + # One pass to add the status entries. + foreach my $status (@statuses) { + next if !$status->{value}; + $dbh->do( + 'INSERT INTO bug_status (value, sortkey, isactive, is_open) VALUES (?, ?, ?, ?)', + undef, + ($status->{value}, $status->{sortkey}, $status->{isactive}, $status->{isopen}) + ); + } + + # Another pass to add the transitions. + foreach my $status (@statuses) { + my $old_id; + if ($status->{value}) { + my $from_status = new Bugzilla::Status({name => $status->{value}}); + $old_id = $from_status->{id}; + } + else { + $old_id = undef; } - # Another pass to add the transitions. - foreach my $status (@statuses) { - my $old_id; - if ($status->{value}) { - my $from_status = new Bugzilla::Status({ name => $status->{value} }); - $old_id = $from_status->{id}; - } else { - $old_id = undef; - } - - foreach my $transition (@{$status->{transitions}}) { - my $to_status = new Bugzilla::Status({ name => $transition->[0] }); - - $dbh->do('INSERT INTO status_workflow (old_status, new_status, require_comment) VALUES (?, ?, ?)', - undef, ( $old_id, $to_status->{id}, $transition->[1] )); - } + foreach my $transition (@{$status->{transitions}}) { + my $to_status = new Bugzilla::Status({name => $transition->[0]}); + + $dbh->do( + 'INSERT INTO status_workflow (old_status, new_status, require_comment) VALUES (?, ?, ?)', + undef, + ($old_id, $to_status->{id}, $transition->[1]) + ); } + } } ########################################################################## @@ -311,408 +349,456 @@ my $admin_user = Bugzilla::User->check($config->{admin_user_login}); Bugzilla->set_user($admin_user); my %field_values = ( - 'priority' => 'Highest', - 'bug_status' => 'CONFIRMED', - 'version' => 'unspecified', - 'bug_file_loc' => '', - 'comment' => 'please ignore this bug', - 'component' => 'TestComponent', - 'rep_platform' => 'All', - 'short_desc' => 'This is a testing bug only', - 'product' => 'TestProduct', - 'op_sys' => 'Linux', - 'bug_severity' => 'normal', - 'groups' => [], + 'priority' => 'Highest', + 'bug_status' => 'CONFIRMED', + 'version' => 'unspecified', + 'bug_file_loc' => '', + 'comment' => 'please ignore this bug', + 'component' => 'TestComponent', + 'rep_platform' => 'All', + 'short_desc' => 'This is a testing bug only', + 'product' => 'TestProduct', + 'op_sys' => 'Linux', + 'bug_severity' => 'normal', + 'groups' => [], ); print "creating bugs...\n"; -Bugzilla::Bug->create( \%field_values ); +Bugzilla::Bug->create(\%field_values); if (Bugzilla::Bug->new('public_bug')->{error}) { - # The deadline must be set so that this bug can be used to test - # timetracking fields using WebServices. - Bugzilla::Bug->create({ %field_values, alias => 'public_bug', deadline => '2010-01-01' }); + + # The deadline must be set so that this bug can be used to test + # timetracking fields using WebServices. + Bugzilla::Bug->create( + {%field_values, alias => 'public_bug', deadline => '2010-01-01'}); } ########################################################################## # Create Classifications ########################################################################## -my @classifications = ({ name => "Class2_QA", - description => "required by Selenium... DON'T DELETE" }, +my @classifications = ( + {name => "Class2_QA", description => "required by Selenium... DON'T DELETE"}, ); print "creating classifications...\n"; foreach my $class (@classifications) { - my $new_class = Bugzilla::Classification->new({ name => $class->{name} }); - if (!$new_class) { - $dbh->do('INSERT INTO classifications (name, description) VALUES (?, ?)', - undef, ( $class->{name}, $class->{description} )); - } + my $new_class = Bugzilla::Classification->new({name => $class->{name}}); + if (!$new_class) { + $dbh->do('INSERT INTO classifications (name, description) VALUES (?, ?)', + undef, ($class->{name}, $class->{description})); + } } ########################################################################## # Create Products ########################################################################## -my $default_platform_id = $dbh->selectcol_arrayref("SELECT id FROM rep_platform WHERE value = 'Unspecified'"); -my $default_op_sys_id = $dbh->selectcol_arrayref("SELECT id FROM op_sys WHERE value = 'Unspecified'"); +my $default_platform_id = $dbh->selectcol_arrayref( + "SELECT id FROM rep_platform WHERE value = 'Unspecified'"); +my $default_op_sys_id = $dbh->selectcol_arrayref( + "SELECT id FROM op_sys WHERE value = 'Unspecified'"); my @products = ( - { product_name => 'QA-Selenium-TEST', - description => "used by Selenium test.. DON'T DELETE", - versions => ['unspecified', 'QAVersion'], - milestones => ['QAMilestone'], - defaultmilestone => '---', - components => [ - { name => "QA-Selenium-TEST", - description => "used by Selenium test.. DON'T DELETE", - initialowner => $config->{QA_Selenium_TEST_user_login}, - initialqacontact => $config->{QA_Selenium_TEST_user_login}, - initial_cc => [$config->{QA_Selenium_TEST_user_login}], - - } - ], - default_platform_id => $default_platform_id, - default_op_sys_id => $default_op_sys_id, - }, - - { product_name => 'Another Product', - description => - "Alternate product used by Selenium. <b>Do not edit!</b>", - versions => ['unspecified', 'Another1', 'Another2'], - milestones => ['AnotherMS1', 'AnotherMS2', 'Milestone'], - defaultmilestone => '---', - - components => [ - { name => "c1", - description => "c1", - initialowner => $config->{permanent_user}, - initialqacontact => '', - initial_cc => [], - - }, - { name => "c2", - description => "c2", - initialowner => $config->{permanent_user}, - initialqacontact => '', - initial_cc => [], - - }, - ], - default_platform_id => $default_platform_id, - default_op_sys_id => $default_op_sys_id, - }, - - { product_name => 'C2 Forever', - description => 'I must remain in the Class2_QA classification ' . - 'in all cases! Do not edit!', - classification => 'Class2_QA', - versions => ['unspecified', 'C2Ver'], - milestones => ['C2Mil'], - defaultmilestone => '---', - components => [ - { name => "Helium", - description => "Feel free to add bugs to me", - initialowner => $config->{permanent_user}, - initialqacontact => '', - initial_cc => [], - - } - ], - default_platform_id => $default_platform_id, - default_op_sys_id => $default_op_sys_id, - }, - - { product_name => 'QA Entry Only', - description => 'Only the QA group may enter bugs here.', - versions => ['unspecified'], - milestones => [], - defaultmilestone => '---', - components => [ - { name => "c1", - description => "Same name as Another Product's component", - initialowner => $config->{QA_Selenium_TEST_user_login}, - initialqacontact => '', - initial_cc => [], - } - ], - default_platform_id => $default_platform_id, - default_op_sys_id => $default_op_sys_id, - }, - - { product_name => 'QA Search Only', - description => 'Only the QA group may search for bugs here.', - versions => ['unspecified'], - milestones => [], - defaultmilestone => '---', - components => [ - { name => "c1", - description => "Still same name as the Another component", - initialowner => $config->{QA_Selenium_TEST_user_login}, - initialqacontact => '', - initial_cc => [], - } - ], - default_platform_id => $default_platform_id, - default_op_sys_id => $default_op_sys_id, - }, + { + product_name => 'QA-Selenium-TEST', + description => "used by Selenium test.. DON'T DELETE", + versions => ['unspecified', 'QAVersion'], + milestones => ['QAMilestone'], + defaultmilestone => '---', + components => [{ + name => "QA-Selenium-TEST", + description => "used by Selenium test.. DON'T DELETE", + initialowner => $config->{QA_Selenium_TEST_user_login}, + initialqacontact => $config->{QA_Selenium_TEST_user_login}, + initial_cc => [$config->{QA_Selenium_TEST_user_login}], + + }], + default_platform_id => $default_platform_id, + default_op_sys_id => $default_op_sys_id, + }, + + { + product_name => 'Another Product', + description => "Alternate product used by Selenium. <b>Do not edit!</b>", + versions => ['unspecified', 'Another1', 'Another2'], + milestones => ['AnotherMS1', 'AnotherMS2', 'Milestone'], + defaultmilestone => '---', + + components => [ + { + name => "c1", + description => "c1", + initialowner => $config->{permanent_user}, + initialqacontact => '', + initial_cc => [], + + }, + { + name => "c2", + description => "c2", + initialowner => $config->{permanent_user}, + initialqacontact => '', + initial_cc => [], + + }, + ], + default_platform_id => $default_platform_id, + default_op_sys_id => $default_op_sys_id, + }, + + { + product_name => 'C2 Forever', + description => 'I must remain in the Class2_QA classification ' + . 'in all cases! Do not edit!', + classification => 'Class2_QA', + versions => ['unspecified', 'C2Ver'], + milestones => ['C2Mil'], + defaultmilestone => '---', + components => [{ + name => "Helium", + description => "Feel free to add bugs to me", + initialowner => $config->{permanent_user}, + initialqacontact => '', + initial_cc => [], + + }], + default_platform_id => $default_platform_id, + default_op_sys_id => $default_op_sys_id, + }, + + { + product_name => 'QA Entry Only', + description => 'Only the QA group may enter bugs here.', + versions => ['unspecified'], + milestones => [], + defaultmilestone => '---', + components => [{ + name => "c1", + description => "Same name as Another Product's component", + initialowner => $config->{QA_Selenium_TEST_user_login}, + initialqacontact => '', + initial_cc => [], + }], + default_platform_id => $default_platform_id, + default_op_sys_id => $default_op_sys_id, + }, + + { + product_name => 'QA Search Only', + description => 'Only the QA group may search for bugs here.', + versions => ['unspecified'], + milestones => [], + defaultmilestone => '---', + components => [{ + name => "c1", + description => "Still same name as the Another component", + initialowner => $config->{QA_Selenium_TEST_user_login}, + initialqacontact => '', + initial_cc => [], + }], + default_platform_id => $default_platform_id, + default_op_sys_id => $default_op_sys_id, + }, ); print "creating products...\n"; foreach my $product (@products) { - my $new_product = - Bugzilla::Product->new({ name => $product->{product_name} }); - if (!$new_product) { - my $class_id = 1; - if ($product->{classification}) { - $class_id = Bugzilla::Classification->new({ name => $product->{classification} })->id; - } - $dbh->do('INSERT INTO products (name, description, classification_id, default_platform_id, default_op_sys_id) + my $new_product = Bugzilla::Product->new({name => $product->{product_name}}); + if (!$new_product) { + my $class_id = 1; + if ($product->{classification}) { + $class_id + = Bugzilla::Classification->new({name => $product->{classification}})->id; + } + $dbh->do( + 'INSERT INTO products (name, description, classification_id, default_platform_id, default_op_sys_id) VALUES (?, ?, ?, ?, ?)', - undef, ( $product->{product_name}, $product->{description}, $class_id, - $new_product->{default_platform_id}, $new_product->{default_op_sys_id} )); - - $new_product - = new Bugzilla::Product( { name => $product->{product_name} } ); - - $dbh->do( 'INSERT INTO milestones (product_id, value) VALUES (?, ?)', - undef, ( $new_product->id, $product->{defaultmilestone} ) ); - - # Now clear the internal list of accessible products. - delete Bugzilla->user->{selectable_products}; - - foreach my $component ( @{ $product->{components} } ) { - # BMO Change for ComponentWatching extension - my $watch_user = lc($component->{name}) . '@' . lc($new_product->name) . '.bugs'; - $watch_user =~ s/\s+/\-/g; - - Bugzilla::User->create({ - login_name => $watch_user, - cryptpassword => Bugzilla->passwdqc->generate_password(), - disable_mail => 1, - }); - - my %params = %{ Bugzilla->input_params }; - $params{watch_user} = $watch_user; - Bugzilla->input_params(\%params); - - Bugzilla::Component->create( - { name => $component->{name}, - product => $new_product, - description => $component->{description}, - initialowner => $component->{initialowner}, - initialqacontact => $component->{initialqacontact}, - initial_cc => $component->{initial_cc}, - } - ); - } + undef, + ( + $product->{product_name}, $product->{description}, + $class_id, $new_product->{default_platform_id}, + $new_product->{default_op_sys_id} + ) + ); + + $new_product = new Bugzilla::Product({name => $product->{product_name}}); + + $dbh->do('INSERT INTO milestones (product_id, value) VALUES (?, ?)', + undef, ($new_product->id, $product->{defaultmilestone})); + + # Now clear the internal list of accessible products. + delete Bugzilla->user->{selectable_products}; + + foreach my $component (@{$product->{components}}) { + + # BMO Change for ComponentWatching extension + my $watch_user + = lc($component->{name}) . '@' . lc($new_product->name) . '.bugs'; + $watch_user =~ s/\s+/\-/g; + + Bugzilla::User->create({ + login_name => $watch_user, + cryptpassword => Bugzilla->passwdqc->generate_password(), + disable_mail => 1, + }); + + my %params = %{Bugzilla->input_params}; + $params{watch_user} = $watch_user; + Bugzilla->input_params(\%params); + + Bugzilla::Component->create({ + name => $component->{name}, + product => $new_product, + description => $component->{description}, + initialowner => $component->{initialowner}, + initialqacontact => $component->{initialqacontact}, + initial_cc => $component->{initial_cc}, + }); } + } - foreach my $version (@{ $product->{versions} }) { - if (!new Bugzilla::Version({ name => $version, - product => $new_product })) - { - Bugzilla::Version->create({value => $version, product => $new_product}); - } + foreach my $version (@{$product->{versions}}) { + if (!new Bugzilla::Version({name => $version, product => $new_product})) { + Bugzilla::Version->create({value => $version, product => $new_product}); } + } - foreach my $milestone (@{ $product->{milestones} }) { - if (!new Bugzilla::Milestone({ name => $milestone, - product => $new_product })) - { - # We don't use Bugzilla::Milestone->create because we want to - # bypass security checks. - $dbh->do('INSERT INTO milestones (product_id, value) VALUES (?,?)', - undef, $new_product->id, $milestone); - } + foreach my $milestone (@{$product->{milestones}}) { + if (!new Bugzilla::Milestone({name => $milestone, product => $new_product})) { + + # We don't use Bugzilla::Milestone->create because we want to + # bypass security checks. + $dbh->do('INSERT INTO milestones (product_id, value) VALUES (?,?)', + undef, $new_product->id, $milestone); } + } } ########################################################################## # Create Groups ########################################################################## # create Master group -my ( $group_name, $group_desc ) - = ( "Master", "Master Selenium Group <b>DO NOT EDIT!</b>" ); +my ($group_name, $group_desc) + = ("Master", "Master Selenium Group <b>DO NOT EDIT!</b>"); print "creating groups...\n"; -if ( !Bugzilla::Group->new( { name => $group_name } ) ) { - my $group = Bugzilla::Group->create({ name => $group_name, - description => $group_desc, - isbuggroup => 1}); +if (!Bugzilla::Group->new({name => $group_name})) { + my $group + = Bugzilla::Group->create({ + name => $group_name, description => $group_desc, isbuggroup => 1 + }); - $dbh->do('INSERT INTO group_control_map + $dbh->do( + 'INSERT INTO group_control_map (group_id, product_id, entry, membercontrol, othercontrol, canedit) - SELECT ?, products.id, 0, ?, ?, 0 FROM products', - undef, ( $group->id, CONTROLMAPSHOWN, CONTROLMAPSHOWN ) ); + SELECT ?, products.id, 0, ?, ?, 0 FROM products', undef, + ($group->id, CONTROLMAPSHOWN, CONTROLMAPSHOWN) + ); } # create QA-Selenium-TEST group. Do not use Group->create() so that # the admin group doesn't inherit membership (yes, that's what we want!). -( $group_name, $group_desc ) - = ( "QA-Selenium-TEST", "used by Selenium test.. DON'T DELETE" ); - -if ( !Bugzilla::Group->new( { name => $group_name } ) ) { - $dbh->do('INSERT INTO groups (name, description, isbuggroup, isactive) - VALUES (?, ?, 1, 1)', undef, ( $group_name, $group_desc ) ); +($group_name, $group_desc) + = ("QA-Selenium-TEST", "used by Selenium test.. DON'T DELETE"); + +if (!Bugzilla::Group->new({name => $group_name})) { + $dbh->do( + 'INSERT INTO groups (name, description, isbuggroup, isactive) + VALUES (?, ?, 1, 1)', undef, ($group_name, $group_desc) + ); } # BMO 'editbugs' is also a member of 'canconfirm' -my $editbugs = Bugzilla::Group->new({ name => 'editbugs' }); -my $canconfirm = Bugzilla::Group->new({ name => 'canconfirm' }); +my $editbugs = Bugzilla::Group->new({name => 'editbugs'}); +my $canconfirm = Bugzilla::Group->new({name => 'canconfirm'}); $dbh->do('INSERT INTO group_group_map VALUES (?, ?, 0)', - undef, $editbugs->id, $canconfirm->id); + undef, $editbugs->id, $canconfirm->id); # BMO: Update default security group settings for new products -my $default_security_group = Bugzilla::Group->new({ name => 'core-security-release' }); -$default_security_group ||= Bugzilla::Group->new({ name => 'Master' }); +my $default_security_group + = Bugzilla::Group->new({name => 'core-security-release'}); +$default_security_group ||= Bugzilla::Group->new({name => 'Master'}); if ($default_security_group) { - $dbh->do('UPDATE products SET security_group_id = ? WHERE security_group_id IS NULL', - undef, $default_security_group->id); + $dbh->do( + 'UPDATE products SET security_group_id = ? WHERE security_group_id IS NULL', + undef, $default_security_group->id); } ########################################################################## # Add Users to Groups ########################################################################## my @users_groups = ( - { user => $config->{QA_Selenium_TEST_user_login}, group => 'QA-Selenium-TEST' }, - { user => $config->{tweakparams_user_login}, group => 'tweakparams' }, - { user => $config->{canconfirm_user_login}, group => 'canconfirm' }, - { user => $config->{editbugs_user_login}, group => 'editbugs' }, + {user => $config->{QA_Selenium_TEST_user_login}, group => 'QA-Selenium-TEST'}, + {user => $config->{tweakparams_user_login}, group => 'tweakparams'}, + {user => $config->{canconfirm_user_login}, group => 'canconfirm'}, + {user => $config->{editbugs_user_login}, group => 'editbugs'}, ); print "adding users to groups...\n"; foreach my $user_group (@users_groups) { - my $group = new Bugzilla::Group( { name => $user_group->{group} } ); - my $user = new Bugzilla::User( { name => $user_group->{user} } ); + my $group = new Bugzilla::Group({name => $user_group->{group}}); + my $user = new Bugzilla::User({name => $user_group->{user}}); - my $sth_add_mapping = $dbh->prepare( - qq{INSERT INTO user_group_map (user_id, group_id, isbless, grant_type) - VALUES (?, ?, ?, ?)}); - # Don't crash if the entry already exists. - eval { - $sth_add_mapping->execute( $user->id, $group->id, 0, GRANT_DIRECT ); - }; + my $sth_add_mapping = $dbh->prepare( + qq{INSERT INTO user_group_map (user_id, group_id, isbless, grant_type) + VALUES (?, ?, ?, ?)} + ); + + # Don't crash if the entry already exists. + eval { $sth_add_mapping->execute($user->id, $group->id, 0, GRANT_DIRECT); }; } ########################################################################## # Associate Products with groups ########################################################################## # Associate the QA-Selenium-TEST group with the QA-Selenium-TEST. -my $created_group = new Bugzilla::Group( { name => 'QA-Selenium-TEST' } ); -my $secret_product = new Bugzilla::Product( { name => 'QA-Selenium-TEST' } ); -my $no_entry = new Bugzilla::Product({ name => 'QA Entry Only' }); -my $no_search = new Bugzilla::Product({ name => 'QA Search Only' }); +my $created_group = new Bugzilla::Group({name => 'QA-Selenium-TEST'}); +my $secret_product = new Bugzilla::Product({name => 'QA-Selenium-TEST'}); +my $no_entry = new Bugzilla::Product({name => 'QA Entry Only'}); +my $no_search = new Bugzilla::Product({name => 'QA Search Only'}); print "restricting products to groups...\n"; + # Don't crash if the entries already exist. -my $sth = $dbh->prepare('INSERT INTO group_control_map +my $sth = $dbh->prepare( + 'INSERT INTO group_control_map (group_id, product_id, entry, membercontrol, othercontrol, canedit) - VALUES (?, ?, ?, ?, ?, ?)'); + VALUES (?, ?, ?, ?, ?, ?)' +); eval { - $sth->execute($created_group->id, $secret_product->id, 1, CONTROLMAPMANDATORY, - CONTROLMAPMANDATORY, 0); + $sth->execute($created_group->id, $secret_product->id, 1, CONTROLMAPMANDATORY, + CONTROLMAPMANDATORY, 0); }; eval { - $sth->execute($created_group->id, $no_entry->id, 1, CONTROLMAPNA, CONTROLMAPNA, 0); + $sth->execute($created_group->id, $no_entry->id, 1, CONTROLMAPNA, CONTROLMAPNA, + 0); }; eval { - $sth->execute($created_group->id, $no_search->id, 0, CONTROLMAPMANDATORY, - CONTROLMAPMANDATORY, 0); + $sth->execute($created_group->id, $no_search->id, 0, CONTROLMAPMANDATORY, + CONTROLMAPMANDATORY, 0); }; ########################################################################## # Create flag types ########################################################################## my @flagtypes = ( - {name => 'spec_multi_flag', desc => 'Specifically requestable and multiplicable bug flag', - is_requestable => 1, is_requesteeble => 1, is_multiplicable => 1, grant_group => 'editbugs', - target_type => 'b', cc_list => '', inclusions => ['Another Product:c1']}, + { + name => 'spec_multi_flag', + desc => 'Specifically requestable and multiplicable bug flag', + is_requestable => 1, + is_requesteeble => 1, + is_multiplicable => 1, + grant_group => 'editbugs', + target_type => 'b', + cc_list => '', + inclusions => ['Another Product:c1'] + }, ); print "creating flag types...\n"; foreach my $flag (@flagtypes) { - # The name is not unique, even within a single product/component, so there is NO WAY - # to know if the existing flag type is the one we want or not. - # As our Selenium scripts would be confused anyway if there is already such a flag name, - # we simply skip it and assume the existing flag type is the one we want. - next if new Bugzilla::FlagType({ name => $flag->{name} }); - - my $grant_group_id = $flag->{grant_group} ? Bugzilla::Group->new({ name => $flag->{grant_group} })->id : undef; - my $request_group_id = $flag->{request_group} ? Bugzilla::Group->new({ name => $flag->{request_group} })->id : undef; - $dbh->do('INSERT INTO flagtypes (name, description, cc_list, target_type, is_requestable, +# The name is not unique, even within a single product/component, so there is NO WAY +# to know if the existing flag type is the one we want or not. +# As our Selenium scripts would be confused anyway if there is already such a flag name, +# we simply skip it and assume the existing flag type is the one we want. + next if new Bugzilla::FlagType({name => $flag->{name}}); + + my $grant_group_id + = $flag->{grant_group} + ? Bugzilla::Group->new({name => $flag->{grant_group}})->id + : undef; + my $request_group_id + = $flag->{request_group} + ? Bugzilla::Group->new({name => $flag->{request_group}})->id + : undef; + + $dbh->do( + 'INSERT INTO flagtypes (name, description, cc_list, target_type, is_requestable, is_requesteeble, is_multiplicable, grant_group_id, request_group_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', - undef, ($flag->{name}, $flag->{desc}, $flag->{cc_list}, $flag->{target_type}, - $flag->{is_requestable}, $flag->{is_requesteeble}, $flag->{is_multiplicable}, - $grant_group_id, $request_group_id)); - - my $type_id = $dbh->bz_last_key('flagtypes', 'id'); - - foreach my $inclusion (@{$flag->{inclusions}}) { - my ($product, $component) = split(':', $inclusion); - my ($prod_id, $comp_id); - if ($product) { - my $prod_obj = Bugzilla::Product->new({ name => $product }); - $prod_id = $prod_obj->id; - if ($component) { - $comp_id = Bugzilla::Component->new({ name => $component, product => $prod_obj})->id; - } - } - $dbh->do('INSERT INTO flaginclusions (type_id, product_id, component_id) - VALUES (?, ?, ?)', - undef, ($type_id, $prod_id, $comp_id)); + undef, + ( + $flag->{name}, $flag->{desc}, + $flag->{cc_list}, $flag->{target_type}, + $flag->{is_requestable}, $flag->{is_requesteeble}, + $flag->{is_multiplicable}, $grant_group_id, + $request_group_id + ) + ); + + my $type_id = $dbh->bz_last_key('flagtypes', 'id'); + + foreach my $inclusion (@{$flag->{inclusions}}) { + my ($product, $component) = split(':', $inclusion); + my ($prod_id, $comp_id); + if ($product) { + my $prod_obj = Bugzilla::Product->new({name => $product}); + $prod_id = $prod_obj->id; + if ($component) { + $comp_id + = Bugzilla::Component->new({name => $component, product => $prod_obj})->id; + } } + $dbh->do( + 'INSERT INTO flaginclusions (type_id, product_id, component_id) + VALUES (?, ?, ?)', undef, ($type_id, $prod_id, $comp_id) + ); + } } ########################################################################## # Create custom fields ########################################################################## my @fields = ( - { name => 'cf_QA_status', - description => 'QA Status', - type => FIELD_TYPE_MULTI_SELECT, - sortkey => 100, - mailhead => 0, - enter_bug => 1, - obsolete => 0, - custom => 1, - values => ['verified', 'in progress', 'untested'] - }, - { name => 'cf_single_select', - description => 'SingSel', - type => FIELD_TYPE_SINGLE_SELECT, - sortkey => 200, - mailhead => 0, - enter_bug => 1, - custom => 1, - obsolete => 0, - values => [qw(one two three)], - }, + { + name => 'cf_QA_status', + description => 'QA Status', + type => FIELD_TYPE_MULTI_SELECT, + sortkey => 100, + mailhead => 0, + enter_bug => 1, + obsolete => 0, + custom => 1, + values => ['verified', 'in progress', 'untested'] + }, + { + name => 'cf_single_select', + description => 'SingSel', + type => FIELD_TYPE_SINGLE_SELECT, + sortkey => 200, + mailhead => 0, + enter_bug => 1, + custom => 1, + obsolete => 0, + values => [qw(one two three)], + }, ); print "creating custom fields...\n"; foreach my $f (@fields) { - # Skip existing custom fields. - next if Bugzilla::Field->new({ name => $f->{name} }); - - my @values; - if (exists $f->{values}) { - @values = @{$f->{values}}; - # We have to delete this key, else create() will complain - # that 'values' is not an existing column name. - delete $f->{values}; - } - Bugzilla::Field->create($f); - my $field = Bugzilla::Field->new({ name => $f->{name} }); - # Now populate the table with valid values, if necessary. - next unless scalar @values; + # Skip existing custom fields. + next if Bugzilla::Field->new({name => $f->{name}}); - my $sth = $dbh->prepare('INSERT INTO ' . $field->name . ' (value) VALUES (?)'); - foreach my $value (@values) { - $sth->execute($value); - } + my @values; + if (exists $f->{values}) { + @values = @{$f->{values}}; + + # We have to delete this key, else create() will complain + # that 'values' is not an existing column name. + delete $f->{values}; + } + Bugzilla::Field->create($f); + my $field = Bugzilla::Field->new({name => $f->{name}}); + + # Now populate the table with valid values, if necessary. + next unless scalar @values; + + my $sth = $dbh->prepare('INSERT INTO ' . $field->name . ' (value) VALUES (?)'); + foreach my $value (@values) { + $sth->execute($value); + } } #################################################################### @@ -720,13 +806,13 @@ foreach my $f (@fields) { #################################################################### if (Bugzilla->params->{insidergroup} ne 'QA-Selenium-TEST') { - SetParam('insidergroup', 'QA-Selenium-TEST'); - $params_modified = 1; + SetParam('insidergroup', 'QA-Selenium-TEST'); + $params_modified = 1; } if ($params_modified) { - write_params(); - print <<EOT + write_params(); + print <<EOT; ** Parameters have been modified by this script. Please re-run ** checksetup.pl to set file permissions on data/params correctly. @@ -742,11 +828,11 @@ Bugzilla->set_user($test_user); print "Creating private bug(s)...\n"; if (Bugzilla::Bug->new('private_bug')->{error}) { - my %priv_values = %field_values; - $priv_values{alias} = 'private_bug'; - $priv_values{product} = 'QA-Selenium-TEST'; - $priv_values{component} = 'QA-Selenium-TEST'; - my $bug = Bugzilla::Bug->create(\%priv_values); + my %priv_values = %field_values; + $priv_values{alias} = 'private_bug'; + $priv_values{product} = 'QA-Selenium-TEST'; + $priv_values{component} = 'QA-Selenium-TEST'; + my $bug = Bugzilla::Bug->create(\%priv_values); } ###################### @@ -755,13 +841,15 @@ if (Bugzilla::Bug->new('private_bug')->{error}) { # BMO FIXME: Users must be in 'editbugs' to set their own # content type other than text/plain or application/octet-stream -$group = new Bugzilla::Group( { name => 'editbugs' } ); +$group = new Bugzilla::Group({name => 'editbugs'}); my $sth_add_mapping = $dbh->prepare( - qq{INSERT INTO user_group_map (user_id, group_id, isbless, grant_type) - VALUES (?, ?, ?, ?)}); + qq{INSERT INTO user_group_map (user_id, group_id, isbless, grant_type) + VALUES (?, ?, ?, ?)} +); + # Don't crash if the entry already exists. eval { - $sth_add_mapping->execute( Bugzilla->user->id, $group->id, 0, GRANT_DIRECT ); + $sth_add_mapping->execute(Bugzilla->user->id, $group->id, 0, GRANT_DIRECT); }; print "creating attachments...\n"; @@ -775,26 +863,28 @@ my $attachment_contents; close($attachment_fh); foreach my $alias (qw(public_bug private_bug)) { - my $bug = Bugzilla::Bug->new($alias); - foreach my $is_private (0, 1) { - Bugzilla::Attachment->create({ - bug => $bug, - data => $attachment_contents, - description => "${alias}_${is_private}", - filename => "${alias}_${is_private}.pl", - mimetype => 'application/x-perl', - isprivate => $is_private, - }); - } + my $bug = Bugzilla::Bug->new($alias); + foreach my $is_private (0, 1) { + Bugzilla::Attachment->create({ + bug => $bug, + data => $attachment_contents, + description => "${alias}_${is_private}", + filename => "${alias}_${is_private}.pl", + mimetype => 'application/x-perl', + isprivate => $is_private, + }); + } } # BMO FIXME: Remove test user from 'editbugs' group my $sth_remove_mapping = $dbh->prepare( - qq{DELETE FROM user_group_map WHERE user_id = ? - AND group_id = ? AND isbless = 0 AND grant_type = ?}); + qq{DELETE FROM user_group_map WHERE user_id = ? + AND group_id = ? AND isbless = 0 AND grant_type = ?} +); + # Don't crash if the entry already exists. eval { - $sth_remove_mapping->execute( Bugzilla->user->id, $group->id, GRANT_DIRECT ); + $sth_remove_mapping->execute(Bugzilla->user->id, $group->id, GRANT_DIRECT); }; ################### @@ -802,16 +892,20 @@ eval { ################### my @keywords = ( - { name => 'test-keyword-1', - description => 'Created for Bugzilla QA Tests, Keyword 1' }, - { name => 'test-keyword-2', - description => 'Created for Bugzilla QA Tests, Keyword 2' }, + { + name => 'test-keyword-1', + description => 'Created for Bugzilla QA Tests, Keyword 1' + }, + { + name => 'test-keyword-2', + description => 'Created for Bugzilla QA Tests, Keyword 2' + }, ); print "creating keywords...\n"; foreach my $kw (@keywords) { - next if new Bugzilla::Keyword({ name => $kw->{name} }); - Bugzilla::Keyword->create($kw); + next if new Bugzilla::Keyword({name => $kw->{name}}); + Bugzilla::Keyword->create($kw); } ############################ |