package sklep;

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

import java.math.BigDecimal;

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

public class TestKatalogMockito {
	private static final BigDecimal CENA_ZMIENIONA_ODK = new BigDecimal("550.00");
	private static final BigDecimal CENA_ZMIENIONA_PRALKI = new BigDecimal("1100.00");
	private static final BigDecimal ZMIANA = new BigDecimal("0.10");
	private static final BigDecimal CENA_NETTO_PRALKI = new BigDecimal("1000.00");
	private static final BigDecimal CENA_NETTO_ODKURZACZA = new BigDecimal("500.00");
	private static final String ODKURZACZ = "odkurzacz";
	private static final String PRALKA = "pralka";

	private Katalog katalog;
	
	private Towar m_pralka, m_odkurzacz;
	
	
	@Before
	public void setUp() {
		katalog = new Katalog();
		m_pralka = mock(Towar.class);
		m_odkurzacz = mock(Towar.class);
		
		// "programowanie" mocków - "stubbing"
		when(m_pralka.getId()).thenReturn(2);
		when(m_pralka.getNazwa()).thenReturn(PRALKA);
		when(m_pralka.getCenaNetto()).thenReturn(CENA_NETTO_PRALKI);

		when(m_odkurzacz.getId()).thenReturn(3);
		when(m_odkurzacz.getNazwa()).thenReturn(ODKURZACZ);
		when(m_odkurzacz.getCenaNetto()).thenReturn(CENA_NETTO_ODKURZACZA);

		katalog.dodaj(m_pralka);
		katalog.dodaj(m_odkurzacz);
		
		//System.out.println(m_pralka.getId() + " " + m_pralka.getNazwa());
	}

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

	@Test
	public void testZmienCene() throws NieznanyTowar {
		katalog.zmienCene(PRALKA, ZMIANA);
		
		verify(m_pralka).setCenaNetto(CENA_ZMIENIONA_PRALKI);
		verify(m_odkurzacz, never()).setCenaNetto(any());
	}
	
	@Test
	public void testZmienWszystkieCeny() {
		katalog.zmienWszystkieCeny(ZMIANA);
		
		verify(m_pralka).setCenaNetto(CENA_ZMIENIONA_PRALKI);
		verify(m_odkurzacz).setCenaNetto(CENA_ZMIENIONA_ODK);
	}
	
}
