Koha/t/db_dependent/StockRotationRotas.t
Martin Renvoize 85be5a8188 Bug 11897: Stockrotation
The stock rotation feature adds a batch process to automate rotation of
catalgue items with a staff client page under tools to manage rotas/schedules.

Once a rota is configured, and your staff user has the right permissions
to allocate items, then an additional tab will appear on biblio records
allowing the management of of which rota, if any, individual items belong to.

It also includes a cron script to process the items on a daily basis.

Signed-off-by: Kathleen Milne <kathleen.milne@cne-siar.gov.uk>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Edit: I removed a temporary file

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
2018-10-09 15:46:05 +00:00

175 lines
5 KiB
Perl

#!/usr/bin/perl
# Copyright PTFS Europe 2016
#
# 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use Modern::Perl;
use Koha::Database;
use t::lib::TestBuilder;
use Test::More tests => 5;
my $schema = Koha::Database->new->schema;
use_ok('Koha::StockRotationRotas');
use_ok('Koha::StockRotationRota');
subtest 'Basic object tests' => sub {
plan tests => 5;
$schema->storage->txn_begin;
my $builder = t::lib::TestBuilder->new;
my $rota = $builder->build({ source => 'Stockrotationrota' });
my $srrota = Koha::StockRotationRotas->find($rota->{rota_id});
isa_ok(
$srrota,
'Koha::StockRotationRota',
"Correctly create and load a stock rotation rota."
);
$builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->{rota_id} },
});
$builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->{rota_id} },
});
$builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->{rota_id} },
});
my $srstages = $srrota->stockrotationstages;
is( $srstages->count, 3, 'Correctly fetched stockrotationstages associated with this rota');
isa_ok( $srstages->next, 'Koha::StockRotationStage', "Relationship correctly creates Koha::Objects." );
#### Test add_item
my $item = $builder->build({ source => 'Item' });
$srrota->add_item($item->{itemnumber});
is(
Koha::StockRotationItems->find($item->{itemnumber})->stage_id,
$srrota->first_stage->stage_id,
"Adding an item results in a new sritem item being assigned to the first stage."
);
my $newrota = $builder->build({ source => 'Stockrotationrota' });
my $srnewrota = Koha::StockRotationRotas->find($newrota->{rota_id});
$builder->build({
source => 'Stockrotationstage',
value => { rota_id => $newrota->{rota_id} },
});
$srnewrota->add_item($item->{itemnumber});
is(
Koha::StockRotationItems->find($item->{itemnumber})->stage_id,
$srnewrota->stockrotationstages->next->stage_id,
"Moving an item results in that sritem being assigned to the new first stage."
);
$schema->storage->txn_rollback;
};
subtest '->first_stage test' => sub {
plan tests => 2;
$schema->storage->txn_begin;
my $builder = t::lib::TestBuilder->new;
my $rota = $builder->build({ source => 'Stockrotationrota' });
my $stage1 = $builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->{rota_id} },
});
my $stage2 = $builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->{rota_id} },
});
my $stage3 = $builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->{rota_id} },
});
my $srrota = Koha::StockRotationRotas->find($rota->{rota_id});
my $srstage2 = Koha::StockRotationStages->find($stage2->{stage_id});
my $firststage = $srstage2->first_sibling || $srstage2;
is( $srrota->first_stage->stage_id, $firststage->stage_id, "First stage works" );
$srstage2->move_first;
is( Koha::StockRotationRotas->find($rota->{rota_id})->first_stage->stage_id, $stage2->{stage_id}, "Stage re-organized" );
$schema->storage->txn_rollback;
};
subtest '->items test' => sub {
plan tests => 1;
$schema->storage->txn_begin;
my $builder = t::lib::TestBuilder->new;
my $rota = $builder->build({ source => 'Stockrotationrota' });
my $stage1 = $builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->{rota_id} },
});
my $stage2 = $builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->{rota_id} },
});
my $stage3 = $builder->build({
source => 'Stockrotationstage',
value => { rota_id => $rota->{rota_id} },
});
map { $builder->build({
source => 'Stockrotationitem',
value => { stage_id => $_ },
}) } (
$stage1->{stage_id}, $stage1->{stage_id},
$stage2->{stage_id}, $stage2->{stage_id},
$stage3->{stage_id}, $stage3->{stage_id},
);
my $srrota = Koha::StockRotationRotas->find($rota->{rota_id});
is(
$srrota->stockrotationitems->count,
6, "Correct number of items"
);
$schema->storage->txn_rollback;
};
1;