Merge pull request #1979 from vitorpamplona/claude/nip24-compliance-check-WvjhO

Add birthday field support to UserMetadata
This commit is contained in:
Vitor Pamplona
2026-03-28 09:48:35 -04:00
committed by GitHub
2 changed files with 50 additions and 0 deletions
@@ -28,6 +28,13 @@ import com.vitorpamplona.quartz.utils.startsWithAny
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable
class Birthday {
var year: Int? = null
var month: Int? = null
var day: Int? = null
}
@Stable @Stable
@Serializable @Serializable
class UserMetadata { class UserMetadata {
@@ -41,6 +48,7 @@ class UserMetadata {
var about: String? = null var about: String? = null
var bot: Boolean? = null var bot: Boolean? = null
var pronouns: String? = null var pronouns: String? = null
var birthday: Birthday? = null
var nip05: String? = null var nip05: String? = null
var domain: String? = null var domain: String? = null
var lud06: String? = null var lud06: String? = null
@@ -20,10 +20,13 @@
*/ */
package com.vitorpamplona.quartz.nip01Core.metadata package com.vitorpamplona.quartz.nip01Core.metadata
import com.vitorpamplona.quartz.nip01Core.core.JsonMapper
import com.vitorpamplona.quartz.utils.nsecToSigner import com.vitorpamplona.quartz.utils.nsecToSigner
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertContentEquals import kotlin.test.assertContentEquals
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertNull
class UpdateMetadataTest { class UpdateMetadataTest {
val signer = "nsec10g0wheggqn9dawlc0yuv6adnat6n09anr7eyykevw2dm8xa5fffs0wsdsr".nsecToSigner() val signer = "nsec10g0wheggqn9dawlc0yuv6adnat6n09anr7eyykevw2dm8xa5fffs0wsdsr".nsecToSigner()
@@ -193,4 +196,43 @@ class UpdateMetadataTest {
assertEquals(expected3, test3) assertEquals(expected3, test3)
} }
@Test
fun parseBirthdayFull() {
val json = """{"name":"Test","birthday":{"year":1990,"month":6,"day":15}}"""
val metadata = JsonMapper.fromJson<UserMetadata>(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<UserMetadata>(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<UserMetadata>(json)
assertNull(metadata.birthday)
}
@Test
fun birthdayRoundTrip() {
val json = """{"name":"Test","birthday":{"year":1990,"month":6,"day":15}}"""
val metadata = JsonMapper.fromJson<UserMetadata>(json)
val serialized = JsonMapper.toJson(metadata)
val reparsed = JsonMapper.fromJson<UserMetadata>(serialized)
assertNotNull(reparsed.birthday)
assertEquals(1990, reparsed.birthday!!.year)
assertEquals(6, reparsed.birthday!!.month)
assertEquals(15, reparsed.birthday!!.day)
}
} }