Koha-clms/t/db_dependent/Koha/Objects/Mixin/AdditionalFields.t

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;