From c03a2376ca508fc857b6a1b32ece635672a0462d Mon Sep 17 00:00:00 2001 From: Kenichiro NOGI Date: Sat, 5 Sep 2026 18:50:21 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A4=BE=E5=93=A1=E3=83=9E=E3=82=B9?= =?UTF-8?q?=E3=82=BF(504412)=E7=85=A7=E5=90=88=E3=83=AD=E3=82=B8=E3=83=83?= =?UTF-8?q?=E3=82=AF(=E3=83=A1=E3=83=BC=E3=83=AB=E6=95=B4=E5=90=88?= =?UTF-8?q?=E6=80=A7=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E3=83=BB=E3=83=95?= =?UTF-8?q?=E3=83=AA=E3=82=AC=E3=83=8A=E8=A3=9C=E5=AE=8C)=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/lib/employeeMasterCheck.js | 18 ++++++ .../test/employeeMasterCheck.test.js | 56 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 NodeSrv/apps/healthcheck-survey-bot/src/lib/employeeMasterCheck.js create mode 100644 NodeSrv/apps/healthcheck-survey-bot/test/employeeMasterCheck.test.js 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); +});