=head1 API
-=head2 Class Methods
+=head2 Class methods
=cut
)->filter_by_for_hold();
}
-=head3 type
+=head3 filter_by_has_cancellation_requests
+
+ my $with_cancellation_reqs = $holds->filter_by_has_cancellation_requests;
+
+Returns a filtered resultset only containing holds that have cancellation requests.
+
+=cut
+
+sub filter_by_has_cancellation_requests {
+ my ($self) = @_;
+
+ return $self->search( { 'hold_cancellation_request_id' => { '!=' => undef } },
+ { join => 'cancellation_requests' } );
+}
+
+=head2 Internal methods
+
+=head3 _type
=cut
use Modern::Perl;
-use Test::More tests => 7;
+use Test::More tests => 8;
use Test::Warn;
use C4::Circulation qw( AddIssue );
$schema->storage->txn_rollback;
-1;
+subtest 'filter_by_has_cancellation_requests() tests' => sub {
+
+ plan tests => 4;
+
+ $schema->storage->txn_begin;
+
+ my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
+
+ my $item_1 = $builder->build_sample_item;
+ my $item_2 = $builder->build_sample_item;
+ my $item_3 = $builder->build_sample_item;
+
+ my $hold_1 = $builder->build_object(
+ {
+ class => 'Koha::Holds',
+ value => {
+ found => 'W',
+ itemnumber => $item_1->id,
+ biblionumber => $item_1->biblionumber,
+ borrowernumber => $patron->id
+ }
+ }
+ );
+ my $hold_2 = $builder->build_object(
+ {
+ class => 'Koha::Holds',
+ value => {
+ found => 'W',
+ itemnumber => $item_2->id,
+ biblionumber => $item_2->biblionumber,
+ borrowernumber => $patron->id
+ }
+ }
+ );
+ my $hold_3 = $builder->build_object(
+ {
+ class => 'Koha::Holds',
+ value => {
+ found => 'W',
+ itemnumber => $item_3->id,
+ biblionumber => $item_3->biblionumber,
+ borrowernumber => $patron->id
+ }
+ }
+ );
+
+ my $rs = Koha::Holds->search(
+ { reserve_id => [ $hold_1->id, $hold_2->id, $hold_3->id ] } );
+
+ is( $rs->count, 3 );
+
+ my $filtered_rs = $rs->filter_by_has_cancellation_requests;
+
+ is( $filtered_rs->count, 0 );
+
+ $hold_2->add_cancellation_request;
+
+ $filtered_rs = $rs->filter_by_has_cancellation_requests;
+
+ is( $filtered_rs->count, 1 );
+ is( $filtered_rs->next->id, $hold_2->id );
+
+ $schema->storage->txn_rollback;
+};