From 0a74e2e211bbac398b4e368e702480c79afebea4 Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Date: Wed, 12 Mar 2025 13:17:35 +0100
Subject: [PATCH] Bug 39315: MockData - generate full objects for libraries and
 item types

Signed-off-by: David Nind <david@davidnind.com>
---
 t/cypress/integration/t/mockData.ts | 22 +++++++++++++++
 t/cypress/plugins/mockData.js       | 44 +++++++++++++++++++++++++----
 2 files changed, 60 insertions(+), 6 deletions(-)

diff --git a/t/cypress/integration/t/mockData.ts b/t/cypress/integration/t/mockData.ts
index 60c1c2118d..8c63fb75f7 100644
--- a/t/cypress/integration/t/mockData.ts
+++ b/t/cypress/integration/t/mockData.ts
@@ -53,3 +53,25 @@ describe("Generate Random Libraries", () => {
         );
     });
 });
+
+describe("Generate objects", () => {
+    it("should generate an object for library", () => {
+        cy.task("buildSampleObject", { object: "item" }).then(mockItem => {
+            expect(mockItem.home_library).to.have.property("library_id");
+            expect(mockItem.home_library).to.have.property("name");
+            expect(mockItem.home_library_id).to.equal(
+                mockItem.home_library.library_id
+            );
+            expect(mockItem.holding_library).to.have.property("library_id");
+            expect(mockItem.holding_library).to.have.property("name");
+            expect(mockItem.holding_library_id).to.equal(
+                mockItem.holding_library.library_id
+            );
+            expect(mockItem.item_type).to.have.property("item_type_id");
+            expect(mockItem.item_type).to.have.property("description");
+            expect(mockItem.item_type_id).to.equal(
+                mockItem.item_type.item_type_id
+            );
+        });
+    });
+});
diff --git a/t/cypress/plugins/mockData.js b/t/cypress/plugins/mockData.js
index 48219e6257..0f9c292df8 100644
--- a/t/cypress/plugins/mockData.js
+++ b/t/cypress/plugins/mockData.js
@@ -3,9 +3,6 @@ const { readYamlFile } = require("./../plugins/readYamlFile.js");
 const fs = require("fs");
 
 const generateMockData = (type, properties) => {
-    if (Array.isArray(type)) {
-        type = type.filter(t => t != '"null"')[0];
-    }
     switch (type) {
         case "string":
             if (properties?.maxLength) {
@@ -36,17 +33,52 @@ const generateMockData = (type, properties) => {
 
 const generateDataFromSchema = (properties, values = {}) => {
     const mockData = {};
+    const ids = {};
     Object.entries(properties).forEach(([key, value]) => {
         if (values.hasOwnProperty(key)) {
             mockData[key] = values[key];
         } else {
-            let type =
+            let data;
+            let type = value.type;
+            if (Array.isArray(type)) {
+                type = type.filter(t => t != '"null"')[0];
+            }
+
+            type =
                 value?.format == "date" || value?.format == "date-time"
                     ? value.format
-                    : value.type;
-            mockData[key] = generateMockData(type, value);
+                    : type;
+            let fk_name;
+            if (type == "object") {
+                switch (key) {
+                    case "home_library":
+                    case "holding_library":
+                        data = buildSampleObject({ object: "library" });
+                        fk_name = "library_id";
+                        break;
+                    case "item_type":
+                        data = buildSampleObject({ object: "item_type" });
+                        fk_name = "item_type_id";
+                        break;
+                    default:
+                        data = generateMockData(type, value);
+                }
+                if (typeof data === "object") {
+                    ids[key] = data[fk_name];
+                }
+            } else {
+                data = generateMockData(type, value);
+            }
+            mockData[key] = data;
         }
     });
+
+    Object.keys(ids).forEach(k => {
+        if (mockData.hasOwnProperty(k + "_id")) {
+            mockData[k + "_id"] = ids[k];
+        }
+    });
+
     return mockData;
 };
 
-- 
2.39.5