import { describe, it, expect } from 'vitest' import { mount } from '@vue/test-utils' import LiteMediaEmbed from './LiteMediaEmbed.vue' const YT_URL = 'https://www.youtube.com/watch?v=vz7F8bc1QQ0' const YT_ID = 'vz7F8bc1QQ0' const IG_URL = 'https://www.instagram.com/p/AbCdEfGhIjK/' describe('LiteMediaEmbed — YouTube facade', () => { it('renders the poster (thumbnail + play button) and NO iframe initially', () => { const wrapper = mount(LiteMediaEmbed, { props: { url: YT_URL, type: 'youtube', alt: 'Reindeer Dash 2025' }, }) // No heavy iframe until the user asks for it. expect(wrapper.find('iframe').exists()).toBe(false) // Poster = the documented YouTube thumbnail for the video id. const poster = wrapper.find('img.dcs-lite-embed__poster') expect(poster.exists()).toBe(true) expect(poster.attributes('src')).toBe( `https://img.youtube.com/vi/${YT_ID}/hqdefault.jpg`, ) expect(poster.attributes('loading')).toBe('lazy') // Accessible, keyboard-operable play affordance. const button = wrapper.find('button.dcs-lite-embed__button') expect(button.exists()).toBe(true) expect(button.attributes('type')).toBe('button') expect(button.attributes('aria-label')).toBe('Play video: Reindeer Dash 2025') }) it('injects the real nocookie autoplay iframe on click and drops the poster button', async () => { const wrapper = mount(LiteMediaEmbed, { props: { url: YT_URL, type: 'youtube', alt: 'Reindeer Dash 2025' }, }) await wrapper.find('button.dcs-lite-embed__button').trigger('click') const iframe = wrapper.find('iframe.dcs-lite-embed__frame') expect(iframe.exists()).toBe(true) expect(iframe.attributes('src')).toBe( `https://www.youtube-nocookie.com/embed/${YT_ID}?rel=0&autoplay=1&playsinline=1`, ) expect(iframe.attributes('allow')).toContain('autoplay') expect(iframe.attributes('title')).toBe('Reindeer Dash 2025') // The poster button is gone once the iframe is live. expect(wrapper.find('button.dcs-lite-embed__button').exists()).toBe(false) }) it('activates via keyboard (Enter on the play button)', async () => { const wrapper = mount(LiteMediaEmbed, { props: { url: YT_URL, type: 'youtube', alt: 'Reindeer Dash 2025' }, }) expect(wrapper.find('iframe').exists()).toBe(false) await wrapper.find('button.dcs-lite-embed__button').trigger('keydown.enter') expect(wrapper.find('iframe.dcs-lite-embed__frame').exists()).toBe(true) }) it('activates via keyboard (Space on the play button)', async () => { const wrapper = mount(LiteMediaEmbed, { props: { url: YT_URL, type: 'youtube' }, }) await wrapper.find('button.dcs-lite-embed__button').trigger('keydown.space') expect(wrapper.find('iframe.dcs-lite-embed__frame').exists()).toBe(true) }) it('accepts a bare 11-char video id', () => { const wrapper = mount(LiteMediaEmbed, { props: { url: YT_ID, type: 'youtube' }, }) expect(wrapper.find('img.dcs-lite-embed__poster').attributes('src')).toBe( `https://img.youtube.com/vi/${YT_ID}/hqdefault.jpg`, ) }) }) describe('LiteMediaEmbed — Instagram facade', () => { it('renders a branded glyph poster (no hotlinked thumbnail) and no iframe initially', () => { const wrapper = mount(LiteMediaEmbed, { props: { url: IG_URL, type: 'instagram', alt: 'Latest reel' }, }) expect(wrapper.find('iframe').exists()).toBe(false) // No image is hotlinked; a branded poster stands in. expect(wrapper.find('img.dcs-lite-embed__poster').exists()).toBe(false) expect(wrapper.find('.dcs-lite-embed__poster--brand').exists()).toBe(true) expect(wrapper.find('button.dcs-lite-embed__button').attributes('aria-label')).toBe( 'Load Instagram post: Latest reel', ) }) it('uses a caller-supplied poster override when present', () => { const wrapper = mount(LiteMediaEmbed, { props: { url: IG_URL, type: 'instagram', poster: 'https://files.duffcloudservices.com/kdh/assets/ig-cover.webp', }, }) const poster = wrapper.find('img.dcs-lite-embed__poster') expect(poster.exists()).toBe(true) expect(poster.attributes('src')).toBe( 'https://files.duffcloudservices.com/kdh/assets/ig-cover.webp', ) }) it('injects the /embed/ iframe on activation', async () => { const wrapper = mount(LiteMediaEmbed, { props: { url: IG_URL, type: 'instagram' }, }) await wrapper.find('button.dcs-lite-embed__button').trigger('click') const iframe = wrapper.find('iframe.dcs-lite-embed__frame') expect(iframe.exists()).toBe(true) expect(iframe.attributes('src')).toBe('https://www.instagram.com/p/AbCdEfGhIjK/embed/') }) }) describe('LiteMediaEmbed — hostile url never reaches the iframe src (no CSP backstop on customer sites)', () => { // A portal-editable / visual-editor-AI-controlled carousel `url` must never be // passed verbatim into