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 LandTest {

	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 getNavn_Norge_norge() throws Exception {
		Assert.assertEquals("norge", stValg.getLand().getNavn());
	}

	@Test
	public void getNr_Norge_0() throws Exception {
		Assert.assertEquals("0", stValg.getLand().getNr());
	}

	@Test
	public void getRapportnavn_NorgeSA_sa() throws Exception {
		Assert.assertEquals("sa", saValg.getLand().getRapportid());
	}

	@Test
	public void getOverordnetOmråde_Norge_Null() throws Exception {
		Assert.assertEquals(null, fyValg.getLand().getOverordnetOmråde());
	}

	@Test
	public void getUnderordnedeRapportOmråder_NorgeSA_2() throws Exception {
		Assert.assertEquals(2, saValg.getLand().getUnderordnedeRapportOmråder().length);
	}

	@Test
	public void getUnderordnedeRapportOmråder_NorgeST_4() throws Exception {
		Assert.assertEquals(4, stValg.getLand().getUnderordnedeRapportOmråder().length);
	}

	@Test
	public void getFylker_NorgeST_4() throws Exception {
		Assert.assertEquals(4, stValg.getLand().getFylker().size());
	}

	@Test
	public void getSamevalgdistrikter() throws Exception {
		Assert.assertEquals(2, saValg.getLand().getSamevalgdistrikter().size());
	}

	@Test
	public void lagLandsdel() throws Exception {
		Strata landsdel = stValg.getLand().lagStrata("Østlandet", 0,
				GrunnlagsdataMockup.HURDAL_KNR, GrunnlagsdataMockup.RÆLINGEN_KNR, GrunnlagsdataMockup.GJERDRUM_KNR, Konstanter.OSLO_KNR);
		Assert.assertEquals(8, landsdel.getStemmekretser().size());
		Assert.assertEquals(5000, landsdel.getAntallStemmeberettigede());
		Assert.assertEquals(0.6, landsdel.beregnFrammoteProsentIaar(), FLOAT_DELTA);
	}

	@Test
	public void getStemmekretser_SA_8() throws Exception {
		Assert.assertEquals(8, saValg.getLand().getStemmekretser().size());
	}

	@Test
	public void getStemmekretser_ST_14() throws Exception {
		Assert.assertEquals(14, stValg.getLand().getStemmekretser().size());
	}

	@Test
	public void getAntallStemmeberettigede_SA_5000() throws Exception {
		Assert.assertEquals(5000, saValg.getLand().getAntallStemmeberettigede());
	}

	@Test
	public void getAntallStemmeberettigede_ST_16700() throws Exception {
		Assert.assertEquals(16700, stValg.getLand().getAntallStemmeberettigede());
	}

	@Test
	public void beregnFrammoteProsentIaar_SA_60() throws Exception {
		Assert.assertEquals(0.6, saValg.getLand().beregnFrammoteProsentIaar(), FLOAT_DELTA);
	}

	@Test
	public void beregnFrammoteProsentIaar_ST_60() throws Exception {
		Assert.assertEquals(0.6, stValg.getLand().beregnFrammoteProsentIaar(), FLOAT_DELTA);
	}

	@Test
	public void getAntallMandater_ST_183() throws Exception {
		Assert.assertEquals(183, stValg.getLand().getAntallMandater());
	}

	@Test
	public void getAntallMandater_FY_160() throws Exception {
		Assert.assertEquals(160, fyValg.getLand().getAntallMandater());
	}

	@Test
	public void getAntallMandater_SA_50() throws Exception {
		Assert.assertEquals(50, saValg.getLand().getAntallMandater());
	}

}
