From dcabb9257dca5c990182f7d69f1ea86a0d51e771 Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Date: Thu, 2 Apr 2020 16:03:17 +0200
Subject: [PATCH] Bug 25044: Remove the need to define koha_object[s]_class for
 standard object class names

In Koha::Object[s]->prefetch_whitelist, there is a call to the koha_object[s]_class DBIC resultset class. We should not, otherwise those 2 methods will have to be defined all the time, even when we can guess it easily.

Koha::Item <> Schema::Result::Item => standard
Koha::Acquisition::Order <> Schema::Result::Aqorder => non-standard

sub _get_object_class {
    my ( $type ) = @_;
    return unless $type;

    if( $type->can('koha_object_class') ) {
        return $type->koha_object_class;
    }
    $type =~ s|Schema::Result::||;
    return ${type};
}

Test plan:
 % prove t/db_dependent/Koha/Object.t t/db_dependent/Koha/Objects.t
should return green before and after this patch

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
---
 Koha/Object.pm                |  2 +-
 t/db_dependent/Koha/Object.t  | 10 ++++++++--
 t/db_dependent/Koha/Objects.t | 10 ++++++++--
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/Koha/Object.pm b/Koha/Object.pm
index fde0fa9917..44ef617824 100644
--- a/Koha/Object.pm
+++ b/Koha/Object.pm
@@ -436,7 +436,7 @@ sub prefetch_whitelist {
             my $result_class = $relations->{$key}->{class};
             my $obj = $result_class->new;
             try {
-                $whitelist->{$key} = $obj->koha_object_class;
+                $whitelist->{$key} = Koha::Object::_get_object_class( $obj->result_class );
             } catch {
                 $whitelist->{$key} = undef;
             }
diff --git a/t/db_dependent/Koha/Object.t b/t/db_dependent/Koha/Object.t
index 2d4413486d..c23f023cd4 100755
--- a/t/db_dependent/Koha/Object.t
+++ b/t/db_dependent/Koha/Object.t
@@ -796,7 +796,7 @@ subtest 'get_from_storage' => sub {
 
 subtest 'prefetch_whitelist() tests' => sub {
 
-    plan tests => 2;
+    plan tests => 3;
 
     $schema->storage->txn_begin;
 
@@ -811,7 +811,13 @@ subtest 'prefetch_whitelist() tests' => sub {
     is(
         $prefetch_whitelist->{orders},
         'Koha::Acquisition::Order',
-        'Guessed the object class correctly'
+        'Guessed the non-standard object class correctly'
+    );
+
+    is(
+        $prefetch_whitelist->{items},
+        'Koha::Item',
+        'Guessed the standard object class correctly'
     );
 
     $schema->storage->txn_rollback;
diff --git a/t/db_dependent/Koha/Objects.t b/t/db_dependent/Koha/Objects.t
index 5bb663030f..c5ac1ba2b6 100644
--- a/t/db_dependent/Koha/Objects.t
+++ b/t/db_dependent/Koha/Objects.t
@@ -773,7 +773,7 @@ subtest "from_api_mapping() tests" => sub {
 
 subtest 'prefetch_whitelist() tests' => sub {
 
-    plan tests => 2;
+    plan tests => 3;
 
     $schema->storage->txn_begin;
 
@@ -788,7 +788,13 @@ subtest 'prefetch_whitelist() tests' => sub {
     is(
         $prefetch_whitelist->{orders},
         'Koha::Acquisition::Order',
-        'Guessed the object class correctly'
+        'Guessed the non-standard object class correctly'
+    );
+
+    is(
+        $prefetch_whitelist->{items},
+        'Koha::Item',
+        'Guessed the standard object class correctly'
     );
 
     $schema->storage->txn_rollback;
-- 
2.11.0