@@ -526,6 +526,64 @@ func updateUserTestHandler(w http.ResponseWriter, r *http.Request) {
526526 w .Write (body )
527527}
528528
529+ func TestUpdateUser_MetadataJSONSerialization_StringValues (t * testing.T ) {
530+ lang := "en"
531+ opts := UpdateUserOpts {
532+ Metadata : map [string ]* string {
533+ "language" : & lang ,
534+ },
535+ }
536+
537+ b , err := json .Marshal (opts )
538+ require .NoError (t , err )
539+
540+ var got map [string ]interface {}
541+ require .NoError (t , json .Unmarshal (b , & got ))
542+
543+ meta , ok := got ["metadata" ].(map [string ]interface {})
544+ require .True (t , ok )
545+ require .Equal (t , "en" , meta ["language" ])
546+ }
547+
548+ func TestUpdateUser_MetadataJSONSerialization_NilValueAsNull (t * testing.T ) {
549+ opts := UpdateUserOpts {
550+ Metadata : map [string ]* string {
551+ "legacy_code" : nil ,
552+ },
553+ }
554+
555+ b , err := json .Marshal (opts )
556+ require .NoError (t , err )
557+
558+ // Check raw contains null for the key
559+ require .Contains (t , string (b ), "\" legacy_code\" :null" )
560+
561+ var got map [string ]interface {}
562+ require .NoError (t , json .Unmarshal (b , & got ))
563+
564+ meta , ok := got ["metadata" ].(map [string ]interface {})
565+ require .True (t , ok )
566+ // JSON null becomes a nil interface value when decoding into map[string]any
567+ _ , present := meta ["legacy_code" ]
568+ require .True (t , present )
569+ require .Nil (t , meta ["legacy_code" ])
570+ }
571+
572+ func TestUpdateUser_MetadataJSONSerialization_EmptyMapOmitted (t * testing.T ) {
573+ opts := UpdateUserOpts {
574+ Metadata : map [string ]* string {},
575+ }
576+
577+ b , err := json .Marshal (opts )
578+ require .NoError (t , err )
579+
580+ var got map [string ]interface {}
581+ require .NoError (t , json .Unmarshal (b , & got ))
582+
583+ _ , present := got ["metadata" ]
584+ require .False (t , present )
585+ }
586+
529587func TestDeleteUser (t * testing.T ) {
530588 tests := []struct {
531589 scenario string
0 commit comments