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
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
describe("vCarousel", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
|
|
|
let vCarouselTest : vCarousel;
|
2022-01-18 18:15:33 +01:00
|
|
|
const videosWebDir="hhttp://localhost:9876/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
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
beforeEach(() =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
|
|
|
vCarouselTest=new vCarousel();
|
|
|
|
document.body.insertAdjacentHTML('afterbegin', fixture);
|
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
afterEach(() =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
|
|
|
document.body.removeChild(document.getElementById('fixture'));
|
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Doit être une instance de vCarousel", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
|
|
|
expect(vCarouselTest).toBeInstanceOf(vCarousel);
|
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
describe("Configuration de vCarousel", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Doit générer une erreur si tous les ids passés ne correspondent pas à des éléments HTML existants.", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
2022-01-18 16:51:12 +01:00
|
|
|
expect(() => { return vCarouselTest.vContainers=["dontExistId","video1","video2"]; }).toThrowError(errors.elementNotFound+"dontExistId");
|
|
|
|
expect(() => { return vCarouselTest.vContainers=["video1","dontExistId","video2"]; }).toThrowError(errors.elementNotFound+"dontExistId");
|
|
|
|
expect(() => { return vCarouselTest.vContainers=["video1","video2","dontExistId"]; }).toThrowError(errors.elementNotFound+"dontExistId");
|
2021-05-06 12:47:02 +02:00
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01: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>.", () =>
|
2021-05-06 17:49:07 +02:00
|
|
|
{
|
2022-01-18 16:51:12 +01:00
|
|
|
expect(() => { return vCarouselTest.vContainers=["noVideo","video1","video2"]; }).toThrowError(errors.videoNotFound+"noVideo");
|
|
|
|
expect(() => { return vCarouselTest.vContainers=["video1","noVideo","video2"]; }).toThrowError(errors.videoNotFound+"noVideo");
|
|
|
|
expect(() => { return vCarouselTest.vContainers=["video1","video2","noVideo"]; }).toThrowError(errors.videoNotFound+"noVideo");
|
2021-05-06 12:47:02 +02:00
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01: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>.", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
2022-01-18 16:51:12 +01:00
|
|
|
expect(() => { return vCarouselTest.vContainers=["video1"]; }).toThrowError(errors.need2Videos);
|
2021-05-06 12:47:02 +02:00
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01: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.", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
2022-01-18 16:51:12 +01:00
|
|
|
expect(() => { return vCarouselTest.vContainers=["video1","video2"]; }).not.toThrowError();
|
2021-05-06 12:47:02 +02:00
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01: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.", () =>
|
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
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Doit accepter un firstVideoId vide permettant de cacher toutes les vidéos au lancement.", () =>
|
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("");
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
describe("Lancement de vCarousel", () =>
|
2021-05-06 17:49:07 +02:00
|
|
|
{
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Doit générer une erreur si on lance le carrousel sans avoir fourni les éléments HTML contenant les vidéos.", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
2022-01-18 16:51:12 +01:00
|
|
|
expect(() => { return vCarouselTest.run(); }).toThrowError(errors.needVideosProvided);
|
2021-05-06 12:47:02 +02:00
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01: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.", () =>
|
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();
|
2022-01-18 16:51:12 +01:00
|
|
|
for(const containerId of videosId)
|
2021-05-06 12:47:02 +02:00
|
|
|
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
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Doit cacher toutes les vidéos, sauf celle passée en option, qui doit être enregistrée comme celle en cours.", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
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
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01: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.", () =>
|
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
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Doit demander le lancement de la première vidéo affichée, si demandé en option.", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
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();
|
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Ne doit pas demander le lancement de la première vidéo affichée, si cela n'est pas demandé en option.", () =>
|
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
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Doit passer d'une vidéo à l'autre et arrêter lorsqu'elles ont toutes été affichées.", () =>
|
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
|
|
|
});
|
2022-01-18 17:36:40 +01:00
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Si cela est demandé, le carrousel doit reprendre au début après avoir parcouru toutes les vidéos.", () =>
|
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
|
|
|
});
|
2022-01-18 17:36:40 +01:00
|
|
|
|
|
|
|
it("Lorsque l'on passe d'une vidéo à l'autre, la durée de lecture de la suivante doit être remise à zéro pour permettre sa lecture.", () =>
|
|
|
|
{
|
|
|
|
vCarouselTest.vContainers=["video1","video2","video3"];
|
|
|
|
vCarouselTest.noStop=true;
|
|
|
|
vCarouselTest.run();
|
|
|
|
let currentVideo=<HTMLMediaElement>document.querySelector("#video1 video");
|
|
|
|
let nextVideo=<HTMLMediaElement>document.querySelector("#video2 video");
|
|
|
|
nextVideo.currentTime=5;
|
|
|
|
currentVideo.dispatchEvent(new Event("ended"));
|
|
|
|
expect(nextVideo.currentTime).toEqual(0);
|
|
|
|
// Et ainsi de suite :
|
|
|
|
currentVideo=<HTMLMediaElement>document.querySelector("#video2 video");
|
|
|
|
nextVideo=<HTMLMediaElement>document.querySelector("#video3 video");
|
|
|
|
nextVideo.currentTime=3;
|
|
|
|
currentVideo.dispatchEvent(new Event("ended"));
|
|
|
|
expect(nextVideo.currentTime).toEqual(0);
|
|
|
|
// Retour sur la première :
|
|
|
|
currentVideo=<HTMLMediaElement>document.querySelector("#video3 video");
|
|
|
|
nextVideo=<HTMLMediaElement>document.querySelector("#video1 video");
|
|
|
|
currentVideo.dispatchEvent(new Event("ended"));
|
|
|
|
expect(nextVideo.currentTime).toEqual(0);
|
|
|
|
});
|
2021-05-06 12:47:02 +02:00
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Doit demander le lancement des nouvelles vidéos affichées, si cela est demandé en option.", () =>
|
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.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();
|
|
|
|
});
|
|
|
|
|
2022-01-18 16:51:12 +01:00
|
|
|
it("Ne doit pas demander le lancement des nouvelles vidéos affichées, si cela n'est pas demandé en option.", () =>
|
2021-05-06 12:47:02 +02:00
|
|
|
{
|
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();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|