157 lines
4.1 KiB
Perl
Executable File
157 lines
4.1 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
use Modern::Perl;
|
|
|
|
use Test::More tests => 12;
|
|
|
|
use Koha::Acquisition::Baskets; # Koha::Acquisition::Baskets uses the mixin
|
|
use Koha::AdditionalFields;
|
|
use Koha::AdditionalFieldValues;
|
|
use Koha::Database;
|
|
|
|
use t::lib::TestBuilder;
|
|
|
|
my $storage = Koha::Database->new->schema->storage;
|
|
$storage->txn_begin;
|
|
|
|
my $builder = t::lib::TestBuilder->new;
|
|
my $basket1 = $builder->build_object({
|
|
class => 'Koha::Acquisition::Baskets',
|
|
});
|
|
my $basket2 = $builder->build_object({
|
|
class => 'Koha::Acquisition::Baskets',
|
|
});
|
|
|
|
my $foo = Koha::AdditionalField->new({
|
|
tablename => 'aqbasket',
|
|
name => 'basket_foo',
|
|
})->store;
|
|
my $bar = Koha::AdditionalField->new({
|
|
tablename => 'aqbasket',
|
|
name => 'basket_bar',
|
|
})->store;
|
|
|
|
Koha::AdditionalFieldValue->new({
|
|
field_id => $foo->id,
|
|
record_id => $basket1->basketno,
|
|
value => 'foo value for basket1',
|
|
})->store;
|
|
Koha::AdditionalFieldValue->new({
|
|
field_id => $bar->id,
|
|
record_id => $basket1->basketno,
|
|
value => 'bar value for basket1',
|
|
})->store;
|
|
|
|
my $additional_fields_for_basket2 = [
|
|
{
|
|
id => $foo->id,
|
|
value => 'foo value for basket2',
|
|
},
|
|
{
|
|
id => $bar->id,
|
|
value => 'bar value for basket2',
|
|
},
|
|
];
|
|
$basket2->set_additional_fields($additional_fields_for_basket2);
|
|
|
|
my $additional_fields = $basket2->additional_field_values;
|
|
is( ref($additional_fields), 'Koha::AdditionalFieldValues', '->additional_field_values should return a Koha::AdditionalFieldValues object' );
|
|
is_deeply(
|
|
[
|
|
map {
|
|
{
|
|
# We are bascially removing the 'id' field here
|
|
field_id => $_->{field_id},
|
|
record_id => $_->{record_id},
|
|
value => $_->{value},
|
|
}
|
|
} sort{ $a->{id} <=> $b->{id} } @{ $additional_fields->unblessed }
|
|
],
|
|
[
|
|
{
|
|
field_id => $additional_fields_for_basket2->[0]->{id},
|
|
record_id => $basket2->basketno,
|
|
value => $additional_fields_for_basket2->[0]->{value},
|
|
},
|
|
{
|
|
field_id => $additional_fields_for_basket2->[1]->{id},
|
|
record_id => $basket2->basketno,
|
|
value => $additional_fields_for_basket2->[1]->{value},
|
|
}
|
|
|
|
],
|
|
'->additional_field_values should return the correct values'
|
|
);
|
|
|
|
my @baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
|
|
{
|
|
id => $foo->id,
|
|
value => 'foo value for basket1',
|
|
},
|
|
])->as_list;
|
|
|
|
is(scalar @baskets, 1, 'search returns only one result');
|
|
is($baskets[0]->basketno, $basket1->basketno, 'result is basket1');
|
|
|
|
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
|
|
{
|
|
id => $foo->id,
|
|
value => 'foo value for basket2',
|
|
},
|
|
])->as_list;
|
|
|
|
is(scalar @baskets, 1, 'search returns only one result');
|
|
is($baskets[0]->basketno, $basket2->basketno, 'result is basket2');
|
|
|
|
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
|
|
{
|
|
id => $foo->id,
|
|
value => 'foo value for basket1',
|
|
},
|
|
{
|
|
id => $bar->id,
|
|
value => 'bar value for basket1',
|
|
},
|
|
])->as_list;
|
|
|
|
is(scalar @baskets, 1, 'search returns only one result');
|
|
is($baskets[0]->basketno, $basket1->basketno, 'result is basket1');
|
|
|
|
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
|
|
{
|
|
id => $foo->id,
|
|
value => 'foo value for basket1',
|
|
},
|
|
{
|
|
id => $bar->id,
|
|
value => 'bar value for basket2',
|
|
},
|
|
])->as_list;
|
|
|
|
is(scalar @baskets, 0, 'search returns no result');
|
|
|
|
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
|
|
{
|
|
id => $foo->id,
|
|
value => 'foo',
|
|
},
|
|
])->as_list;
|
|
|
|
is(scalar @baskets, 2, 'search returns two results');
|
|
|
|
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
|
|
{
|
|
id => $foo->id,
|
|
value => 'foo',
|
|
},
|
|
{
|
|
id => $foo->id,
|
|
value => 'basket1',
|
|
},
|
|
])->as_list;
|
|
|
|
is(scalar @baskets, 1, 'search returns only one result');
|
|
is($baskets[0]->basketno, $basket1->basketno, 'result is basket1');
|
|
|
|
$storage->txn_rollback;
|