Bug 16961: Add Koha::Objects->update
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 22 Jul 2016 12:56:36 +0000 (13:56 +0100)
committerKyle M Hall <kyle@bywatersolutions.com>
Sun, 25 Sep 2016 15:46:39 +0000 (15:46 +0000)
In order to update several rows in a single query, we need this new
method.

Test plan:
Confirm that the changes in Objects.t make sense and that the tests
pass.

Signed-off-by: Hector Castro <hector.hecaxmmx@gmail.com>
Test passed successfully

Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Koha/Objects.pm
t/db_dependent/Koha/Objects.t

index c365e7f..97436ad 100644 (file)
@@ -234,6 +234,19 @@ sub _wrap {
     return @objects;
 }
 
+=head3 update
+
+    Koha::Objects->search({ $key => $value})->update( \%values );
+
+Sets the specified columns in the resultset to the supplied values in a single query.
+
+=cut
+
+sub update {
+    my ( $self, $params ) = @_;
+    return $self->_resultset()->update($params);
+}
+
 =head3 Koha::Objects->_resultset
 
 Returns the internal resultset or creates it if undefined
index b92239a..3551caa 100644 (file)
 
 use Modern::Perl;
 
-use Test::More tests => 2;
+use Test::More tests => 3;
 
 use Koha::Authority::Types;
+use Koha::Cities;
 use Koha::Patrons;
 use Koha::Database;
 
@@ -36,5 +37,19 @@ my @columns = Koha::Patrons->columns;
 my $borrowernumber_exists = grep { /^borrowernumber$/ } @columns;
 is( $borrowernumber_exists, 1, 'Koha::Objects->columns should return the table columns' );
 
+subtest 'update' => sub {
+    plan tests => 2;
+    my $builder = t::lib::TestBuilder->new;
+    $builder->build( { source => 'City', value => { city_country => 'UK' } } );
+    $builder->build( { source => 'City', value => { city_country => 'UK' } } );
+    $builder->build( { source => 'City', value => { city_country => 'UK' } } );
+    $builder->build( { source => 'City', value => { city_country => 'France' } } );
+    $builder->build( { source => 'City', value => { city_country => 'France' } } );
+    $builder->build( { source => 'City', value => { city_country => 'Germany' } } );
+    Koha::Cities->search( { city_country => 'UK' } )->update( { city_country => 'EU' } );
+    is( Koha::Cities->search( { city_country => 'EU' } )->count, 3, 'Koha::Objects->update should have updated the 3 rows' );
+    is( Koha::Cities->search( { city_country => 'UK' } )->count, 0, 'Koha::Objects->update should have updated the 3 rows' );
+};
+
 $schema->storage->txn_rollback;
 1;