package no.valg.valgnatt.database.geografi;

import no.valg.valgnatt.database.GrunnlagsdataMockup;
import no.valg.valgnatt.database.Konstanter;
import no.valg.valgnatt.database.domene.ValgType;

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

public class KommuneTest {

    private static final float FLOAT_DELTA = 0.00001f;

    private static GrunnlagsdataMockup stValg;
    private static GrunnlagsdataMockup fyValg;
    private static GrunnlagsdataMockup saValg;
    private static GrunnlagsdataMockup koValg;

    @BeforeClass
    public static void initialiser() {
        stValg = new GrunnlagsdataMockup();
        stValg.initialiser(ValgType.ST);
        fyValg = new GrunnlagsdataMockup();
        fyValg.initialiser(ValgType.FY);
        saValg = new GrunnlagsdataMockup();
        saValg.initialiser(ValgType.SA);
        koValg = new GrunnlagsdataMockup();
        koValg.initialiser(ValgType.KO);
    }

    @Test
    public void getStemmekrets_Sandnes0999_Finnes() throws Exception {
        Assert.assertEquals(stValg.SANDNES_0999_STEMMEKRETS, stValg.getSandnesKommune().getStemmekrets("0999"));
    }

    @Test
    public void getBydel_Oslo1_Finnes() throws Exception {
        Assert.assertEquals(stValg.OSLO_1_BYDEL, stValg.getOsloKommune().getBydel("1"));

    }

    @Test
    public void getBydeler_Oslo_2() throws Exception {
        Assert.assertEquals(2, stValg.getOsloKommune().getBydeler().size());
    }

    @Test
    public void getValgdistrikt_Oslo_Finnes() throws Exception {
        Assert.assertEquals(stValg.OSLO_VALGDISTRIKT, stValg.getOsloKommune().getValgdistrikt());
    }

    @Test
    public void harKretsvisOpptelling_Hurdal_False() throws Exception {
        Assert.assertEquals(false, stValg.getHurdalKommune().harKretsvisOpptelling());
    }

    @Test
    public void harKretsvisOpptelling_Sandnes_True() throws Exception {
        Assert.assertEquals(true, stValg.getSandnesKommune().harKretsvisOpptelling());
    }

    @Test
    public void getFylke_Hurdal_02() throws Exception {
        Assert.assertEquals(stValg.getLand().getFylke("02"), stValg.getHurdalKommune().getFylke());
    }

    @Test
    public void getSamevalgdistrikt_Oslo_Finnes() throws Exception {
        Assert.assertEquals(saValg.getLand().getSamevalgdistrikt(Konstanter.OSLO_FNR), saValg.getOsloKommune().getSamevalgdistrikt());
    }

    @Test
    public void getStemmekretser_Hurdal_1() throws Exception {
        Assert.assertEquals(1, stValg.getHurdalKommune().getStemmekretser().size());

    }

    @Test
    public void getNavn_Hurdal_Hurdal() throws Exception {
        Assert.assertEquals("Hurdal", stValg.getHurdalKommune().getNavn());

    }

    @Test
    public void getNr_Hurdal_0239() throws Exception {
        Assert.assertEquals("0239", stValg.getHurdalKommune().getNr());
    }

    @Test
    public void getRapportnavn_HurdalSTValg_st020239() throws Exception {
        Assert.assertEquals("st/02/0239", stValg.getHurdalKommune().getRapportid());
    }

    @Test
    public void getRapportnavn_HurdalSAValg_sa020239() throws Exception {
        Assert.assertEquals("sa/02/0239", saValg.getHurdalKommune().getRapportid());
    }

    @Test
    public void getOverordnetOmråde_Oslo_FylkeFinnes() throws Exception {
        Assert.assertEquals(stValg.getLand().getFylke(Konstanter.OSLO_FNR), stValg.getOsloKommune().getOverordnetOmråde());
    }

    @Test
    public void getUnderordnedeRapportOmråder_StavangerSTValg_3() throws Exception {
        Assert.assertEquals(3, stValg.getStavangerKommune().getUnderordnedeRapportOmråder().length);
    }

    @Test
    public void getUnderordnedeRapportOmråder_OsloFYValg_0Bydeler() throws Exception {
        Assert.assertEquals(0, fyValg.getOsloKommune().getUnderordnedeRapportOmråder().length);
    }

    @Test
    public void getUnderordnedeRapportOmråder_OsloKOValg_2Bydeler() throws Exception {
        Assert.assertEquals(2, koValg.getOsloKommune().getUnderordnedeRapportOmråder().length);
    }

    @Test
    public void getUnderordnedeRapportOmråder_Hurdal_IkkeKretsvisGir0Stemmekretser() throws Exception {
        Assert.assertEquals(0, fyValg.getHurdalKommune().getUnderordnedeRapportOmråder().length);
    }

    @Test
    public void getValgdistrikter_Stavanger_1() throws Exception {
        Assert.assertEquals(1, stValg.getStavangerKommune().getValgdistrikter().size());
    }

    @Test
    public void getAntallMandater_StavangerSTValg_0() throws Exception {
        Assert.assertEquals(0, stValg.getStavangerKommune().getAntallMandater());
    }

    @Test
    public void getAntallMandater_StavangerKOValg_1() throws Exception {
        Assert.assertEquals(110, koValg.getStavangerKommune().getAntallMandater());
    }

    @Test
    public void beregnOpptaltProsent_Hurdal_0999() throws Exception {
        Assert.assertEquals(0.999, koValg.getHurdalKommune().beregnOpptaltProsent(), FLOAT_DELTA);
    }

    @Test
    public void beregnOpptaltProsent_Oslo_0999() throws Exception {
        Assert.assertEquals(0.999, koValg.getOsloKommune().beregnOpptaltProsent(), FLOAT_DELTA);
    }

    @Test
    public void beregnFrammoteProsentIaar_Rælingen_Null() throws Exception {
        Assert.assertEquals(null, koValg.getSandnesKommune().beregnFrammoteProsentIaar());
    }

    @Test
    public void beregnFrammoteProsentIaar_Gjerdrum_Null() throws Exception {
        Assert.assertEquals(null, koValg.getGjerdrumKommune().beregnFrammoteProsentIaar());
    }

    @Test
    public void beregnFrammoteProsentIaar_Hurdal_Null() throws Exception {
        Assert.assertEquals(0.6, koValg.getHurdalKommune().beregnFrammoteProsentIaar(), FLOAT_DELTA);
    }

    @Test
    public void beregnFrammoteProsentIaar_Oslo_1525() throws Exception {
        Assert.assertEquals(0.6, koValg.getOsloKommune().beregnFrammoteProsentIaar(), FLOAT_DELTA);
    }

    @Test
    public void beregnFrammoteProsentNestsiste_Hurdal_Null() throws Exception {
        Assert.assertEquals(null, koValg.getOsloKommune().beregnFrammoteProsentNestsiste());
    }

}