diff --git a/NodeSrv/apps/healthcheck-survey-bot/src/lib/employeeMasterCheck.js b/NodeSrv/apps/healthcheck-survey-bot/src/lib/employeeMasterCheck.js new file mode 100644 index 00000000..58e3a55b --- /dev/null +++ b/NodeSrv/apps/healthcheck-survey-bot/src/lib/employeeMasterCheck.js @@ -0,0 +1,18 @@ +// src/lib/employeeMasterCheck.js +function checkEmailConsistency(pleasanterEmail, masterRecord) { + const masterEmail = masterRecord.Class036 || masterRecord.ClassB || null; + if (!masterEmail) { + return { consistent: false, masterEmail: null }; + } + return { consistent: masterEmail === pleasanterEmail, masterEmail }; +} + +function resolveKanaFromMaster(masterRecord) { + return [masterRecord.Class003, masterRecord.Class004].filter(Boolean).join(" "); +} + +function needsKanaFill(currentKana) { + return currentKana === null || currentKana === undefined || currentKana === ""; +} + +module.exports = { checkEmailConsistency, resolveKanaFromMaster, needsKanaFill }; diff --git a/NodeSrv/apps/healthcheck-survey-bot/test/employeeMasterCheck.test.js b/NodeSrv/apps/healthcheck-survey-bot/test/employeeMasterCheck.test.js new file mode 100644 index 00000000..4f977025 --- /dev/null +++ b/NodeSrv/apps/healthcheck-survey-bot/test/employeeMasterCheck.test.js @@ -0,0 +1,56 @@ +// test/employeeMasterCheck.test.js +const { test } = require("node:test"); +const assert = require("node:assert"); +const { + checkEmailConsistency, + resolveKanaFromMaster, + needsKanaFill, +} = require("../src/lib/employeeMasterCheck"); + +test("checkEmailConsistency: PLメールアドレス(Class036)と一致すればconsistent:true", () => { + const result = checkEmailConsistency("taro.yamada@next-hd.co.jp", { + Class036: "taro.yamada@next-hd.co.jp", + ClassB: "taro.yamada@example.com", + }); + assert.deepStrictEqual(result, { consistent: true, masterEmail: "taro.yamada@next-hd.co.jp" }); +}); + +test("checkEmailConsistency: Class036が無ければClassBにフォールバックする", () => { + const result = checkEmailConsistency("taro.yamada@example.com", { + ClassB: "taro.yamada@example.com", + }); + assert.deepStrictEqual(result, { consistent: true, masterEmail: "taro.yamada@example.com" }); +}); + +test("checkEmailConsistency: 不一致ならconsistent:false", () => { + const result = checkEmailConsistency("taro.yamada@next-hd.co.jp", { + Class036: "different@next-hd.co.jp", + }); + assert.deepStrictEqual(result, { consistent: false, masterEmail: "different@next-hd.co.jp" }); +}); + +test("checkEmailConsistency: マスタ側にメールが無ければmasterEmail:null・consistent:false", () => { + const result = checkEmailConsistency("taro.yamada@next-hd.co.jp", {}); + assert.deepStrictEqual(result, { consistent: false, masterEmail: null }); +}); + +test("resolveKanaFromMaster: 姓カナ+名カナを空白区切りで結合する", () => { + assert.strictEqual( + resolveKanaFromMaster({ Class003: "ヤマダ", Class004: "タロウ" }), + "ヤマダ タロウ" + ); +}); + +test("resolveKanaFromMaster: 片方欠けていても結合できる", () => { + assert.strictEqual(resolveKanaFromMaster({ Class003: "ヤマダ" }), "ヤマダ"); +}); + +test("needsKanaFill: 空文字・未定義はtrue", () => { + assert.strictEqual(needsKanaFill(""), true); + assert.strictEqual(needsKanaFill(undefined), true); + assert.strictEqual(needsKanaFill(null), true); +}); + +test("needsKanaFill: 値が入っていればfalse", () => { + assert.strictEqual(needsKanaFill("ヤマダ タロウ"), false); +});