54 lines
2.4 KiB
TypeScript
54 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
extractSheetExternalCellReferences,
|
|
extractSheetExternalFrontmatterReferences,
|
|
extractSheetExternalReferenceTargets,
|
|
hasSheetExternalFrontmatterReferences,
|
|
isExternalFormulaInput,
|
|
shiftExternalFormulaReferences,
|
|
} from './sheetExternalReferences'
|
|
|
|
describe('sheetExternalReferences', () => {
|
|
it('detects formula inputs with sheet wikilink cell references', () => {
|
|
expect(isExternalFormulaInput('=[[revenue]].B2')).toBe(true)
|
|
expect(isExternalFormulaInput('=[[device]].power.watts')).toBe(true)
|
|
expect(isExternalFormulaInput(' [[revenue]].B2')).toBe(false)
|
|
expect(isExternalFormulaInput('[[revenue]].B2')).toBe(false)
|
|
})
|
|
|
|
it('extracts canonical targets and A1 addresses', () => {
|
|
expect(extractSheetExternalCellReferences('=[[folder/revenue|Revenue]].$B$12+[[costs]].C3')).toEqual([
|
|
{ address: 'B12', target: 'folder/revenue' },
|
|
{ address: 'C3', target: 'costs' },
|
|
])
|
|
})
|
|
|
|
it('extracts canonical targets and frontmatter property paths', () => {
|
|
expect(extractSheetExternalFrontmatterReferences('=[[device.md]].power.watts+[[project-alpha|Project]].status')).toEqual([
|
|
{ path: ['power', 'watts'], propertyPath: 'power.watts', target: 'device.md' },
|
|
{ path: ['status'], propertyPath: 'status', target: 'project-alpha' },
|
|
])
|
|
})
|
|
|
|
it('keeps cell references out of frontmatter property extraction', () => {
|
|
expect(hasSheetExternalFrontmatterReferences({ value: '=[[revenue]].B2+[[revenue]].$B$2' })).toBe(false)
|
|
expect(extractSheetExternalReferenceTargets('=[[device]].power.watts+[[revenue]].B2')).toEqual([
|
|
'revenue',
|
|
'device',
|
|
])
|
|
})
|
|
|
|
it('shifts relative references while preserving absolute row and column markers', () => {
|
|
expect(shiftExternalFormulaReferences('=[[revenue]].B2+[[revenue]].$C$3+[[revenue]].D$4+[[revenue]].$E5', 2, 1))
|
|
.toBe('=[[revenue]].C4+[[revenue]].$C$3+[[revenue]].E$4+[[revenue]].$E7')
|
|
})
|
|
|
|
it('leaves frontmatter property references unchanged when shifting formulas', () => {
|
|
expect(shiftExternalFormulaReferences('=[[device]].power.watts+[[revenue]].B2', 2, 1))
|
|
.toBe('=[[device]].power.watts+[[revenue]].C4')
|
|
})
|
|
|
|
it('leaves references unchanged when a relative shift would leave the sheet bounds', () => {
|
|
expect(shiftExternalFormulaReferences('=[[revenue]].A1', -1, 0)).toBe('=[[revenue]].A1')
|
|
})
|
|
})
|