From 07d24fc7a08276076495d90e1e0274a141acddbd Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Thu, 08 Oct 2026 16:00:15 +0000
Subject: [PATCH] GS-2555

---
 lib/libIlias.js             |    8 +++++---
 test/testImportIliasUser.js |   36 ++++++++++++++++++++++++++++--------
 2 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/lib/libIlias.js b/lib/libIlias.js
index 180fb45..37b4108 100644
--- a/lib/libIlias.js
+++ b/lib/libIlias.js
@@ -85,14 +85,16 @@
 
    const udfDef = await db.getUdf()
    const udfMap = _.keyBy(udfDef, "field_name")
-   // console.dir(udfMap, {depth: null, colors: true, maxArrayLength: null})
-   user.udf = _.mapKeys(user.udf, function (value, key) {
+
+   // do not mutate the caller's user object
+   const user2 = _.cloneDeep(user)
+   user2.udf = _.mapKeys(user.udf, function (value, key) {
       return udfMap[key].field_id
    })
 
    const res = await fetch(url2, {
       method: "POST",
-      body: JSON.stringify(user)
+      body: JSON.stringify(user2)
    })
    const text = await res.text()
    try {
diff --git a/test/testImportIliasUser.js b/test/testImportIliasUser.js
index 715dee4..c180700 100644
--- a/test/testImportIliasUser.js
+++ b/test/testImportIliasUser.js
@@ -1,6 +1,6 @@
 const expect = require("chai").expect
+const _ = require("lodash")
 
-const settings = require("../settings")
 const libIlias = require("../lib/libIlias")
 const db = require("../lib/db")
 const testData = require("./data")
@@ -10,14 +10,16 @@
 describe("the function importIliasUser", function () {
 
    let lastUserId = null
-   const user = testData.user
+   let user = null
 
    beforeEach(async function () {
-
+      // deep clone so importIliasUser can not mutate the shared fixture
+      user = _.cloneDeep(testData.user)
+      lastUserId = null
    })
 
    afterEach(async function () {
-      await deleteUser(lastUserId)
+      if (lastUserId) await deleteUser(lastUserId).catch(console.error)
    })
 
    it("should import a new user to ILIAS", async function () {
@@ -33,11 +35,29 @@
       console.log(user2)
       expect(user2).to.have.property("login").and.to.equal(user.login)
       expect(user2).to.have.property("usr_id").and.to.equal(res.usr_id)
+      expect(user2).to.have.property("firstname").and.to.equal(user.firstname)
+      expect(user2).to.have.property("lastname").and.to.equal(user.lastname)
+      expect(user2).to.have.property("email").and.to.equal(user.email)
+      expect(user2).to.have.property("institution").and.to.equal(user.institution)
+   })
 
-      // const res2 = await libIlias.deleteUser(usr_id)
-      // console.log(res2)
-      // expect(res2).to.have.property("status").and.to.equal("ok")
-      // expect(res2).to.have.property("command").and.to.equal("deleteUser")
+   it("should not mutate the given user object", async function () {
+      const before = _.cloneDeep(user)
+      const res = await libIlias.importIliasUser(user)
+      lastUserId = res.usr_id
+      expect(user).to.deep.equal(before)
+   })
+
+   it("should resolve user defined field names to ids", async function () {
+      const res = await libIlias.importIliasUser(user)
+      lastUserId = res.usr_id
+
+      const fields = await db.getUserDefinedField(lastUserId)
+      const byName = _.keyBy(fields, "field_name")
+      for (const [name, value] of Object.entries(user.udf)) {
+         expect(byName).to.have.property(name)
+         expect(byName[name].value).to.equal(value)
+      }
    })
 
 })

--
Gitblit v1.8.0