Koha/t/db_dependent/Circulation/GetTopIssues.t
Tomas Cohen Arazi 9c20a3f797 Bug 15160: GetTopIssues.t should create random data
This patch refactors t/db_dependent/Circulation/GetTopIssues.t so it
creates its own data with random values. It does so by replacing (legacy)
SQL inserts and fixed value data inserting by TestBuilder generated data.

There is no expected behaviour change.

To test:
- Create an itemtyp directly on your DB with GTI_I_TEST as its itemtype
  > INSERT INTO itemtypes (itemtype) VALUES ('GTI_I_TEST');
- Run:
  $ prove t/db_dependent/Circulation/GetTopIssues.t
=> FAIL: The insert line fails
- Apply the patch
- Run:
  $ prove t/db_dependent/Circulation/GetTopIssues.t
=> SUCCESS: tests pass due to random data usage.
- Sign off

Signed-off-by: Frederic Demians <f.demians@tamil.fr>
  Test plan produces the expected result, failing, then OK.

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2015-11-10 09:27:55 -03:00

131 lines
3.6 KiB
Perl

#!/usr/bin/perl
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use Test::More tests => 14;
use Test::MockModule;
use t::lib::TestBuilder;
use C4::Context;
use C4::Circulation;
use C4::Biblio;
use C4::Items;
use C4::Members;
use Koha::Database;
my $schema = Koha::Database->new()->schema();
my $dbh = $schema->storage->dbh;
my $builder = t::lib::TestBuilder->new();
# Start transaction
$dbh->{RaiseError} = 1;
$schema->storage->txn_begin();
my $itemtype = $builder->build({ source => 'Itemtype' })->{ itemtype };
my $category = $builder->build({ source => 'Category' })->{ categorycode };
my $branch_1 = $builder->build({ source => 'Branch' });
my $branch_2 = $builder->build({ source => 'Branch' });
my $c4_context = Test::MockModule->new('C4::Context');
$c4_context->mock('userenv', sub {
{ branch => $branch_1->{ branchcode } }
});
C4::Context->set_preference('item-level_itypes', '0');
my $biblionumber = create_biblio('Test 1', $itemtype);
AddItem({
barcode => 'GTI_BARCODE_001',
homebranch => $branch_1->{ branchcode },
ccode => 'GTI_CCODE',
}, $biblionumber);
$biblionumber = create_biblio('Test 2', $itemtype);
AddItem({
barcode => 'GTI_BARCODE_002',
homebranch => $branch_2->{ branchcode },
}, $biblionumber);
my $borrowernumber = AddMember(
userid => 'gti.test',
categorycode => $category,
branchcode => $branch_1->{ branchcode }
);
my $borrower = GetMember(borrowernumber => $borrowernumber);
AddIssue($borrower, 'GTI_BARCODE_001');
AddIssue($borrower, 'GTI_BARCODE_002');
#
# Start of tests
#
my @issues = GetTopIssues({count => 10, itemtype => $itemtype});
is(scalar @issues, 2);
is($issues[0]->{title}, 'Test 1');
is($issues[1]->{title}, 'Test 2');
@issues = GetTopIssues({count => 1, itemtype => $itemtype});
is(scalar @issues, 1);
is($issues[0]->{title}, 'Test 1');
@issues = GetTopIssues({count => 10, branch => $branch_2->{ branchcode }});
is(scalar @issues, 1);
is($issues[0]->{title}, 'Test 2');
@issues = GetTopIssues({count => 10, ccode => 'GTI_CCODE'});
is(scalar @issues, 1);
is($issues[0]->{title}, 'Test 1');
@issues = GetTopIssues({count => 10, itemtype => $itemtype, newness => 1});
is(scalar @issues, 2);
is($issues[0]->{title}, 'Test 1');
is($issues[1]->{title}, 'Test 2');
$dbh->do(q{
UPDATE biblio
SET datecreated = DATE_SUB(datecreated, INTERVAL 2 DAY)
WHERE biblionumber = ?
}, undef, $biblionumber);
@issues = GetTopIssues({count => 10, itemtype => $itemtype, newness => 1});
is(scalar @issues, 1);
is($issues[0]->{title}, 'Test 1');
#
# End of tests
#
$schema->storage->txn_rollback();
sub create_biblio {
my ($title, $itemtype) = @_;
my ($title_tag, $title_subfield) = GetMarcFromKohaField('biblio.title', '');
my ($it_tag, $it_subfield) = GetMarcFromKohaField('biblioitems.itemtype', '');
my $record = MARC::Record->new();
$record->append_fields(
MARC::Field->new($title_tag, ' ', ' ', $title_subfield => $title),
MARC::Field->new($it_tag, ' ', ' ', $it_subfield => $itemtype),
);
my ($biblionumber) = AddBiblio($record, '');
return $biblionumber;
}