2021-05-06 12:47:02 +02:00
import { vCarousel } from "../src/vCarousel" ;
2021-05-06 17:04:54 +02:00
const errors = require ( "../src/errors.js" ) ;
2021-05-06 12:47:02 +02:00
describe ( "vCarousel" , function ( )
{
let vCarouselTest : vCarousel ;
const videosWebDir = "https://forge.chapril.org/Fab_Blab/vCarousel/src/branch/master/public/videos" ;
2021-05-06 17:49:07 +02:00
const fixture = "<div id='fixture'><figure id='noVideo'></figure><figure id='video1'><video controls='controls' preload='metadata'><source src='" + videosWebDir + "/Lizio-Poete-Ferrailleur-clownfunanbule.m4v' type='video/mp4'></source></video></figure><figure id='video2'><video controls='controls' preload='metadata'><source src='" + videosWebDir + "/Lizio-Poete-Ferrailleur-forgeron.m4v' type='video/mp4'></source></video></figure><figure id='video3'><video controls='controls' preload='metadata'><source src='" + videosWebDir + "/Lizio-Poete-Ferrailleur-drole-de-circuit.m4v' type='video/mp4'></source></video></div>" ;
2021-05-06 12:47:02 +02:00
beforeEach ( function ( )
{
vCarouselTest = new vCarousel ( ) ;
document . body . insertAdjacentHTML ( 'afterbegin' , fixture ) ;
} ) ;
afterEach ( function ( )
{
document . body . removeChild ( document . getElementById ( 'fixture' ) ) ;
} ) ;
2021-05-06 17:49:07 +02:00
it ( "Should be an instance of vCarousel" , function ( )
2021-05-06 12:47:02 +02:00
{
expect ( vCarouselTest ) . toBeInstanceOf ( vCarousel ) ;
} ) ;
2021-05-06 17:49:07 +02:00
describe ( "Setting vCarousel" , function ( )
2021-05-06 12:47:02 +02:00
{
it ( "Doit générer une erreur si tous les ids passés ne correspondent pas à des éléments HTML existants." , function ( )
{
2021-05-06 17:49:07 +02:00
expect ( function ( ) { return vCarouselTest . vContainers = [ "dontExistId" , "video1" , "video2" ] ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1" , "dontExistId" , "video2" ] ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1" , "video2" , "dontExistId" ] ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
2021-05-06 12:47:02 +02:00
} ) ;
2021-08-04 18:00:32 +02:00
it ( "Doit générer une erreur si tous les ids passés ne correspondent pas à des éléments HTML contenant une balise <video>." , function ( )
2021-05-06 17:49:07 +02:00
{
expect ( function ( ) { return vCarouselTest . vContainers = [ "noVideo" , "video1" , "video2" ] ; } ) . toThrowError ( errors . videoNotFound + "noVideo" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1" , "noVideo" , "video2" ] ; } ) . toThrowError ( errors . videoNotFound + "noVideo" ) ;
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1" , "video2" , "noVideo" ] ; } ) . toThrowError ( errors . videoNotFound + "noVideo" ) ;
2021-05-06 12:47:02 +02:00
} ) ;
2021-08-04 18:00:32 +02:00
it ( "Doit générer une erreur s'il n'y a pas au moins 2 ids valides passés pour les éléments HTML contenant les balises <video>." , function ( )
2021-05-06 12:47:02 +02:00
{
2021-05-06 17:49:07 +02:00
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1" ] ; } ) . toThrowError ( errors . need2Videos ) ;
2021-05-06 12:47:02 +02:00
} ) ;
2021-08-04 18:00:32 +02:00
it ( "Ne doit pas générer d'erreur s'il y a au moins 2 ids passés correspondant à des éléments HTML valides et contenant chacun une balise video." , function ( )
2021-05-06 12:47:02 +02:00
{
2021-05-06 17:49:07 +02:00
expect ( function ( ) { return vCarouselTest . vContainers = [ "video1" , "video2" ] ; } ) . not . toThrowError ( ) ;
2021-05-06 12:47:02 +02:00
} ) ;
2021-06-01 15:58:46 +02:00
it ( "Ne doit pas prendre en compte l'id fourni pour la première vidéo à afficher, s'il ne correspond pas à une des vidéos fournies." , function ( )
2021-05-06 12:47:02 +02:00
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" ] ;
vCarouselTest . firstVideoId = "video3" ;
2021-05-06 12:47:02 +02:00
expect ( vCarouselTest . firstVideoId ) . toBeUndefined ( ) ;
} ) ;
2021-05-06 17:49:07 +02:00
it ( "Doit accepter un firstVideoId vide permettant de cacher toutes les vidéos au lancement." , function ( )
2021-05-06 12:47:02 +02:00
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" ] ;
2021-05-06 12:47:02 +02:00
vCarouselTest . firstVideoId = "" ;
expect ( vCarouselTest . firstVideoId ) . toBe ( "" ) ;
} ) ;
} ) ;
describe ( "running vCarousel" , function ( )
2021-05-06 17:49:07 +02:00
{
2021-05-06 12:47:02 +02:00
it ( "Doit générer une erreur si on lance le carrousel sans avoir fourni les éléments HTML contenant les vidéos." , function ( )
{
2021-05-06 17:04:54 +02:00
expect ( function ( ) { return vCarouselTest . run ( ) ; } ) . toThrowError ( errors . needVideosProvided ) ;
2021-05-06 12:47:02 +02:00
} ) ;
2021-05-06 17:49:07 +02:00
it ( "Doit cacher toutes les vidéos si cela est demandé en option, aucune vidéo n'étant alors enregistrée comme en cours." , function ( )
2021-05-06 12:47:02 +02:00
{
2021-05-06 17:49:07 +02:00
const videosId = [ "video1" , "video2" , "video3" ] ;
2021-05-06 12:47:02 +02:00
vCarouselTest . vContainers = videosId ;
vCarouselTest . firstVideoId = "" ;
vCarouselTest . run ( ) ;
for ( let containerId of videosId )
expect ( document . getElementById ( containerId ) . style . display ) . toBe ( "none" ) ;
2021-05-06 17:04:54 +02:00
expect ( vCarouselTest . currentVideo ) . toBeUndefined ( ) ;
2021-05-06 12:47:02 +02:00
} ) ;
it ( "Doit cacher toutes les vidéos, sauf celle passée en option, qui doit être enregistrée comme celle en cours." , function ( )
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" , "video3" ] ;
vCarouselTest . firstVideoId = "video3" ;
2021-05-06 12:47:02 +02:00
vCarouselTest . run ( ) ;
2021-05-06 17:49:07 +02:00
expect ( document . getElementById ( "video1" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video2" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video3" ) . style . display ) . toBe ( "block" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( < HTMLMediaElement > document . querySelector ( "#video3 video" ) ) ;
2021-05-06 12:47:02 +02:00
} ) ;
2021-06-01 15:58:46 +02:00
it ( "Si aucune indication n'est passée en option, doit cacher toutes les vidéos, sauf la première qui doit être enregistrée comme celle en cours." , function ( )
2021-05-06 12:47:02 +02:00
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" , "video3" ] ;
2021-05-06 12:47:02 +02:00
vCarouselTest . run ( ) ;
2021-05-06 17:49:07 +02:00
expect ( document . getElementById ( "video1" ) . style . display ) . toBe ( "block" ) ;
expect ( document . getElementById ( "video2" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video3" ) . style . display ) . toBe ( "none" ) ;
expect ( vCarouselTest . currentVideo ) . toEqual ( < HTMLMediaElement > document . querySelector ( "#video1 video" ) ) ;
2021-05-06 12:47:02 +02:00
} ) ;
it ( "Doit demander le lancement de la première vidéo affichée, si demandé en option." , function ( )
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" , "video3" ] ;
vCarouselTest . firstVideoId = "video2" ;
2021-05-06 12:47:02 +02:00
vCarouselTest . playFirstVideo = true ;
2021-05-06 17:49:07 +02:00
let currentVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
2021-05-06 12:47:02 +02:00
spyOn ( currentVideo , "play" ) ;
vCarouselTest . run ( ) ;
expect ( currentVideo . play ) . toHaveBeenCalled ( ) ;
} ) ;
2021-05-06 17:49:07 +02:00
it ( "Ne doit pas demander le lancement de la première vidéo affichée, si cela n'est pas demandé en option." , function ( )
2021-05-06 12:47:02 +02:00
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" , "video3" ] ;
vCarouselTest . firstVideoId = "video3" ;
let currentVideo = < HTMLMediaElement > document . querySelector ( "#video3 video" ) ;
2021-05-06 12:47:02 +02:00
spyOn ( currentVideo , "play" ) ;
vCarouselTest . run ( ) ;
expect ( currentVideo . play ) . not . toHaveBeenCalled ( ) ;
} ) ;
2021-05-06 18:06:34 +02:00
2021-05-06 17:49:07 +02:00
it ( "Doit passer d'une vidéo à l'autre et arrêter lorsqu'elles ont toutes été affichées." , function ( )
2021-05-06 12:47:02 +02:00
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" , "video3" ] ;
2021-05-06 12:47:02 +02:00
vCarouselTest . run ( ) ;
2021-05-06 17:49:07 +02:00
let currentVideo = < HTMLMediaElement > document . querySelector ( "#video1 video" ) ;
2021-05-06 12:47:02 +02:00
// Fin de lecture de la première vidéo, on passe à la suivante :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
2021-05-06 17:49:07 +02:00
expect ( document . getElementById ( "video1" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video2" ) . style . display ) . toBe ( "block" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
2021-05-06 17:04:54 +02:00
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
2021-05-06 17:49:07 +02:00
expect ( window . location . hash ) . toEqual ( "#video2" ) ;
2021-05-06 12:47:02 +02:00
// Fin de la deuxième, on passe à la dernière :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
2021-05-06 17:49:07 +02:00
expect ( document . getElementById ( "video2" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video3" ) . style . display ) . toBe ( "block" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#video3 video" ) ;
2021-05-06 17:04:54 +02:00
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
2021-05-06 17:49:07 +02:00
expect ( window . location . hash ) . toEqual ( "#video3" ) ;
2021-05-06 12:47:02 +02:00
// Fin de la dernière, rien ne bouge :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
2021-05-06 17:49:07 +02:00
expect ( document . getElementById ( "video3" ) . style . display ) . toBe ( "block" ) ;
2021-05-06 17:04:54 +02:00
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
2021-05-06 17:49:07 +02:00
expect ( window . location . hash ) . toEqual ( "#video3" ) ;
2021-05-06 12:47:02 +02:00
} ) ;
2021-05-06 17:49:07 +02:00
it ( "Si cela est demandé, le carrousel doit reprendre au début après avoir parcouru toutes les vidéos." , function ( )
2021-05-06 12:47:02 +02:00
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" , "video3" ] ;
2021-05-06 12:47:02 +02:00
vCarouselTest . noStop = true ;
vCarouselTest . run ( ) ;
2021-05-06 17:49:07 +02:00
let currentVideo = < HTMLMediaElement > document . querySelector ( "#video1 video" ) ;
2021-05-06 12:47:02 +02:00
// Fin de lecture de la première vidéo, on passe à la suivante :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
2021-05-06 17:49:07 +02:00
currentVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
2021-05-06 12:47:02 +02:00
// Fin de la deuxième, on passe à la dernière :
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
2021-05-06 17:49:07 +02:00
currentVideo = < HTMLMediaElement > document . querySelector ( "#video3 video" ) ;
// Fin de la dernière, on doit retourner à la première :
2021-05-06 12:47:02 +02:00
currentVideo . dispatchEvent ( new Event ( "ended" ) ) ;
2021-05-06 17:49:07 +02:00
expect ( document . getElementById ( "video3" ) . style . display ) . toBe ( "none" ) ;
expect ( document . getElementById ( "video1" ) . style . display ) . toBe ( "block" ) ;
currentVideo = < HTMLMediaElement > document . querySelector ( "#video1 video" ) ;
2021-05-06 17:04:54 +02:00
expect ( vCarouselTest . currentVideo ) . toEqual ( currentVideo ) ;
2021-05-06 17:49:07 +02:00
expect ( window . location . hash ) . toEqual ( "#video1" ) ;
2021-05-06 12:47:02 +02:00
} ) ;
it ( "Doit demander le lancement des nouvelles vidéos affichées, si cela est demandé en option." , function ( )
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" , "video3" ] ;
2021-05-06 12:47:02 +02:00
vCarouselTest . playNextVideos = true ;
vCarouselTest . run ( ) ;
2021-05-06 17:49:07 +02:00
let firstVideo = < HTMLMediaElement > document . querySelector ( "#video1 video" ) ;
let nextVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
2021-05-06 12:47:02 +02:00
spyOn ( nextVideo , "play" ) ;
// Fin de lecture de la première vidéo, on passe à la suivante qui doit se lancer automatiquement :
firstVideo . dispatchEvent ( new Event ( "ended" ) ) ;
expect ( nextVideo . play ) . toHaveBeenCalled ( ) ;
} ) ;
it ( "Ne doit pas demander le lancement des nouvelles vidéos affichées, si cela n'est pas demandé en option." , function ( )
{
2021-05-06 17:49:07 +02:00
vCarouselTest . vContainers = [ "video1" , "video2" , "video3" ] ;
vCarouselTest . firstVideoId = "video2" ;
2021-05-06 12:47:02 +02:00
vCarouselTest . run ( ) ;
2021-05-06 17:49:07 +02:00
let firstVideo = < HTMLMediaElement > document . querySelector ( "#video2 video" ) ;
let nextVideo = < HTMLMediaElement > document . querySelector ( "#video3 video" ) ;
2021-05-06 12:47:02 +02:00
spyOn ( nextVideo , "play" ) ;
// Fin de lecture de la première vidéo, on passe à la suivante qui ne doit pas se lancer automatiquement :
firstVideo . dispatchEvent ( new Event ( "ended" ) ) ;
expect ( nextVideo . play ) . not . toHaveBeenCalled ( ) ;
} ) ;
} ) ;
} ) ;