package shoppingcart;

import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.Before;
import java.util.ArrayList;

public class ShoppingCartTest {
    
    private static ShoppingCart korpa = new ShoppingCart();
    
    @Before
    public void reset(){
        korpa.reset();
    }
    
    @Test
    public void dodajNulaStavki() throws NegativnaKolicinaStavki{
        int broj = korpa.brojStavki();
        korpa.dodajStavku(new Stavka("Stavka1"), 0);
        assertEquals(broj, korpa.brojStavki());
    }
    
    @Test(expected = NegativnaKolicinaStavki.class)
    public void dodajNegativno() throws NegativnaKolicinaStavki{
        korpa.dodajStavku(new Stavka("Stavka2"),-2);
    }
    
    @Test
    public void dodajPostojeci() throws NegativnaKolicinaStavki{
        korpa.dodajStavku(new Stavka("Knjiga"), 1);
        korpa.dodajStavku(new Stavka("Knjiga"), 1);
        
        assertEquals(2, korpa.brojStavki());
    }
    
    @Test
    public void dodajNekoliko() throws NegativnaKolicinaStavki{
        korpa.dodajStavku(new Stavka("Knjiga1"), 1);
        korpa.dodajStavku(new Stavka("Knjiga2"), 1);
        korpa.dodajStavku(new Stavka("Knjiga3"), 1);
        
        ArrayList<Stavka> k = korpa.getKorpa();

        assertEquals(k.get(0).getIme(), "Knjiga1");
        assertEquals(k.get(1).getIme(), "Knjiga2");
        assertEquals(k.get(2).getIme(), "Knjiga3");
    }
    
    @Test
    public void obrisiNula() throws NegativnaKolicinaStavki, NepostojecaStavka{
        korpa.dodajStavku(new Stavka("Stavka1"), 3);
        korpa.obrisiStavke(new Stavka("Stavka1"), 0);
        assertEquals(3, korpa.brojStavki());
    }
    
    @Test(expected = NegativnaKolicinaStavki.class)
    public void obrisiNegativno() throws NegativnaKolicinaStavki, NepostojecaStavka{
        korpa.dodajStavku(new Stavka("Stavka1"), 1);
        korpa.obrisiStavke(new Stavka("Stavka1"), -2);
    }
    
    @Test(expected = RuntimeException.class)
    public void obrisiVece() throws NegativnaKolicinaStavki, NepostojecaStavka{
        korpa.dodajStavku(new Stavka("Stakva1"), 2);
        korpa.obrisiStavke(new Stavka("Stakva1"), 3);
    }
    
    @Test(expected = NepostojecaStavka.class)
    public void obrisiNepostojece() throws NegativnaKolicinaStavki, NepostojecaStavka{
        korpa.dodajStavku(new Stavka("Stakva1"), 1);
        korpa.obrisiStavke(new Stavka("Stakva2"), 1);
    }
    
    @Test(expected = IndexOutOfBoundsException.class)
    public void obrisiPrazno() throws NegativnaKolicinaStavki, NepostojecaStavka{
        korpa.obrisiStavke(new Stavka("sdads"), 1);
    }    
    
    public ShoppingCartTest() {
    }
}