package sklep.www;

import static org.junit.Assert.*;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.xml.sax.SAXException;

import sklep.baza.Baza;
import sklep.logika.SingletonSklep;
import sklep.logika.Sklep;

import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.HTMLElement;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebForm;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import com.meterware.servletunit.ServletRunner;
import com.meterware.servletunit.ServletUnitClient;

public class TestWitrynaServlet {
	private ServletRunner sr;
	private ServletUnitClient sc;
	private WebRequest req;
	private WebResponse resp;
	
	@BeforeClass
	public static void setUpClass() {
		try {
			Files.copy(Paths.get("sklep_oryginalny.db"), Paths.get(Baza.PLIK_SQLITE),
					StandardCopyOption.REPLACE_EXISTING);
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	
	@Before
	public void setUp() throws IOException, SAXException {
		SingletonSklep.reset();
		
		sr = new ServletRunner();
		sr.registerServlet("/StaryKompletnyProjekt/Witryna", "sklep.www.Witryna");
		sc = sr.newClient();
		req = new GetMethodWebRequest("http://localhost:8080/StaryKompletnyProjekt/Witryna");
		resp = sc.getResponse(req);
	}
	
	@Test
	public void testOpis() throws IOException, SAXException {
		WebForm formularz = resp.getFormWithID("sklep");
		formularz.setParameter("operacja", "opis");
		formularz.setParameter("nazwa", "Odkurzacz");
		WebResponse resp2 = formularz.submit();
		HTMLElement element = resp2.getElementWithID("komunikat");
		String tekst = element.getText();
		assertEquals("Odkurzacz: cena netto 1000.00, cena brutto 1230.00" , tekst);
	}

	@Test
	public void testZakup() throws IOException, SAXException {
		
		WebForm formularz = resp.getFormWithID("sklep");
		formularz.setParameter("operacja", "zakup");
		formularz.setParameter("nazwa", "Odkurzacz");
		formularz.setParameter("liczba", "2");
		WebResponse resp2 = formularz.submit();
		HTMLElement element = resp2.getElementWithID("komunikat");
		String tekst = element.getText();
		assertEquals("Zakupiono 2 sztuk towaru Odkurzacz z magazynu Lodz, kwota do zapłaty 2460.00." , tekst);
	}
}
