package no.valg.valgnatt.database.hibernate;

import no.valg.valgnatt.database.domene.ValgType;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

public class PartilisteIdTest {

    private static final String PARTIKODE = "X";
    private static final String VALGTYPE = "KO";
    private static final PartilisteId PARTILISTE_ID = PartilisteId.builder().partikode(PARTIKODE).valgtype(VALGTYPE).build();

    @Test
    public void equals_gittTilsvarendeObjekt() {
        PartilisteId other = PartilisteId.builder().partikode(PARTIKODE).valgtype(VALGTYPE).build();
        assertEquals(PARTILISTE_ID, other);
    }

    @Test
    public void id_gittPartilisteId() {
        assertEquals("KO-X", PARTILISTE_ID.id());
    }

    @Test
    public void hashCode_gittPartilisteId() {
        assertEquals(2311727, PARTILISTE_ID.hashCode());
    }

    @Test
    public void compareTo_gittSammeValgTypeOgSammePartikode() {
        PartilisteId other = PartilisteId.builder().valgtype(VALGTYPE).partikode(PARTIKODE).build();
        assertEquals(0, PARTILISTE_ID.compareTo(other));
    }

    @Test
    public void compareTo_gittSammeValgTypeOgLaverePartikode() {
        PartilisteId other = PartilisteId.builder().valgtype(VALGTYPE).partikode("A").build();
        assertTrue(PARTILISTE_ID.compareTo(other) > 0);
    }

    @Test
    public void compareTo_gittSammeValgTypeOgHøyerePartikode() {
        PartilisteId other = PartilisteId.builder().valgtype(VALGTYPE).partikode("Å").build();
        assertTrue(PARTILISTE_ID.compareTo(other) < 0);
    }


    @Test
    public void compareTo_gittLavereValgTypeOgSammePartikode() {
        PartilisteId other = PartilisteId.builder().valgtype("FY").partikode(PARTIKODE).build();
        assertTrue(PARTILISTE_ID.compareTo(other) > 0);
    }


    @Test
    public void compareTo_gittHøyereValgTypeOgSammePartikode() {
        PartilisteId other = PartilisteId.builder().valgtype("ST").partikode(PARTIKODE).build();
        assertTrue(PARTILISTE_ID.compareTo(other) < 0);
    }

    @Test
    public void getValgtype_gittKo_returnererValgtypeKO() {
        assertEquals(ValgType.KO, PARTILISTE_ID.getValgtype());
    }
}
