package it.sw.pa.comune.artegna.domain;

import static it.sw.pa.comune.artegna.domain.DisponibilitaTestSamples.*;
import static it.sw.pa.comune.artegna.domain.ModelloLiberatoriaTestSamples.*;
import static it.sw.pa.comune.artegna.domain.StrutturaTestSamples.*;
import static org.assertj.core.api.Assertions.assertThat;

import it.sw.pa.comune.artegna.web.rest.TestUtil;
import java.util.HashSet;
import java.util.Set;
import org.junit.jupiter.api.Test;

class StrutturaTest {

    @Test
    void equalsVerifier() throws Exception {
        TestUtil.equalsVerifier(Struttura.class);
        Struttura struttura1 = getStrutturaSample1();
        Struttura struttura2 = new Struttura();
        assertThat(struttura1).isNotEqualTo(struttura2);

        struttura2.setId(struttura1.getId());
        assertThat(struttura1).isEqualTo(struttura2);

        struttura2 = getStrutturaSample2();
        assertThat(struttura1).isNotEqualTo(struttura2);
    }

    @Test
    void disponibilitaTest() {
        Struttura struttura = getStrutturaRandomSampleGenerator();
        Disponibilita disponibilitaBack = getDisponibilitaRandomSampleGenerator();

        struttura.addDisponibilita(disponibilitaBack);
        assertThat(struttura.getDisponibilitas()).containsOnly(disponibilitaBack);
        assertThat(disponibilitaBack.getStruttura()).isEqualTo(struttura);

        struttura.removeDisponibilita(disponibilitaBack);
        assertThat(struttura.getDisponibilitas()).doesNotContain(disponibilitaBack);
        assertThat(disponibilitaBack.getStruttura()).isNull();

        struttura.disponibilitas(new HashSet<>(Set.of(disponibilitaBack)));
        assertThat(struttura.getDisponibilitas()).containsOnly(disponibilitaBack);
        assertThat(disponibilitaBack.getStruttura()).isEqualTo(struttura);

        struttura.setDisponibilitas(new HashSet<>());
        assertThat(struttura.getDisponibilitas()).doesNotContain(disponibilitaBack);
        assertThat(disponibilitaBack.getStruttura()).isNull();
    }

    @Test
    void moduliLiberatorieTest() {
        Struttura struttura = getStrutturaRandomSampleGenerator();
        ModelloLiberatoria modelloLiberatoriaBack = getModelloLiberatoriaRandomSampleGenerator();

        struttura.addModuliLiberatorie(modelloLiberatoriaBack);
        assertThat(struttura.getModuliLiberatories()).containsOnly(modelloLiberatoriaBack);
        assertThat(modelloLiberatoriaBack.getStruttura()).isEqualTo(struttura);

        struttura.removeModuliLiberatorie(modelloLiberatoriaBack);
        assertThat(struttura.getModuliLiberatories()).doesNotContain(modelloLiberatoriaBack);
        assertThat(modelloLiberatoriaBack.getStruttura()).isNull();

        struttura.moduliLiberatories(new HashSet<>(Set.of(modelloLiberatoriaBack)));
        assertThat(struttura.getModuliLiberatories()).containsOnly(modelloLiberatoriaBack);
        assertThat(modelloLiberatoriaBack.getStruttura()).isEqualTo(struttura);

        struttura.setModuliLiberatories(new HashSet<>());
        assertThat(struttura.getModuliLiberatories()).doesNotContain(modelloLiberatoriaBack);
        assertThat(modelloLiberatoriaBack.getStruttura()).isNull();
    }
}
