Automerge backed Markdown editor for the Atmosphere
Something went wrong. Try again.
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126import { describe, it, expect } from 'vitest'import { parseFrontMatterStringArray } from '../obsidian-stubs'
describe('parseFrontMatterStringArray', () => { describe('with string key', () => { it('returns array for array values', () => { const fm = { tags: ['a', 'b', 'c'] } expect(parseFrontMatterStringArray(fm, 'tags')).toEqual(['a', 'b', 'c']) })
it('converts non-string array elements to strings', () => { const fm = { items: [1, 2, true, 'hello'] } expect(parseFrontMatterStringArray(fm, 'items')).toEqual(['1', '2', 'true', 'hello']) })
it('returns array from comma-separated string', () => { const fm = { tags: 'a, b, c' } expect(parseFrontMatterStringArray(fm, 'tags')).toEqual(['a', 'b', 'c']) })
it('trims whitespace from comma-separated string values', () => { const fm = { tags: ' a , b , c ' } expect(parseFrontMatterStringArray(fm, 'tags')).toEqual(['a', 'b', 'c']) })
it('returns null when key not found', () => { const fm = { title: 'Hello' } expect(parseFrontMatterStringArray(fm, 'tags')).toBeNull() })
it('returns null for non-array, non-string values', () => { const fm = { count: 42 } expect(parseFrontMatterStringArray(fm, 'count')).toBeNull() })
it('returns null for object values', () => { const fm = { config: { a: 1 } } expect(parseFrontMatterStringArray(fm, 'config')).toBeNull() })
it('returns null for boolean values', () => { const fm = { enabled: true } expect(parseFrontMatterStringArray(fm, 'enabled')).toBeNull() })
it('returns null for null values', () => { const fm = { tags: null } expect(parseFrontMatterStringArray(fm, 'tags')).toBeNull() })
it('returns null for undefined values', () => { const fm = { tags: undefined } expect(parseFrontMatterStringArray(fm, 'tags')).toBeNull() })
it('is case-sensitive for string keys', () => { const fm = { Tags: ['a', 'b'] } expect(parseFrontMatterStringArray(fm, 'Tags')).toEqual(['a', 'b']) expect(parseFrontMatterStringArray(fm, 'tags')).toBeNull() }) })
describe('with RegExp key', () => { it('returns array from first matching key', () => { const fm = { author_list: ['Alice', 'Bob'], author_name: 'Charlie' } expect(parseFrontMatterStringArray(fm, /^author/)).toEqual(['Alice', 'Bob']) })
it('returns null when no match', () => { const fm = { title: 'Hello' } expect(parseFrontMatterStringArray(fm, /^author/)).toBeNull() })
it('matches case-sensitively by default', () => { const fm = { Tags: ['a', 'b'] } expect(parseFrontMatterStringArray(fm, /^tags$/)).toBeNull() expect(parseFrontMatterStringArray(fm, /^Tags$/)).toEqual(['a', 'b']) })
it('can match case-insensitively with i flag', () => { const fm = { Tags: ['a', 'b'] } expect(parseFrontMatterStringArray(fm, /^tags$/i)).toEqual(['a', 'b']) }) })
describe('invalid frontmatter input', () => { it('returns null for null frontmatter', () => { expect(parseFrontMatterStringArray(null, 'key')).toBeNull() })
it('returns null for undefined frontmatter', () => { expect(parseFrontMatterStringArray(undefined, 'key')).toBeNull() })
it('returns null for non-object frontmatter', () => { expect(parseFrontMatterStringArray('string', 'key')).toBeNull() expect(parseFrontMatterStringArray(42, 'key')).toBeNull() })
it('returns null for array frontmatter', () => { expect(parseFrontMatterStringArray(['a', 'b'], 'key')).toBeNull() })
it('returns null for empty object', () => { expect(parseFrontMatterStringArray({}, 'key')).toBeNull() }) })
describe('edge cases', () => { it('returns empty array for empty array value', () => { const fm = { tags: [] } expect(parseFrontMatterStringArray(fm, 'tags')).toEqual([]) })
it('returns single-element array from string without comma', () => { const fm = { tags: 'single' } expect(parseFrontMatterStringArray(fm, 'tags')).toEqual(['single']) })
it('handles empty string value', () => { const fm = { tags: '' } expect(parseFrontMatterStringArray(fm, 'tags')).toEqual(['']) }) })})