diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/UserMetadata.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/UserMetadata.kt index 639e3fb45..71362b9d7 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/UserMetadata.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/UserMetadata.kt @@ -28,6 +28,13 @@ import com.vitorpamplona.quartz.utils.startsWithAny import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +@Serializable +class Birthday { + var year: Int? = null + var month: Int? = null + var day: Int? = null +} + @Stable @Serializable class UserMetadata { @@ -41,6 +48,7 @@ class UserMetadata { var about: String? = null var bot: Boolean? = null var pronouns: String? = null + var birthday: Birthday? = null var nip05: String? = null var domain: String? = null var lud06: String? = null diff --git a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/UpdateMetadataTest.kt b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/UpdateMetadataTest.kt index d7db37766..18b408439 100644 --- a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/UpdateMetadataTest.kt +++ b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/UpdateMetadataTest.kt @@ -20,10 +20,13 @@ */ package com.vitorpamplona.quartz.nip01Core.metadata +import com.vitorpamplona.quartz.nip01Core.core.JsonMapper import com.vitorpamplona.quartz.utils.nsecToSigner import kotlin.test.Test import kotlin.test.assertContentEquals import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertNull class UpdateMetadataTest { val signer = "nsec10g0wheggqn9dawlc0yuv6adnat6n09anr7eyykevw2dm8xa5fffs0wsdsr".nsecToSigner() @@ -193,4 +196,43 @@ class UpdateMetadataTest { assertEquals(expected3, test3) } + + @Test + fun parseBirthdayFull() { + val json = """{"name":"Test","birthday":{"year":1990,"month":6,"day":15}}""" + val metadata = JsonMapper.fromJson(json) + assertNotNull(metadata.birthday) + assertEquals(1990, metadata.birthday!!.year) + assertEquals(6, metadata.birthday!!.month) + assertEquals(15, metadata.birthday!!.day) + } + + @Test + fun parseBirthdayPartial() { + val json = """{"name":"Test","birthday":{"month":6,"day":15}}""" + val metadata = JsonMapper.fromJson(json) + assertNotNull(metadata.birthday) + assertNull(metadata.birthday!!.year) + assertEquals(6, metadata.birthday!!.month) + assertEquals(15, metadata.birthday!!.day) + } + + @Test + fun parseBirthdayAbsent() { + val json = """{"name":"Test"}""" + val metadata = JsonMapper.fromJson(json) + assertNull(metadata.birthday) + } + + @Test + fun birthdayRoundTrip() { + val json = """{"name":"Test","birthday":{"year":1990,"month":6,"day":15}}""" + val metadata = JsonMapper.fromJson(json) + val serialized = JsonMapper.toJson(metadata) + val reparsed = JsonMapper.fromJson(serialized) + assertNotNull(reparsed.birthday) + assertEquals(1990, reparsed.birthday!!.year) + assertEquals(6, reparsed.birthday!!.month) + assertEquals(15, reparsed.birthday!!.day) + } }