package com.complycube.reactnative.config.parser import com.complycube.reactnative.config.TestFixtures import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith import kotlin.test.assertNotNull class DesignTokensParserTest { private val parser = DesignTokensParser() @Test fun parsesRepresentativePayloadIncludingHyphenatedTypographyKeys() { val tokens = parser.parse(TestFixtures.designTokens()) assertEquals("2026-03-17T12:00:00Z", tokens.updatedAt) assertEquals(2, tokens.version) assertEquals("dark", tokens.theme) assertEquals("#1D4ED8", tokens.colors?.light?.primary?.bg?.default) assertEquals("#F8FAFC", tokens.colors?.dark?.surface?.on?.default) assertEquals(8, tokens.rounding?.md) assertEquals(8, tokens.padding?.md) assertEquals(16f, tokens.text?.bodyLg?.size) assertEquals(1.5f, tokens.text?.bodyLg?.lineHeight) assertEquals(600, tokens.text?.bodyLg?.weight) assertEquals("#80000000", tokens.components?.backgroundOverlay?.color) assertEquals(true, tokens.animations?.enabled) assertEquals(true, tokens.haptics?.enabled) assertEquals("Example footer", tokens.logo?.footerText) } @Test fun integerLikeRnNumbersAreNormalizedBeforeDecoding() { val tokens = parser.parse( TestFixtures.designTokens( version = 3.0, roundingMd = 10.0, weight = 650.0, lineHeight = 24.0 ) ) assertEquals(3, tokens.version) assertEquals(10, tokens.rounding?.md) assertEquals(650, tokens.text?.bodyLg?.weight) assertEquals(24f, tokens.text?.bodyLg?.lineHeight) } @Test fun malformedPayloadThrows() { val error = assertFailsWith { parser.parse( mapOf( "theme" to "dark", "animations" to "enabled" ) ) } assertNotNull(error.message) } }