Skip to content

mallivastaus viikko2 paikanpaalla

Matti Luukkainen edited this page Nov 13, 2016 · 1 revision
public class MaksukorttiTest {

    Maksukortti kortti;
    int ALKUSALDO = 1000;

    @Before
    public void setUp() {
        kortti = new Maksukortti(ALKUSALDO);
    }

    @Test
    public void luotuKorttiOlemassa() {
        assertTrue(kortti != null);
    }

    @Test
    public void luodullaKortillaOikeaSaldo() {
        assertEquals(ALKUSALDO, kortti.saldo());
    }

    @Test
    public void ottoVahentaaRahaa() {
        boolean ok = kortti.otaRahaa(400);

        assertTrue(ok);
        assertEquals(ALKUSALDO - 400, kortti.saldo());
    }

    @Test
    public void eiVoiVahentaaYhtaanSaldoaSuurempaaMaaraa() {
        boolean ok = kortti.otaRahaa(ALKUSALDO + 1);

        assertFalse(ok);
        assertEquals(ALKUSALDO, kortti.saldo());
    }

    @Test
    public void ottoVahentaaKokoSaldonVerran() {
        boolean ok = kortti.otaRahaa(ALKUSALDO);

        assertTrue(ok);
        assertEquals(0, kortti.saldo());
    }

    @Test
    public void liianSuuriOttoEiVahennaRahaa() {
        boolean ok = kortti.otaRahaa(4000);

        assertFalse(ok);
        assertEquals(ALKUSALDO, kortti.saldo());
    }

    @Test
    public void latausKasvattaaSaldoa() {
        kortti.lataaRahaa(1000);

        assertEquals(ALKUSALDO + 1000, kortti.saldo());
    }

    @Test
    public void toStringToimii() {
        assertEquals("saldo: 10.00", kortti.toString());
    }

    @Test
    public void toStringToimiiJosDesimaaleja() {
        kortti = new Maksukortti(1010);
        assertEquals("saldo: 10.10", kortti.toString());
    }

    @Test
    public void toStringToimiiJosDesimaalissaEtunolla() {
        kortti = new Maksukortti(1009);
        assertEquals("saldo: 10.09", kortti.toString());
    }
}
public class KassapaateTest {

    Kassapaate paate;
    Maksukortti kortti;
    final int EDULLINEN = 240;
    final int MAUKAS = 400;
    final int KORTIN_ALKUSALDO = 1000;

    @Before
    public void setUp() {
        paate = new Kassapaate();
        kortti = new Maksukortti(KORTIN_ALKUSALDO);
    }

    @Test
    public void alustettuOikein() {
        assertKassa(0, 0, 0);
    }

    @Test
    public void edullinenLounasKateisella() {
        int annettuSumma = EDULLINEN;
        kortti = new Maksukortti(KORTIN_ALKUSALDO);
        int paluu = paate.syoEdullisesti(annettuSumma);
        assertEquals(annettuSumma - EDULLINEN, paluu);
        assertKassa(1, 0, annettuSumma);
    }

    @Test
    public void kokoRahaPalautetaanJosEiTarpeeksiEdulliseenLounaaseen() {
        int annettuSumma = EDULLINEN - 1;
        int paluu = paate.syoEdullisesti(annettuSumma);
        assertEquals(annettuSumma, paluu);
        assertKassa(0, 0, 0);

    }

    @Test
    public void maukasLounasKateisella() {
        int annettuSumma = MAUKAS;
        int paluu = paate.syoMaukkaasti(MAUKAS);
        assertEquals(annettuSumma - MAUKAS, paluu);
        assertKassa(0, 1, annettuSumma);
    }

    @Test
    public void kokoRahaPalautetaanJosEiTarpeeksiMaukkaaseenLounaaseen() {
        int annettuSumma = MAUKAS - 1;
        int paluu = paate.syoMaukkaasti(annettuSumma);
        assertEquals(annettuSumma, paluu);
        assertKassa(0, 0, 0);
    }

    @Test
    public void edullinenLounasKortilla() {
        boolean ok = paate.syoEdullisesti(kortti);
        assertTrue(ok);
        assertEquals(KORTIN_ALKUSALDO - EDULLINEN, kortti.saldo());
        assertKassa(1, 0, 0);
    }

    @Test
    public void edullinenLounasKortillaJollaJuuriTarpeeksiRAhaa() {
        kortti = new Maksukortti(EDULLINEN);
        boolean ok = paate.syoEdullisesti(kortti);
        assertTrue(ok);
        assertEquals(0, kortti.saldo());
        assertKassa(1, 0, 0);
    }

    @Test
    public void edullistaLounastaEiMyydaJosKortillaEiTarpeeksiRahaa() {
        int alkusaldo = EDULLINEN - 1;
        kortti = new Maksukortti(alkusaldo);
        boolean ok = paate.syoEdullisesti(kortti);
        assertFalse(ok);
        assertEquals(alkusaldo, kortti.saldo());
        assertKassa(0, 0, 0);
    }

    @Test
    public void maukasLounasKortilla() {
        boolean ok = paate.syoMaukkaasti(kortti);
        assertTrue(ok);
        assertEquals(KORTIN_ALKUSALDO - MAUKAS, kortti.saldo());
        assertKassa(0, 1, 0);
    }

    @Test
    public void maukasLounasKortillaJollaJuuriTarpeeksiRahaa() {
        kortti = new Maksukortti(MAUKAS);
        boolean ok = paate.syoMaukkaasti(kortti);
        assertTrue(ok);
        assertEquals(0, kortti.saldo());
        assertKassa(0, 1, 0);
    }

    @Test
    public void maukastaLounastaEiMyydaJosKortillaEiTarpeeksiRahaa() {
        int alkusaldo = MAUKAS - 1;
        kortti = new Maksukortti(alkusaldo);
        boolean ok = paate.syoMaukkaasti(kortti);
        assertFalse(ok);
        assertEquals(alkusaldo, kortti.saldo());
        assertKassa(0, 0, 0);
    }

    @Test
    public void rahanLataaminenToimii() {
        int ladattuSumma = 1000;
        paate.lataaRahaaKortille(kortti, ladattuSumma);
        assertEquals(KORTIN_ALKUSALDO + ladattuSumma, kortti.saldo());
        assertKassa(0, 0, ladattuSumma);
    }

    @Test
    public void rahanLataaminenToimiiEiNegatiivisilla() {
        int ladattuSumma = 1;
        paate.lataaRahaaKortille(kortti, ladattuSumma);
        assertEquals(KORTIN_ALKUSALDO + ladattuSumma, kortti.saldo());
        assertKassa(0, 0, ladattuSumma);
    }

    private void assertKassa(int edullisia, int maukkaita, int rahaa) {
        int KASSASSA_ALUSSA = 100000;
        assertEquals(edullisia, paate.edullisiaLounaitaMyyty());
        assertEquals(maukkaita, paate.maukkaitaLounaitaMyyty());
        assertEquals(KASSASSA_ALUSSA + rahaa, paate.kassassaRahaa());
    }

    private void negatiivinenLataus(int negatiivinenSumma) {
        paate.lataaRahaaKortille(kortti, negatiivinenSumma);
        assertEquals(KORTIN_ALKUSALDO, kortti.saldo());
        assertKassa(0, 0, 0);
    }

    private void einegatiivisenLataaminen(int ladattuSumma) {
        kortti = new Maksukortti(KORTIN_ALKUSALDO);
        paate = new Kassapaate();

        paate.lataaRahaaKortille(kortti, ladattuSumma);
        assertEquals(KORTIN_ALKUSALDO + ladattuSumma, kortti.saldo());
        assertKassa(0, 0, ladattuSumma);
    }
}