ken_nogi/NodeSrv/apps/app-portal/test/n8nTree.test.js
Kenichiro NOGI ecc4a1a6ca feat(app-portal): n8n画面のワークフロー名ソート・JST表示・日本語ステータス
タグ内ワークフローを名前昇順に、実行履歴の開始日時をJST変換、
success/error等のステータスバッジを日本語ラベルに変更。
2026-09-19 14:11:00 +09:00

70 lines
2.4 KiB
JavaScript

const { test } = require('node:test');
const assert = require('node:assert');
const { buildTagTree } = require('../src/n8nTree');
test('buildTagTree returns an empty array when there are no workflows', () => {
assert.deepStrictEqual(buildTagTree([]), []);
});
test('buildTagTree groups a workflow under its tag name', () => {
const workflows = [{ id: 'w1', name: 'ワークフローA', active: true, tags: [{ name: 'タグA' }] }];
const tree = buildTagTree(workflows);
assert.deepStrictEqual(tree, [
{
type: 'folder',
id: 'タグA',
name: 'タグA',
children: [{ type: 'workflow', id: 'w1', name: 'ワークフローA', active: true }],
},
]);
});
test('buildTagTree puts untagged workflows into a "未分類" group', () => {
const workflows = [{ id: 'w1', name: 'ワークフローA', active: true, tags: [] }];
const tree = buildTagTree(workflows);
assert.deepStrictEqual(tree, [
{
type: 'folder',
id: '__untagged__',
name: '未分類',
children: [{ type: 'workflow', id: 'w1', name: 'ワークフローA', active: true }],
},
]);
});
test('buildTagTree puts a multi-tagged workflow into every one of its tag groups', () => {
const workflows = [{ id: 'w1', name: 'ワークフローA', active: true, tags: [{ name: 'タグA' }, { name: 'タグB' }] }];
const tree = buildTagTree(workflows);
assert.deepStrictEqual(
tree.map((g) => g.name),
['タグA', 'タグB']
);
assert.strictEqual(tree[0].children.length, 1);
assert.strictEqual(tree[1].children.length, 1);
});
test('buildTagTree sorts workflows within a group alphabetically by name', () => {
const workflows = [
{ id: 'w2', name: 'Zワークフロー', active: true, tags: [{ name: 'タグA' }] },
{ id: 'w1', name: 'Aワークフロー', active: true, tags: [{ name: 'タグA' }] },
];
const tree = buildTagTree(workflows);
assert.deepStrictEqual(
tree[0].children.map((w) => w.name),
['Aワークフロー', 'Zワークフロー']
);
});
test('buildTagTree sorts tag groups alphabetically and puts "未分類" last', () => {
const workflows = [
{ id: 'w1', name: 'A', active: true, tags: [{ name: 'Zタグ' }] },
{ id: 'w2', name: 'B', active: true, tags: [] },
{ id: 'w3', name: 'C', active: true, tags: [{ name: 'Aタグ' }] },
];
const tree = buildTagTree(workflows);
assert.deepStrictEqual(
tree.map((g) => g.name),
['Aタグ', 'Zタグ', '未分類']
);
});