const { test } = require("node:test"); const assert = require("node:assert"); const { FIELD_MAP, buildHashUpdate } = require("../src/config/masterFields"); test("buildHashUpdate groups every field label under its own hash type", () => { const result = buildHashUpdate(); assert.strictEqual(result.ClassHash.ClassA, "社員ID"); assert.strictEqual(result.ClassHash.Class011, "ユーザID"); assert.strictEqual(result.ClassHash.Class051, "私用メールアドレス"); assert.strictEqual(result.DateHash.DateA, "LW同期日時"); assert.strictEqual(result.DateHash.Date007, "生年月日"); assert.strictEqual(result.DateHash.Date060, "入社日"); assert.strictEqual(result.CheckHash.Check062, "LINEWORKS在籍フラグ"); assert.strictEqual(result.DescriptionHash.Description022, "説明"); assert.strictEqual(result.ClassHash.Class035, "所属グループ"); assert.strictEqual(result.DescriptionHash.Description061, "エイリアスメール(複数)"); assert.deepStrictEqual(result.NumHash, {}); }); test("buildHashUpdate excludes fields whose hash is \"none\" (standard fields like Body)", () => { const result = buildHashUpdate(); const allLabels = [ ...Object.values(result.ClassHash), ...Object.values(result.DateHash), ...Object.values(result.DescriptionHash), ...Object.values(result.CheckHash), ]; assert.ok(!allLabels.includes("備考")); }); test("FIELD_MAP has no duplicate field keys across all logical names", () => { const keys = Object.values(FIELD_MAP).map((f) => f.key); assert.strictEqual(new Set(keys).size, keys.length); }); test("buildHashUpdate excludes ClassZ/ClassY (hash: \"columns-only\") because sending them via top-level ClassHash 404s on this environment", () => { const result = buildHashUpdate(); assert.strictEqual(result.ClassHash.ClassZ, undefined); assert.strictEqual(result.ClassHash.ClassY, undefined); }); test("buildHashUpdate includes plMailAddress (Class036) in tab2 as a distinct label from LW email (ClassB)", () => { const result = buildHashUpdate(); assert.strictEqual(result.ClassHash.Class036, "PLメールアドレス"); assert.strictEqual(result.ClassHash.ClassB, "メールアドレス"); });