/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import assert from 'node:assert/strict' import { describe, test } from 'node:test' import type { FlowUserFilterOption } from '../types' import { compactFlowSelectionLabel, flowDisplayState, requireSuccessfulFlowRows, visibleFlowUsers, } from './flow-selection' const users: FlowUserFilterOption[] = [ { value: 'user:1', label: 'dry', valueLabel: '100', valueRaw: 100, color: '#1664ff', }, { value: 'user:2', label: 'jrc', valueLabel: '70', valueRaw: 70, color: '#1ac6ff', }, ] describe('dashboard flow selection helpers', () => { test('limits user chips to currently visible users', () => { assert.deepEqual( visibleFlowUsers(users, []).map((user) => user.value), ['user:1', 'user:2'] ) assert.deepEqual( visibleFlowUsers(users, ['user:2']).map((user) => user.value), ['user:2'] ) }) test('filters visible users without mutating the source options', () => { const visible = visibleFlowUsers(users, ['user:1']) assert.deepEqual( visible.map((user) => user.value), ['user:1'] ) assert.deepEqual( users.map((user) => user.value), ['user:1', 'user:2'] ) }) test('formats compact selected counts for flow multiselect summaries', () => { assert.equal(compactFlowSelectionLabel(0), '*') assert.equal(compactFlowSelectionLabel(1), '1') assert.equal(compactFlowSelectionLabel(23), '23') }) test('prioritizes loading and error states before empty flow data', () => { assert.equal( flowDisplayState({ isLoading: true, isError: true, linkCount: 0, themeReady: true, }), 'loading' ) assert.equal( flowDisplayState({ isLoading: false, isError: true, linkCount: 0, themeReady: true, }), 'error' ) assert.equal( flowDisplayState({ isLoading: false, isError: false, linkCount: 0, themeReady: true, }), 'empty' ) assert.equal( flowDisplayState({ isLoading: false, isError: false, linkCount: 1, themeReady: false, }), 'loading' ) }) test('throws unsuccessful flow responses instead of treating them as empty data', () => { assert.throws( () => requireSuccessfulFlowRows( { success: false, data: [], message: 'database unavailable' }, 'Failed to load' ), /database unavailable/ ) assert.deepEqual( requireSuccessfulFlowRows( { success: true, data: [{ user_id: 1, quota: 10 }] }, 'Failed to load' ), [{ user_id: 1, quota: 10 }] ) }) })