package com.doublesymmetry.trackplayer.models import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) class TrackPlayerCastMediaItemConverterTest { private val converter = TrackPlayerCastMediaItemConverter() @Test fun `cast round-trip preserves artist and app extras`() { val payload = android.os.Bundle().apply { putString("source", "recommendations") putDouble("weight", 0.85) } val original = TrackPlayerMediaItem( mediaId = "track-1", url = "https://example.com/song.mp3", title = "Song", artist = "Artist Name", albumTitle = "Album", artworkUrl = "https://example.com/art.jpg", duration = 180.0, extras = payload, ) val restored = TrackPlayerMediaItem.fromMediaItem( converter.toMediaItem(converter.toMediaQueueItem(original.asMediaItem())), ) assertEquals("track-1", restored.mediaId) assertEquals("Song", restored.title) assertEquals("Artist Name", restored.artist) assertEquals("Album", restored.albumTitle) assertEquals("https://example.com/art.jpg", restored.artworkUrl) assertEquals(180.0, restored.duration!!, 0.001) assertNotNull(restored.extras) assertEquals("recommendations", restored.extras!!.getString("source")) assertEquals(0.85, restored.extras!!.getDouble("weight"), 0.001) } @Test fun `cast round-trip stores rntp payload in customData`() { val original = TrackPlayerMediaItem( url = "https://example.com/song.mp3", artist = "Artist", extras = android.os.Bundle().apply { putString("flag", "on") }, ) val queueItem = converter.toMediaQueueItem(original.asMediaItem()) val customData = checkNotNull(queueItem.media?.customData) assertTrue(customData.has("rntp")) val rntp = customData.getJSONObject("rntp") assertEquals("Artist", rntp.getString("artist")) assertTrue(rntp.has("extras")) } @Test fun `cast round-trip omits rntp key when there is nothing to preserve`() { val original = TrackPlayerMediaItem( url = "https://example.com/song.mp3", title = "Title Only", ) val queueItem = converter.toMediaQueueItem(original.asMediaItem()) val customData = checkNotNull(queueItem.media?.customData) assertFalse(customData.has("rntp")) } }