package no.valg.valgnatt.backend.rapport;

import com.google.gson.JsonArray;
import no.valg.valgnatt.database.domene.ValgType;
import no.valg.valgnatt.database.geografi.MandatData;
import no.valg.valgnatt.database.geografi.Område;
import no.valg.valgnatt.database.geografi.PartiMandater;
import no.valg.valgnatt.database.geografi.PartiStemmer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class FellesPartielementTest {
    
    @Mock
    private PartiMandater totalPM;
    @Mock
    private PartiMandater pm;
    @Mock
    private PartiStemmer totalPS;
    @Mock
    private PartiStemmer ps;
    @Mock
    private Område område;
    @Mock
    private MandatData totalPrognoseData;
    @Mock
    private MandatData prognoseData;
    @Mock
    private MandatData resultatData;
    @Mock
    private MandatData mandatData;
    @Mock
    private MandatData besteMandatData;

    @Test
    public void leggTilParti() {
        JsonObjectWrapper rapp = new JsonObjectWrapper();
        JsonArray partier = rapp.leggTilTabell("partier");
        
        when(totalPM.getPrognoseData()).thenReturn(totalPrognoseData);
        when(totalPrognoseData.erPrognose()).thenReturn(true);

        when(pm.getPrognoseData()).thenReturn(prognoseData);
        when(prognoseData.getStemmer()).thenReturn(100);

        when(totalPM.getResultatData()).thenReturn(resultatData);
        when(resultatData.getAntall(any(ValgType.class))).thenReturn(10);

        when(pm.getResultatData()).thenReturn(mandatData);
        when(mandatData.getAntall(any(ValgType.class))).thenReturn(20);

        when(pm.finnBesteMandatData(anyBoolean())).thenReturn(besteMandatData);

        when(område.getValgType()).thenReturn(ValgType.FY);
        
        FellesPartielement.leggTilParti(ValgType.FY, totalPM, pm, totalPS, ps, partier, område, 2019);

        String forventet = "{\"partier\":[{\"id\":{\"partikategori\":null,\"partikode\":null,\"navn\":null},\"stemmer\":{\"resultat\":{\"prosent\":null,\"endring\":{\"samme\":null,\"ekvivalent\":null},\"antall\":{\"total\":0,\"fhs\":0}},\"prognose\":{\"prosent\":null,\"endring\":{\"samme\":null,\"ekvivalent\":null}}},\"mandater\":{\"resultat\":{\"antall\":20,\"endring\":20,\"utjevningAntall\":0,\"ekvivalent\":{\"antall\":null,\"endring\":null,\"utjevningAntall\":null}},\"prognose\":{\"antall\":0,\"endring\":0,\"utjevningAntall\":0,\"ekvivalent\":{\"antall\":null,\"endring\":null,\"utjevningAntall\":null}}}}]}";
        assertEquals(forventet, rapp.getJsonObject().toString());
    }
}
