
import Index from "../Index.vue";
import {mount} from "@vue/test-utils";
import { shallowMount } from '@vue/test-utils'
import Login from "../Login.vue";
import Menu from "../Menu.vue";
import Maj from "../Maj.vue";
import NewContenu from "../NewContenu.vue";
import Contenu from "../Contenu.vue";

// Rien a tester dans Index.vue, car c'est juste un "aggrégateur" pour d'autres composants.

test('Index', () => {

    const wrapper = shallowMount(Index)
    wrapper.vm.setLogged = jest.fn()

    expect(wrapper.exists()).toBeTruthy();


    // Tests du retour de l'émit de Contenu.vue
    const subComponent = wrapper.findComponent(Login)
    expect(subComponent.exists()).toBe(true)

    subComponent.vm.$emit("user_logged", {"isLogged" : true, "auteur": "Marmaduke"})
    expect(wrapper.vm.etat).toEqual("Contenu")
    expect(wrapper.vm.auteur).toEqual("Marmaduke")


    // Tests du retour de l'émit de Menu.vue
    const subComponentTwo = wrapper.findComponent(Menu)
    expect(subComponentTwo.exists()).toBe(true)

    subComponentTwo.vm.$emit("menu_choisi", {choix: "Mises à jour", isRecu: true, isPropose: false})
    expect(wrapper.vm.etat).toEqual("Mises à jour")
    expect(wrapper.vm.isRecu).toEqual(true)
    expect(wrapper.vm.isPropose).toEqual(false)

    subComponentTwo.vm.$emit("menu_choisi", {choix: "Deconnexion"})
    expect(wrapper.vm.etat).toEqual("unlogged")


    // Test du retour de l'émit de Maj.vue
    const subComponentThree = wrapper.findComponent(Maj)
    subComponentThree.vm.$emit("majNvoContenu", {contenu: "data"})
    expect(wrapper.vm.nvoContenu === "data")

    expect(wrapper.vm.recalculerNotif === false)
    subComponentTwo.vm.$emit("recalculerNotif")
    expect(wrapper.vm.recalculerNotif === true)

    // Test du retour de l'émit de NewContenu.vue
    const subComponentFour = wrapper.findComponent(NewContenu)

    subComponentFour.vm.$emit("contenuAjoute", {contenu: "nouveauContenu"})
    expect(wrapper.vm.contenuAjoute === "nouveauContenu")

    subComponentFour.vm.$emit("retourArriere")
    expect(wrapper.vm.etat === "Contenu")

    // Test du retour de Contenu.vue
    const subComponentFive = wrapper.findComponent(Contenu)

    subComponentFive.vm.$emit("choix_variante", {variante: true})
    expect(wrapper.vm.variante === true)

    subComponentFive.vm.$emit("newContenu")
    expect(wrapper.vm.etat === "newContenu")

})
