diff --git a/lib/api/model/initial_snapshot.dart b/lib/api/model/initial_snapshot.dart index eeedcde14d..41a7ac169f 100644 --- a/lib/api/model/initial_snapshot.dart +++ b/lib/api/model/initial_snapshot.dart @@ -295,6 +295,7 @@ class UserSettings { TwentyFourHourTimeMode twentyFourHourTime; bool displayEmojiReactionUsers; + @JsonKey(unknownEnumValue: Emojiset.unknown) Emojiset emojiset; bool presenceEnabled; diff --git a/lib/api/model/initial_snapshot.g.dart b/lib/api/model/initial_snapshot.g.dart index 1c5505a653..1150748a1f 100644 --- a/lib/api/model/initial_snapshot.g.dart +++ b/lib/api/model/initial_snapshot.g.dart @@ -257,7 +257,11 @@ UserSettings _$UserSettingsFromJson(Map json) => UserSettings( json['twenty_four_hour_time'] as bool?, ), displayEmojiReactionUsers: json['display_emoji_reaction_users'] as bool, - emojiset: $enumDecode(_$EmojisetEnumMap, json['emojiset']), + emojiset: $enumDecode( + _$EmojisetEnumMap, + json['emojiset'], + unknownValue: Emojiset.unknown, + ), presenceEnabled: json['presence_enabled'] as bool, ); @@ -283,6 +287,7 @@ const _$EmojisetEnumMap = { Emojiset.googleBlob: 'google-blob', Emojiset.twitter: 'twitter', Emojiset.text: 'text', + Emojiset.unknown: 'unknown', }; UserTopicItem _$UserTopicItemFromJson(Map json) => diff --git a/lib/api/model/model.dart b/lib/api/model/model.dart index da12823520..920798654f 100644 --- a/lib/api/model/model.dart +++ b/lib/api/model/model.dart @@ -390,7 +390,8 @@ enum Emojiset { google, googleBlob, twitter, - text; + text, + unknown; /// Get an [Emojiset] from a raw string. Throws if the string is unrecognized. /// diff --git a/lib/api/model/model.g.dart b/lib/api/model/model.g.dart index b835c493c5..4d079f88d2 100644 --- a/lib/api/model/model.g.dart +++ b/lib/api/model/model.g.dart @@ -533,6 +533,7 @@ const _$EmojisetEnumMap = { Emojiset.googleBlob: 'google-blob', Emojiset.twitter: 'twitter', Emojiset.text: 'text', + Emojiset.unknown: 'unknown', }; const _$PresenceStatusEnumMap = { diff --git a/test/api/model/initial_snapshot_test.dart b/test/api/model/initial_snapshot_test.dart index 3228602fff..cd7414cc57 100644 --- a/test/api/model/initial_snapshot_test.dart +++ b/test/api/model/initial_snapshot_test.dart @@ -62,4 +62,19 @@ void main() { 'unread_message_ids': [11, 2, 3], })).throws(); }); + + test('UserSettings.emojiset handles various unknown values', () { + final unknownValues = ['apple', 'microsoft', 'facebook', '']; + for (final unknownValue in unknownValues) { + final settings = UserSettings.fromJson({ + 'twenty_four_hour_time': true, + 'display_emoji_reaction_users': true, + 'emojiset': unknownValue, + 'presence_enabled': true, + }); + + // Verify unknown emojiset defaults to Emojiset.unknow + check(settings.emojiset).equals(Emojiset.unknown); + } + }); }