From 7ff5624850a8d582d680e621168d7ccdb58bb912 Mon Sep 17 00:00:00 2001
From: Tomas Cohen Arazi <tomascohen@theke.io>
Date: Tue, 31 Dec 2019 09:16:17 -0300
Subject: [PATCH] Bug 24321: Add Koha::Objects->attributes_from_api

This patch makes the 'attributes_from_api' method from the singular
class available from the result set class.

To test:
1. Apply this patch
2. Run:
   $ kshell
  k$ prove t/db_dependent/Koha/Objects.t
=> SUCCESS: Tests pass!
4. Sign off :-D
5. Yeah, I skipped 3 :-P
---
 Koha/Objects.pm               | 15 +++++++++++++++
 t/db_dependent/Koha/Objects.t | 24 +++++++++++++++++++++++-
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/Koha/Objects.pm b/Koha/Objects.pm
index 31387e1442..165511a42a 100644
--- a/Koha/Objects.pm
+++ b/Koha/Objects.pm
@@ -320,6 +320,21 @@ sub to_api {
     return [ map { $_->to_api } $self->as_list ];
 }
 
+=head3 attributes_from_api
+
+    my $attributes = $objects->attributes_from_api( $api_attributes );
+
+Translates attributes from the API to DBIC
+
+=cut
+
+sub attributes_from_api {
+    my ( $self, $attributes ) = @_;
+
+    $self->{_singular_object} ||= $self->object_class->new();
+    return $self->{_singular_object}->attributes_from_api( $attributes );
+}
+
 =head3 Koha::Objects->_wrap
 
 wraps the DBIC object in a corresponding Koha object
diff --git a/t/db_dependent/Koha/Objects.t b/t/db_dependent/Koha/Objects.t
index 592ab40866..e6e5db2289 100644
--- a/t/db_dependent/Koha/Objects.t
+++ b/t/db_dependent/Koha/Objects.t
@@ -19,7 +19,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 17;
+use Test::More tests => 18;
 use Test::Exception;
 use Test::Warn;
 
@@ -330,3 +330,25 @@ subtest "TO_JSON() tests" => sub {
 
     $schema->storage->txn_rollback;
 };
+
+subtest "attributes_from_api() tests" => sub {
+
+    plan tests => 1;
+
+    $schema->storage->txn_begin;
+
+    my $cities_rs = Koha::Cities->new;
+    my $city      = Koha::City->new;
+
+    my $api_attributes = {
+        name        => 'Cordoba',
+        postal_code => 5000
+    };
+
+    is_deeply(
+        $cities_rs->attributes_from_api($api_attributes),
+        $city->attributes_from_api($api_attributes)
+    );
+
+    $schema->storage->txn_rollback;
+};
-- 
2.24.1