3 # Copyright 2016 Koha Development team
5 # This file is part of Koha
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
22 use Test::More tests => 4;
24 use Koha::Item::Transfer;
25 use Koha::Item::Transfers;
27 use Koha::DateUtils qw( dt_from_string );
29 use t::lib::TestBuilder;
32 my $schema = Koha::Database->new->schema;
33 $schema->storage->txn_begin;
35 my $builder = t::lib::TestBuilder->new;
36 my $library_from = $builder->build( { source => 'Branch' } );
37 my $library_to = $builder->build( { source => 'Branch' } );
38 my $item = $builder->build_sample_item(
40 holdingbranch => $library_from->{branchcode},
41 homebranch => $library_to->{branchcode}
45 my $nb_of_transfers = Koha::Item::Transfers->search->count;
46 my $new_transfer_1 = Koha::Item::Transfer->new(
47 { itemnumber => $item->itemnumber,
48 frombranch => $library_from->{branchcode},
49 tobranch => $library_to->{branchcode},
50 datearrived => dt_from_string,
51 datesent => dt_from_string,
54 my $new_transfer_2 = Koha::Item::Transfer->new(
55 { itemnumber => $item->itemnumber,
56 frombranch => $library_from->{branchcode},
57 tobranch => $library_to->{branchcode},
59 datesent => dt_from_string,
63 is( Koha::Item::Transfers->search->count, $nb_of_transfers + 2, 'The 2 transfers should have been added' );
65 my $retrieved_transfer_1 = Koha::Item::Transfers->search( { itemnumber => $new_transfer_1->itemnumber })->next;
66 is( $retrieved_transfer_1->itemnumber, $new_transfer_1->itemnumber, 'Find a transfer by id should return the correct transfer' );
68 # FIXME: This does not pass and should be fixed later
69 # "Operation requires a primary key to be declared on 'Branchtransfer' via set_primary_key"
70 #$retrieved_transfer_1->delete;
71 #is( Koha::Item::Transfers->search->count, $nb_of_transfers + 1, 'Delete should have deleted the transfer' );
73 $schema->storage->txn_rollback;
75 subtest 'daterequested tests' => sub {
79 $schema->storage->txn_begin;
80 my $library_from = $builder->build( { source => 'Branch' } );
81 my $library_to = $builder->build( { source => 'Branch' } );
82 my $item = $builder->build_sample_item(
84 holdingbranch => $library_from->{branchcode},
85 homebranch => $library_to->{branchcode}
89 my $now = dt_from_string;
90 my $transfer = Koha::Item::Transfer->new(
92 itemnumber => $item->itemnumber,
93 frombranch => $library_from->{branchcode},
94 tobranch => $library_to->{branchcode}
97 $transfer->discard_changes;
99 ok( $transfer->daterequested, 'daterequested set on creation' );
100 is( t::lib::Dates::compare( $transfer->daterequested, $now ),
101 0, 'daterequested was set correctly' );
103 my $new_date = $now->clone->add( hours => 1 );
104 $transfer->set({ datesent => $new_date })->store;
105 $transfer->discard_changes;
107 is( t::lib::Dates::compare( $transfer->daterequested, $now ),
108 0, 'daterequested is not updated when other fields are updated' );
110 $schema->storage->txn_rollback;
113 subtest 'filter_by_current() tests' => sub {
117 $schema->storage->txn_begin;
119 my $transfer_1 = $builder->build_object({ class => 'Koha::Item::Transfers', value => { datearrived => \'NOW()', datecancelled => undef } });
120 my $transfer_2 = $builder->build_object({ class => 'Koha::Item::Transfers', value => { datearrived => undef, datecancelled => \'NOW()' } });
121 my $transfer_3 = $builder->build_object({ class => 'Koha::Item::Transfers', value => { datearrived => undef, datecancelled => undef } });
123 my $rs = Koha::Item::Transfers->search({ branchtransfer_id => [ $transfer_1->id, $transfer_2->id, $transfer_3->id ] });
125 is( $rs->count, 3, 'Resultset has 3 transfers' );
127 $rs = $rs->filter_by_current;
129 is( $rs->count, 1, 'Filtered resultset has 1 transfer' );
130 is( $rs->next->id, $transfer_3->id, 'Only current transfer left on the resultset' );
132 $schema->storage->txn_rollback;