Lines 19-31
Link Here
|
19 |
|
19 |
|
20 |
use Modern::Perl; |
20 |
use Modern::Perl; |
21 |
|
21 |
|
22 |
use Test::More tests => 11; |
22 |
use Test::More tests => 12; |
|
|
23 |
use Test::Exception; |
23 |
|
24 |
|
24 |
use t::lib::TestBuilder; |
25 |
use t::lib::TestBuilder; |
25 |
use t::lib::Mocks; |
26 |
use t::lib::Mocks; |
26 |
|
27 |
|
|
|
28 |
use C4::Circulation; |
29 |
|
30 |
use Koha::Biblios; |
27 |
use Koha::Database; |
31 |
use Koha::Database; |
28 |
use Koha::DateUtils qw(dt_from_string); |
32 |
use Koha::DateUtils qw(dt_from_string); |
|
|
33 |
use Koha::Items; |
29 |
|
34 |
|
30 |
my $schema = Koha::Database->schema; |
35 |
my $schema = Koha::Database->schema; |
31 |
my $builder = t::lib::TestBuilder->new; |
36 |
my $builder = t::lib::TestBuilder->new; |
Lines 582-586
subtest 'filter_by_current & filter_by_cancelled' => sub {
Link Here
|
582 |
is( $orders->filter_by_cancelled->count, 1); |
587 |
is( $orders->filter_by_cancelled->count, 1); |
583 |
|
588 |
|
584 |
|
589 |
|
|
|
590 |
$schema->storage->txn_rollback; |
591 |
}; |
592 |
|
593 |
subtest 'cancel() tests' => sub { |
594 |
|
595 |
plan tests => 23; |
596 |
|
597 |
$schema->storage->txn_begin; |
598 |
|
599 |
# Scenario: |
600 |
# * order with one item attached |
601 |
# * the item is on loan |
602 |
# * delete_biblio => 1 is passed |
603 |
# => order is not cancelled |
604 |
# => item in order is not removed |
605 |
# => biblio is kept |
606 |
# => exception is thrown |
607 |
|
608 |
my $item = $builder->build_sample_item; |
609 |
my $biblio_id = $item->biblio->id; |
610 |
my $order = $builder->build_object( |
611 |
{ |
612 |
class => 'Koha::Acquisition::Orders', |
613 |
value => { |
614 |
orderstatus => 'new', |
615 |
biblionumber => $item->biblio->id, |
616 |
datecancellationprinted => undef, |
617 |
cancellationreason => undef, |
618 |
} |
619 |
} |
620 |
); |
621 |
$order->add_item( $item->id ); |
622 |
|
623 |
my $patron = $builder->build_object({ class => 'Koha::Patrons' }); |
624 |
t::lib::Mocks::mock_userenv( |
625 |
{ patron => $patron, branchcode => $patron->branchcode } ); |
626 |
|
627 |
# Add a checkout so cancelling fails because od 'book_on_loan' |
628 |
C4::Circulation::AddIssue( $patron->unblessed, $item->barcode ); |
629 |
|
630 |
throws_ok |
631 |
{ $order->cancel({ delete_biblio => 1, reason => 'Some reason' }); } |
632 |
'Koha::Exceptions::Object::CannotBeDeleted', |
633 |
'An exception is thrown'; |
634 |
|
635 |
like( |
636 |
"$@", |
637 |
qr/Cannot delete Koha::Item=HASH\(.*\) object \(id=\d*\). Reason: book_on_loan/, |
638 |
'The exception is correct, item on loan' |
639 |
); |
640 |
|
641 |
# refresh the order object |
642 |
$order->discard_changes; |
643 |
|
644 |
isnt( $order->orderstatus, 'cancelled', 'Order is not marked as cancelled' ); |
645 |
is( $order->datecancellationprinted, undef, 'datecancellationprinted is undef' ); |
646 |
is( $order->cancellationreason, undef, 'cancellationreason is undef' ); |
647 |
is( ref(Koha::Items->find($item->id)), 'Koha::Item', 'The item is present' ); |
648 |
is( ref(Koha::Biblios->find($biblio_id)), 'Koha::Biblio', 'The biblio is present' ); |
649 |
|
650 |
# Scenario: |
651 |
# * order with one item attached |
652 |
# * the item is no longer on loan |
653 |
# * delete_biblio => 1 is passed |
654 |
# => order is cancelled |
655 |
# => item in order is removed |
656 |
# => biblio is removed because delete_biblio => 1 is passed |
657 |
|
658 |
C4::Circulation::AddReturn( $item->barcode ); |
659 |
|
660 |
$order->cancel({ delete_biblio => 1, reason => 'Some reason' }) |
661 |
->discard_changes; |
662 |
|
663 |
is( $order->orderstatus, 'cancelled', 'Order is marked as cancelled' ); |
664 |
isnt( $order->datecancellationprinted, undef, 'datecancellationprinted is set' ); |
665 |
is( $order->cancellationreason, 'Some reason', 'cancellationreason is undef' ); |
666 |
is( Koha::Items->find($item->id), undef, 'The item is no longer present' ); |
667 |
is( Koha::Biblios->find($biblio_id), undef, 'The biblio is no longer present' ); |
668 |
|
669 |
# Scenario: |
670 |
# * order with one item attached |
671 |
# * biblio has one more item |
672 |
# * delete_biblio => 1 is passed |
673 |
# => order is cancelled |
674 |
# => item in order is removed |
675 |
# => biblio is kept as there's a remaining item |
676 |
# => the extra item remains untouched |
677 |
|
678 |
my $item_1 = $builder->build_sample_item; |
679 |
$biblio_id = $item_1->biblio->id; |
680 |
my $item_2 = $builder->build_sample_item({ biblionumber => $biblio_id }); |
681 |
$order = $builder->build_object( |
682 |
{ |
683 |
class => 'Koha::Acquisition::Orders', |
684 |
value => { |
685 |
orderstatus => 'new', |
686 |
biblionumber => $biblio_id, |
687 |
datecancellationprinted => undef, |
688 |
cancellationreason => undef, |
689 |
} |
690 |
} |
691 |
); |
692 |
$order->add_item( $item_1->id ); |
693 |
|
694 |
$order->cancel({ delete_biblio => 1, reason => 'Some reason' }) |
695 |
->discard_changes; |
696 |
|
697 |
is( $order->orderstatus, 'cancelled', 'Order is marked as cancelled' ); |
698 |
isnt( $order->datecancellationprinted, undef, 'datecancellationprinted is set' ); |
699 |
is( $order->cancellationreason, 'Some reason', 'cancellationreason is undef' ); |
700 |
is( Koha::Items->find($item_1->id), undef, 'The item is no longer present' ); |
701 |
is( ref(Koha::Items->find($item_2->id)), 'Koha::Item', 'The item is still present' ); |
702 |
is( ref(Koha::Biblios->find($biblio_id)), 'Koha::Biblio', 'The biblio is still present' ); |
703 |
|
704 |
# Scenario: |
705 |
# * order with one item attached |
706 |
# * delete_biblio => 0 is passed |
707 |
# => order is cancelled |
708 |
# => item in order is removed |
709 |
# => biblio is kept because delete_biblio => 0 passed |
710 |
|
711 |
$item = $builder->build_sample_item; |
712 |
$biblio_id = $item->biblio->id; |
713 |
$order = $builder->build_object( |
714 |
{ |
715 |
class => 'Koha::Acquisition::Orders', |
716 |
value => { |
717 |
orderstatus => 'new', |
718 |
biblionumber => $biblio_id, |
719 |
datecancellationprinted => undef, |
720 |
cancellationreason => undef, |
721 |
} |
722 |
} |
723 |
); |
724 |
$order->add_item( $item->id ); |
725 |
|
726 |
$order->cancel({ delete_biblio => 0, reason => 'Some reason' }) |
727 |
->discard_changes; |
728 |
|
729 |
is( $order->orderstatus, 'cancelled', 'Order is marked as cancelled' ); |
730 |
isnt( $order->datecancellationprinted, undef, 'datecancellationprinted is set' ); |
731 |
is( $order->cancellationreason, 'Some reason', 'cancellationreason is undef' ); |
732 |
is( Koha::Items->find($item->id), undef, 'The item is no longer present' ); |
733 |
is( ref(Koha::Biblios->find($biblio_id)), 'Koha::Biblio', 'The biblio is still present' ); |
734 |
|
585 |
$schema->storage->txn_rollback; |
735 |
$schema->storage->txn_rollback; |
586 |
}; |
736 |
}; |
587 |
- |
|
|