import { describe, expect, it } from 'vitest'
import { defaultUserPreferences, userTypeValidator } from './TLUserPreferences'

describe('TLUserPreferences consistency', () => {
	// When adding a new user preference, add it to this list AND update:
	// 1. TLUserPreferences interface
	// 2. userTypeValidator
	// 3. defaultUserPreferences
	// 4. Versions enum and migrateSnapshot()
	const interfaceKeys = [
		'name',
		'color',
		'locale',
		'animationSpeed',
		'areKeyboardShortcutsEnabled',
		'edgeScrollSpeed',
		'colorScheme',
		'isSnapMode',
		'isWrapMode',
		'isDynamicSizeMode',
		'isPasteAtCursorMode',
		'enhancedA11yMode',
		'inputMode',
		'isZoomDirectionInverted',
	] as const

	it('defaultUserPreferences contains all TLUserPreferences keys (except id)', () => {
		const defaultKeys = Object.keys(defaultUserPreferences).sort()
		const expected = [...interfaceKeys].sort()

		expect(defaultKeys).toEqual(expected)
	})

	it('userTypeValidator validates all TLUserPreferences keys', () => {
		// Access the internal config property to check which keys the validator covers
		const validatorKeys = Object.keys((userTypeValidator as any).config).sort()
		const expected = ['id', ...interfaceKeys].sort()

		expect(validatorKeys).toEqual(expected)
	})
})
