const { test } = require('node:test'); const assert = require('node:assert'); const { scrapeNowPlaying } = require('../now-playing'); const emptyDoc = { querySelector: () => null }; function nav(metadata, playbackState) { return { mediaSession: { metadata, playbackState } }; } test('reads track info from the Media Session when the player bar is absent', () => { const result = scrapeNowPlaying( emptyDoc, nav( { title: 'DOMINO', artist: 'Stray Kids', album: '', artwork: [ { src: 'small.jpg', sizes: '60x60' }, { src: 'big.jpg', sizes: '544x544' }, ], }, 'playing' ) ); assert.deepStrictEqual(result, { title: 'DOMINO', artist: 'Stray Kids', albumArt: 'big.jpg', isPlaying: true, }); }); test('reports isPlaying false when the Media Session is paused', () => { const result = scrapeNowPlaying(emptyDoc, nav({ title: 'T', artist: 'A', artwork: [] }, 'paused')); assert.strictEqual(result.isPlaying, false); assert.strictEqual(result.albumArt, null); }); test('returns null when nothing is loaded anywhere', () => { assert.strictEqual(scrapeNowPlaying(emptyDoc, nav(null, 'none')), null); assert.strictEqual(scrapeNowPlaying(emptyDoc, {}), null); }); test('falls back to the legacy player-bar DOM when Media Session has no metadata', () => { const els = { 'ytmusic-player-bar .title': { textContent: ' Old Song ' }, 'ytmusic-player-bar .byline': { textContent: 'Old Artist' }, 'ytmusic-player-bar img.image': { src: 'art.jpg' }, '#play-pause-button': { getAttribute: (n) => (n === 'title' ? 'Pause' : null) }, }; const doc = { querySelector: (s) => els[s] || null }; assert.deepStrictEqual(scrapeNowPlaying(doc, nav(null, 'none')), { title: 'Old Song', artist: 'Old Artist', albumArt: 'art.jpg', isPlaying: true, }); });