11import { describe , expect , it } from "vite-plus/test" ;
22
3- import { act , render , stubGlobal } from "../../../test/render" ;
3+ import { act , render , stubGlobal , type Screen } from "../../../test/render" ;
44import { MediaVideoPlayer } from "./MediaVideoPlayer" ;
55
66// The observer never reports the video as visible, so it keeps preload="none" and never
@@ -10,13 +10,13 @@ class HiddenIntersectionObserver {
1010 disconnect ( ) { }
1111}
1212
13- function videoSrc ( container : HTMLElement ) : string | undefined {
14- return container . querySelector ( "video" ) ?. getAttribute ( "src" ) ?? undefined ;
13+ function expectVideoSrc ( screen : Screen , src : string ) {
14+ return expect . element ( screen . getByLabelText ( "clip" ) ) . toHaveAttribute ( "src" , src ) ;
1515}
1616
17- async function loadMetadata ( container : HTMLElement ) {
17+ async function loadMetadata ( screen : Screen ) {
1818 await act ( ( ) => {
19- container . querySelector ( "video" ) ? .dispatchEvent ( new Event ( "loadedmetadata" ) ) ;
19+ screen . getByLabelText ( "clip" ) . element ( ) . dispatchEvent ( new Event ( "loadedmetadata" ) ) ;
2020 } ) ;
2121}
2222
@@ -26,33 +26,33 @@ describe("MediaVideoPlayer", () => {
2626 await using screen = await render (
2727 < MediaVideoPlayer src = "/asset/first/clip.mp4" label = "clip" revision = "file-1" /> ,
2828 ) ;
29- await loadMetadata ( screen . container ) ;
29+ await loadMetadata ( screen ) ;
3030
3131 await screen . rerender (
3232 < MediaVideoPlayer src = "/asset/renewed/clip.mp4" label = "clip" revision = "file-1" /> ,
3333 ) ;
34- expect ( videoSrc ( screen . container ) ) . toBe ( "/asset/first/clip.mp4" ) ;
34+ await expectVideoSrc ( screen , "/asset/first/clip.mp4" ) ;
3535
3636 await screen . rerender (
3737 < MediaVideoPlayer src = "/asset/changed/clip.mp4" label = "clip" revision = "file-2" /> ,
3838 ) ;
39- expect ( videoSrc ( screen . container ) ) . toBe ( "/asset/changed/clip.mp4" ) ;
39+ await expectVideoSrc ( screen , "/asset/changed/clip.mp4" ) ;
4040
4141 // A second re-sign while the changed file is still loading must not restart that load.
4242 await screen . rerender (
4343 < MediaVideoPlayer src = "/asset/changed-renewed/clip.mp4" label = "clip" revision = "file-2" /> ,
4444 ) ;
45- expect ( videoSrc ( screen . container ) ) . toBe ( "/asset/changed/clip.mp4" ) ;
45+ await expectVideoSrc ( screen , "/asset/changed/clip.mp4" ) ;
4646 } ) ;
4747
4848 it ( "keeps a loaded paused video while its URL is briefly unavailable" , async ( ) => {
4949 using _observer = stubGlobal ( "IntersectionObserver" , HiddenIntersectionObserver ) ;
5050 await using screen = await render (
5151 < MediaVideoPlayer src = "/asset/first/clip.mp4" label = "clip" revision = "file-1" /> ,
5252 ) ;
53- await loadMetadata ( screen . container ) ;
53+ await loadMetadata ( screen ) ;
5454
5555 await screen . rerender ( < MediaVideoPlayer src = { null } label = "clip" revision = "mutation-2" /> ) ;
56- expect ( videoSrc ( screen . container ) ) . toBe ( "/asset/first/clip.mp4" ) ;
56+ await expectVideoSrc ( screen , "/asset/first/clip.mp4" ) ;
5757 } ) ;
5858} ) ;
0 commit comments