summaryrefslogtreecommitdiffstats
path: root/t
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@hardison.net>2018-08-10 21:41:53 +0200
committerdklawren <dklawren@users.noreply.github.com>2018-08-10 21:41:53 +0200
commitea5beeacb185309572836cc60989f95ea4705f9d (patch)
tree1f8f44b5d1dba73fb05214ba1e539c0918d42bb9 /t
parent53e1adcc77b3e68c1d8659d418aa5639d9917e42 (diff)
downloadbugzilla-ea5beeacb185309572836cc60989f95ea4705f9d.tar.gz
bugzilla-ea5beeacb185309572836cc60989f95ea4705f9d.tar.xz
Bug 1482475 - Add extensive testing framework
Diffstat (limited to 't')
-rw-r--r--t/mock-db.t35
-rw-r--r--t/mock-params.t25
-rw-r--r--t/phabbugz.t243
-rw-r--r--t/sqlite-memory.t89
4 files changed, 149 insertions, 243 deletions
diff --git a/t/mock-db.t b/t/mock-db.t
new file mode 100644
index 000000000..6cf84f316
--- /dev/null
+++ b/t/mock-db.t
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+# 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 lib qw( . lib local/lib/perl5 );
+use Test::More;
+use Try::Tiny;
+
+use ok 'Bugzilla::Test::MockDB';
+use ok 'Bugzilla::Test::Util', qw(create_user);
+
+try {
+ Bugzilla::Test::MockDB->import();
+ pass('made fake in-memory db');
+}
+catch {
+ diag $_;
+ fail('made fake in-memory db');
+};
+
+try {
+ create_user('bob@pants.gov', '*');
+ ok( Bugzilla::User->new({name => 'bob@pants.gov'})->id, 'create a user' );
+}
+catch {
+ fail('create a user');
+};
+
+done_testing;
diff --git a/t/mock-params.t b/t/mock-params.t
new file mode 100644
index 000000000..7c2318130
--- /dev/null
+++ b/t/mock-params.t
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+# 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 lib qw( . lib local/lib/perl5 );
+use Test::More;
+use Test2::Tools::Mock qw(mock);
+use Bugzilla::Test::MockParams (
+ phabricator_auth_callback_url => 'http://pants.gov/',
+);
+
+is(Bugzilla->params->{phabricator_auth_callback_url}, 'http://pants.gov/', 'import default params');
+
+Bugzilla::Test::MockParams->import(phabricator_api_key => 'FAKE-KEY');
+
+is(Bugzilla->params->{phabricator_api_key}, 'FAKE-KEY', 'set key');
+
+
+done_testing;
diff --git a/t/phabbugz.t b/t/phabbugz.t
deleted file mode 100644
index ba2f35e1d..000000000
--- a/t/phabbugz.t
+++ /dev/null
@@ -1,243 +0,0 @@
-#!/usr/bin/perl
-# 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 5.10.1;
-use lib qw( . lib local/lib/perl5 );
-use Bugzilla;
-
-BEGIN { Bugzilla->extensions };
-
-use Test::More;
-use Test2::Tools::Mock;
-use Data::Dumper;
-use JSON::MaybeXS;
-use Carp;
-use Try::Tiny;
-
-use ok 'Bugzilla::Extension::PhabBugz::Feed';
-use ok 'Bugzilla::Extension::PhabBugz::Util', qw( get_attachment_revisions );
-can_ok('Bugzilla::Extension::PhabBugz::Feed', 'group_query');
-
-our @group_members;
-our @project_members;
-
-
-my $User = mock 'Bugzilla::Extension::PhabBugz::User' => (
- add_constructor => [
- 'fake_new' => 'hash',
- ],
- override => [
- 'match' => sub { [ mock() ] },
- ],
-);
-
-my $Feed = mock 'Bugzilla::Extension::PhabBugz::Feed' => (
- override => [
- get_group_members => sub {
- return [ map { Bugzilla::Extension::PhabBugz::User->fake_new(%$_) } @group_members ];
- }
- ]
-);
-
-my $Project = mock 'Bugzilla::Extension::PhabBugz::Project' => (
- override_constructor => [
- new_from_query => 'ref_copy',
- ],
- override => [
- 'members' => sub {
- return [ map { Bugzilla::Extension::PhabBugz::User->fake_new(%$_) } @project_members ];
- }
- ]
-);
-
-local Bugzilla->params->{phabricator_enabled} = 1;
-local Bugzilla->params->{phabricator_api_key} = 'FAKE-API-KEY';
-local Bugzilla->params->{phabricator_base_uri} = 'http://fake.fabricator.tld';
-
-my $Bugzilla = mock 'Bugzilla' => (
- override => [
- 'dbh' => sub { mock() },
- 'user' => sub { Bugzilla::User->new({ name => 'phab-bot@bmo.tld' }) },
- ],
-);
-
-my $BugzillaGroup = mock 'Bugzilla::Group' => (
- add_constructor => [
- 'fake_new' => 'hash',
- ],
- override => [
- 'match' => sub { [ Bugzilla::Group->fake_new(id => 1, name => 'firefox-security' ) ] },
- ],
-);
-
-my $BugzillaUser = mock 'Bugzilla::User' => (
- add_constructor => [
- 'fake_new' => 'hash',
- ],
- override => [
- 'new' => sub {
- my ($class, $hash) = @_;
- if ($hash->{name} eq 'phab-bot@bmo.tld') {
- return $class->fake_new( id => 8_675_309, login_name => 'phab-bot@bmo.tld', realname => 'Fake PhabBot' );
- }
- else {
- }
- },
- 'match' => sub { [ mock() ] },
- ],
-);
-
-
-my $feed = Bugzilla::Extension::PhabBugz::Feed->new;
-
-# Same members in both
-do {
- my $UserAgent = mock 'LWP::UserAgent' => (
- override => [
- 'post' => sub {
- my ($self, $url, $params) = @_;
- my $data = decode_json($params->{params});
- is_deeply($data->{transactions}, [], 'no-op');
- return mock({is_error => 0, content => '{}'});
- },
- ],
- );
- local @group_members = (
- { phid => 'foo' },
- );
- local @project_members = (
- { phid => 'foo' },
- );
- $feed->group_query;
-};
-
-# Project has members not in group
-do {
- my $UserAgent = mock 'LWP::UserAgent' => (
- override => [
- 'post' => sub {
- my ($self, $url, $params) = @_;
- my $data = decode_json($params->{params});
- my $expected = [ { type => 'members.remove', value => ['foo'] } ];
- is_deeply($data->{transactions}, $expected, 'remove foo');
- return mock({is_error => 0, content => '{}'});
- },
- ]
- );
- local @group_members = ();
- local @project_members = (
- { phid => 'foo' },
- );
- $feed->group_query;
-};
-
-# Group has members not in project
-do {
- my $UserAgent = mock 'LWP::UserAgent' => (
- override => [
- 'post' => sub {
- my ($self, $url, $params) = @_;
- my $data = decode_json($params->{params});
- my $expected = [ { type => 'members.add', value => ['foo'] } ];
- is_deeply($data->{transactions}, $expected, 'add foo');
- return mock({is_error => 0, content => '{}'});
- },
- ]
- );
- local @group_members = (
- { phid => 'foo' },
- );
- local @project_members = (
- );
- $feed->group_query;
-};
-
-do {
- my $Revision = mock 'Bugzilla::Extension::PhabBugz::Revision' => (
- override => [
- 'update' => sub { 1 },
- ],
- );
- my $UserAgent = mock 'LWP::UserAgent' => (
- override => [
- 'post' => sub {
- my ($self, $url, $params) = @_;
- if ($url =~ /differential\.revision\.search/) {
- my $content = <<JSON;
-{
- "error_info": null,
- "error_code": null,
- "result": {
- "data": [
- {
- "id": 9999,
- "type": "DREV",
- "phid": "PHID-DREV-uozm3ggfp7e7uoqegmc3",
- "fields": {
- "title": "Added .arcconfig",
- "summary": "Added .arcconfig",
- "authorPHID": "PHID-USER-4wigy3sh5fc5t74vapwm",
- "dateCreated": 1507666113,
- "dateModified": 1508514027,
- "policy": {
- "view": "public",
- "edit": "admin"
- },
- "bugzilla.bug-id": "23",
- "status": {
- "value": "needs-review",
- "name": "Needs Review",
- "closed": false,
- "color.ansi": "magenta"
- }
- },
- "attachments": {
- "reviewers": {
- "reviewers": []
- },
- "subscribers": {
- "subscriberPHIDs": [],
- "subscriberCount": 0,
- "viewerIsSubscribed": true
- },
- "projects": {
- "projectPHIDs": []
- }
- }
- }
- ]
- }
-}
-JSON
- return mock { is_error => 0, content => $content };
- }
- else {
- return mock { is_error => 1, message => "bad request" };
- }
- },
- ],
- );
- my $bug = mock {
- bug_id => 23,
- attachments => [
- mock {
- contenttype => 'text/x-phabricator-request',
- filename => 'phabricator-D9999-url.txt',
- },
- ]
- };
- my $revisions = get_attachment_revisions($bug);
- is(ref($revisions), 'ARRAY', 'it is an array ref');
- isa_ok($revisions->[0], 'Bugzilla::Extension::PhabBugz::Revision');
- is($revisions->[0]->bug_id, 23, 'Bugzila ID is 23');
- ok( try { $revisions->[0]->update }, 'update revision');
-
-};
-
-done_testing; \ No newline at end of file
diff --git a/t/sqlite-memory.t b/t/sqlite-memory.t
new file mode 100644
index 000000000..66f8e5d29
--- /dev/null
+++ b/t/sqlite-memory.t
@@ -0,0 +1,89 @@
+# 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 lib qw( . lib local/lib/perl5 );
+use Test::More;
+use Test2::Tools::Mock;
+use Try::Tiny;
+use Capture::Tiny qw(capture_merged);
+use Bugzilla::Test::MockParams;
+
+BEGIN {
+ $ENV{LOCALCONFIG_ENV} = 'BMO';
+ $ENV{BMO_db_driver} = 'sqlite';
+ $ENV{BMO_db_name} = ':memory:';
+};
+use Bugzilla;
+BEGIN { Bugzilla->extensions };
+
+
+isa_ok(Bugzilla->dbh, 'Bugzilla::DB::Sqlite');
+
+use ok 'Bugzilla::Install';
+use ok 'Bugzilla::Install::DB';
+
+my $lives_ok = sub {
+ my ($desc, $code) = @_;
+ my $output;
+ try {
+ $output = capture_merged { $code->() };
+ pass($desc);
+ } catch {
+ diag $_;
+ fail($desc);
+ } finally {
+ diag "OUTPUT: $output" if $output;
+ };
+};
+
+my $output = '';
+$lives_ok->('bz_setup_database' => sub {
+ Bugzilla->dbh->bz_setup_database
+});
+
+$lives_ok->('bz_populate_enum_tables' => sub {
+ # Populate the tables that hold the values for the <select> fields.
+ Bugzilla->dbh->bz_populate_enum_tables();
+});
+
+$lives_ok->('update_fielddefs_definition' => sub {
+ Bugzilla::Install::DB::update_fielddefs_definition();
+});
+
+$lives_ok->('populate_field_definitions' => sub {
+ Bugzilla::Field::populate_field_definitions();
+});
+
+$lives_ok->('init_workflow' => sub {
+ Bugzilla::Install::init_workflow();
+});
+
+$lives_ok->('update_table_definitions' => sub {
+ Bugzilla::Install::DB->update_table_definitions({});
+});
+
+$lives_ok->('update_system_groups' => sub {
+ Bugzilla::Install::update_system_groups();
+});
+
+# "Log In" as the fake superuser who can do everything.
+Bugzilla->set_user(Bugzilla::User->super_user);
+
+$lives_ok->('update_settings' => sub {
+ Bugzilla::Install::update_settings();
+});
+
+SKIP: {
+ skip 'default product cannot be created without default assignee', 1;
+ $lives_ok->('create_default_product' => sub {
+ Bugzilla::Install::create_default_product();
+ });
+}
+
+done_testing;