/** * @vitest-environment node */ import { describe, expect, it } from 'vitest' import { isVersionedType, stripVersionSuffix, truncate } from './string.js' describe('truncate', () => { it('appends the suffix when the string exceeds the slice length', () => { expect(truncate('hello world', 8)).toBe('hello wo...') }) it('uses a custom suffix when provided', () => { expect(truncate('hello world', 8, ' …')).toBe('hello wo …') }) it('returns the original string when within the slice length', () => { expect(truncate('hi', 10)).toBe('hi') }) }) describe('stripVersionSuffix', () => { it('strips a trailing _vN suffix', () => { expect(stripVersionSuffix('notion_search_v2')).toBe('notion_search') expect(stripVersionSuffix('github_create_pr_v3')).toBe('github_create_pr') }) it('strips multi-digit versions', () => { expect(stripVersionSuffix('x_v10')).toBe('x') }) it('leaves plain values unchanged', () => { expect(stripVersionSuffix('plain')).toBe('plain') }) it('does not strip a non-version trailing token', () => { expect(stripVersionSuffix('a_version')).toBe('a_version') }) it('only strips the single trailing suffix', () => { expect(stripVersionSuffix('a_v2_v3')).toBe('a_v2') }) }) describe('isVersionedType', () => { it('returns true for trailing _vN suffixes', () => { expect(isVersionedType('notion_search_v2')).toBe(true) expect(isVersionedType('github_create_pr_v3')).toBe(true) expect(isVersionedType('x_v10')).toBe(true) expect(isVersionedType('a_v2_v3')).toBe(true) }) it('returns false when there is no trailing version suffix', () => { expect(isVersionedType('plain')).toBe(false) expect(isVersionedType('a_version')).toBe(false) expect(isVersionedType('x')).toBe(false) }) })