Skip to content

Commit f27b880

Browse files
committed
Add test for MEDIA_STATUS with German umlaut title
Added a new test method `TestMediaStatusWithGermanUmlautTitle` to validate the parsing of a `MEDIA_STATUS` message containing German umlaut characters. This includes new using directives for necessary namespaces and assertions to ensure correct deserialization and property verification of the media object and its title.
1 parent a6999db commit f27b880

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

Sharpcaster.Test/JsonTester.cs

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
using Sharpcaster.Extensions;
33
using Sharpcaster.Interfaces;
44
using Sharpcaster.Messages.Connection;
5+
using Sharpcaster.Messages.Media;
6+
using Sharpcaster.Models.Media;
7+
using System.Linq;
58
using System.Text.Json;
69
using Xunit;
710
using Sharpcaster.Test.helper;
@@ -19,5 +22,88 @@ public void TestConnectMessage()
1922
var output = JsonSerializer.Serialize(connectMessage, SharpcasteSerializationContext.Default.ConnectMessage);
2023
Assert.Equal("{\"requestId\":" + requestId + ",\"type\":\"CONNECT\"}", output);
2124
}
25+
26+
[Fact]
27+
public void TestMediaStatusWithGermanUmlautTitle()
28+
{
29+
// Test parsing a MEDIA_STATUS message with German umlaut characters in the title
30+
var mediaStatusJson = """
31+
{
32+
"type": "MEDIA_STATUS",
33+
"status": [{
34+
"mediaSessionId": 1,
35+
"playbackRate": 1,
36+
"playerState": "PLAYING",
37+
"currentTime": 80288.353693,
38+
"supportedMediaCommands": 274447,
39+
"volume": {"level": 1, "muted": false},
40+
"activeTrackIds": [],
41+
"media": {
42+
"contentId": "https://orf-live.ors-shoutcast.at/oe1-q1a",
43+
"streamType": 1,
44+
"contentType": "audio/mp4",
45+
"metadata": {
46+
"metadataType": 0,
47+
"title": "Ö1-(128bps)"
48+
},
49+
"duration": null,
50+
"mediaCategory": "AUDIO",
51+
"tracks": [],
52+
"breakClips": [],
53+
"breaks": []
54+
},
55+
"currentItemId": 1,
56+
"items": [{
57+
"itemId": 1,
58+
"media": {
59+
"contentId": "https://orf-live.ors-shoutcast.at/oe1-q1a",
60+
"streamType": 1,
61+
"contentType": "audio/mp4",
62+
"metadata": {
63+
"metadataType": 0,
64+
"title": "Ö1-(128bps)"
65+
},
66+
"duration": null,
67+
"mediaCategory": "AUDIO"
68+
},
69+
"autoplay": true,
70+
"orderId": 0
71+
}],
72+
"repeatMode": "REPEAT_OFF"
73+
}],
74+
"requestId": 1345463442
75+
}
76+
""";
77+
78+
// Parse the JSON message
79+
MediaStatusMessage mediaStatusMessage = JsonSerializer.Deserialize(mediaStatusJson, SharpcasteSerializationContext.Default.MediaStatusMessage);
80+
81+
// Verify the message was parsed correctly
82+
Assert.NotNull(mediaStatusMessage);
83+
Assert.NotNull(mediaStatusMessage.Status);
84+
Assert.Single(mediaStatusMessage.Status);
85+
86+
var status = mediaStatusMessage.Status.First();
87+
Assert.Equal(1, status.MediaSessionId);
88+
Assert.Equal(PlayerStateType.Playing, status.PlayerState);
89+
90+
// Verify the German umlaut title is preserved correctly
91+
Assert.NotNull(status.Media);
92+
Assert.NotNull(status.Media.Metadata);
93+
Assert.Equal("Ö1-(128bps)", status.Media.Metadata.Title);
94+
95+
// Verify queue item also has correct title
96+
Assert.NotNull(status.Items);
97+
Assert.Single(status.Items);
98+
Assert.NotNull(status.Items[0].Media);
99+
Assert.NotNull(status.Items[0].Media.Metadata);
100+
Assert.Equal("Ö1-(128bps)", status.Items[0].Media.Metadata.Title);
101+
102+
// Verify live stream properties
103+
Assert.Equal("https://orf-live.ors-shoutcast.at/oe1-q1a", status.Media.ContentId);
104+
Assert.Equal(StreamType.Live, status.Media.StreamType);
105+
Assert.Equal("audio/mp4", status.Media.ContentType);
106+
Assert.Null(status.Media.Duration);
107+
}
22108
}
23109
}

0 commit comments

Comments
 (0)