package sklep.logika;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

import java.math.BigDecimal;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import sklep.baza.Baza;
import sklep.exn.BladBazyDanych;
import sklep.exn.NieznanyTowar;
import sklep.logika.Katalog;
import sklep.model.Towar;

public class TestKatalog_Mockito {
	private static final String PRALKA = "Pralka";
	private static final String ODKURZACZ = "Odkurzacz";
	private static final String NIEZNANY = "Nieznany";
	
	private static final BigDecimal ZMIANA = new BigDecimal("10.0");

	private Katalog katalog;
	private Towar m_pralka, m_odkurzacz;
	private Baza m_baza;

	@Before
	public void setUp() throws Exception {
		m_pralka = mock(Towar.class);
		when(m_pralka.getNazwa()).thenReturn(PRALKA);
		
		m_odkurzacz = mock(Towar.class);
		when(m_odkurzacz.getNazwa()).thenReturn(ODKURZACZ);

		m_baza = mock(Baza.class);
		when(m_baza.wezTowar(PRALKA)).thenReturn(m_pralka);
		
		katalog = new Katalog(m_baza);
	}

	@Test
	public void testWezTowar() throws NieznanyTowar, BladBazyDanych {
		Towar towar = katalog.pobierzTowar(PRALKA);
		assertEquals(m_pralka, towar);
}

	@Test(expected=NieznanyTowar.class)
	public void testWezTowar_Nieznany() throws NieznanyTowar, BladBazyDanych {
		katalog.pobierzTowar(NIEZNANY);
	}

	@Test
	public void testDodaj() throws NieznanyTowar, BladBazyDanych {
		Towar m_nowyTowar = mock(Towar.class);
		katalog.dodajTowar(m_nowyTowar);
		verify(m_baza).zapiszTowar(m_nowyTowar);
	}
	
	@Test
	public void testZmienCeneWszystkichTowarow() throws BladBazyDanych {
		katalog.zmienCeneWszystkichTowarow(ZMIANA);
		verify(m_baza).zmienWszystkieCeny(ZMIANA);
	}

	@Test
	public void testZmienCeneTowaru() throws BladBazyDanych {
		katalog.zmienCeneTowaru(PRALKA, ZMIANA);
		verify(m_baza).zmienCene(PRALKA, ZMIANA);
	}
}
