import { describe, expect, it } from 'vitest' import { experimentIdFromRoute, formatExperimentStatus, getExperimentStatusVariant, resolveExperimentCode, } from '../../composables/experiment-utils' describe('experiment-utils', () => { it('formats canonical and custom experiment statuses', () => { expect(formatExperimentStatus('planned')).toBe('Planned') expect(formatExperimentStatus('ongoing')).toBe('Ongoing') expect(formatExperimentStatus('ready_to_extract')).toBe('Ready to extract') expect(formatExperimentStatus('qc-hold')).toBe('Qc hold') expect(formatExperimentStatus(null)).toBe('') }) it('maps known status variants and falls back for custom statuses', () => { expect(getExperimentStatusVariant('ongoing')).toBe('primary') expect(getExperimentStatusVariant('completed')).toBe('success') expect(getExperimentStatusVariant('ready_to_extract')).toBe('default') expect(getExperimentStatusVariant(undefined)).toBe('default') }) it('resolves only formal experiment codes', () => { expect(resolveExperimentCode({ id: 42, experiment_code: 'DR-042' })).toBe('DR-042') expect(resolveExperimentCode({ id: 42 })).toBeUndefined() expect(resolveExperimentCode({ id: null })).toBeUndefined() }) }) describe('experimentIdFromRoute', () => { it('should read the id from the snake_case query key', () => { expect(experimentIdFromRoute({ experiment_id: '42' })).toBe(42) }) it('should read the id from the camelCase query key', () => { expect(experimentIdFromRoute({ experimentId: '42' })).toBe(42) }) // vue-router types repeated query params as (string | null)[], so a helper // declared over string[] rejects the very type every caller passes it. it('should read the id from a repeated query param containing nulls', () => { expect(experimentIdFromRoute({ experiment_id: [null, '42'] })).toBe(42) }) it('should return null when the query carries no experiment id', () => { expect(experimentIdFromRoute({ other: 'value' })).toBeNull() }) it('should return null for a non-numeric id', () => { expect(experimentIdFromRoute({ experiment_id: 'abc' })).toBeNull() }) it('should return null for a non-positive id', () => { expect(experimentIdFromRoute({ experiment_id: '0' })).toBeNull() }) it('should return null for a fractional id', () => { expect(experimentIdFromRoute({ experiment_id: '4.2' })).toBeNull() }) })