package agilpizza.dao;

import static junit.framework.Assert.*;

import java.util.Collection;

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

import agilpizza.Constantes;
import agilpizza.modelo.Bebida;
import agilpizza.modelo.Ingrediente;
import agilpizza.modelo.Pedido;
import agilpizza.modelo.PizzaMontada;

public class PedidoDAOTest {

	private PedidoDAO dao;

	@Before
	public void setUp() {
		dao = new PedidoDAO();
	}

	@Test
	public void testeListaBuscaPedido() {
		Collection<Pedido> pedidos = dao.buscaListaPedidos();
		assertNotNull("Pedido deve existir", pedidos);
	}

	@Test
	public void testeFecharPedido() throws Exception {

		Pedido pedido = new Pedido();
		PizzaMontada pizza = new PizzaMontada();
		pizza.adicionaIngrediente(new Ingrediente("Mussarella", 10.0));
		pedido.alteraQuantidadeDeBebida(new Bebida("Coca Cola", 5.0), 10);
		pedido.alteraQuantidadeDePizza(pizza, 4);

		dao.fechaPedido(pedido);

		Pedido pedidoRequest = dao.buscaPedido(pedido.getIdPedido());

		assertEquals("Os ids dos pedidos devem ser os mesmos", pedido
				.getIdPedido(), pedidoRequest.getIdPedido());
		assertEquals(Constantes.ESTADO_PEDIDO_PEDIDO, pedidoRequest
				.getEstadoPedido());
	}

	@Test
	public void testeFecharPedidoRepetido() throws Exception {

		Pedido pedido = new Pedido();
		PizzaMontada pizza = new PizzaMontada();
		pizza.adicionaIngrediente(new Ingrediente("Mussarella", 10.0));
		pedido.alteraQuantidadeDeBebida(new Bebida("Coca Cola", 5.0), 10);
		pedido.alteraQuantidadeDePizza(pizza, 4);

		dao.fechaPedido(pedido);

		try {
			dao.fechaPedido(pedido);
			fail("Não deve fechar o mesmo pedido duas vezes");
		} catch (Exception e) {
			// Ok
		}

		Pedido pedidoRequest = dao.buscaPedido(pedido.getIdPedido());

		assertEquals("Os ids dos pedidos devem ser os mesmos", pedido
				.getIdPedido(), pedidoRequest.getIdPedido());
		assertEquals(Constantes.ESTADO_PEDIDO_PEDIDO, pedidoRequest
				.getEstadoPedido());
	}
}
