package agilpizza.modelo;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;

import java.util.Collection;
import java.util.List;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import agilpizza.modelo.pizza.Categoria;
import agilpizza.modelo.pizza.CategoriaDAO;
import agilpizza.modelo.pizza.Ingrediente;

public class CategoriaDAOTest {
	private static CategoriaDAO dao;

	@BeforeClass
	public static void setUp() {
		dao = new CategoriaDAO();
	}

	@AfterClass
	public static void tearDown() {
	}

	@Test
	public void testeInicializaCategoriaDeQueijos() {
		Categoria queijos = dao.buscaCategoria("Queijos");
		assertNotNull("Categoria queijos deve existir", queijos);
		List<Ingrediente> ingredientes = queijos.getIngredientes();
		assertEquals("Número de queijos está errado", 8, ingredientes.size());
	}

	@Test
	public void testeInicializaCategoriaDeVegetais() {
		Categoria vegetais = dao.buscaCategoria("Vegetais");
		assertNotNull("Categoria vegetais deve existir", vegetais);
		List<Ingrediente> ingredientes = vegetais.getIngredientes();
		assertEquals("Número de vegetais está errado", 17, ingredientes.size());
	}

	@Test
	public void testeInicializaCategoriaDeCarnes() {
		Categoria carnes = dao.buscaCategoria("Carnes");
		assertNotNull("Categoria carnes deve existir", carnes);
		List<Ingrediente> ingredientes = carnes.getIngredientes();
		assertEquals("Número de carnes está errado", 4, ingredientes.size());
	}

	@Test
	public void testeInicializaCategoriaOutros() {
		Categoria outros = dao.buscaCategoria("Outros");
		assertNotNull("Categoria outros deve existir", outros);
		List<Ingrediente> ingredientes = outros.getIngredientes();
		assertEquals("Número de ingredientes está errado", 3, ingredientes
				.size());
	}

	@Test
	public void testeBuscaCategoriaInexistenteRetornaNulo() {
		Categoria inexistente = dao.buscaCategoria("Inexistente");
		assertNull("Categoria não deveria existir", inexistente);
	}

	@Test
	public void testeBuscaCategoriasDevolveCategoriasInicializadas() {
		Collection<Categoria> categorias = dao.buscaCategorias();
		assertNotNull("Deveriam haver categorias cadastradas", categorias);
		assertEquals("Número de categorias cadastradas está errado", 4,
				categorias.size());
	}

	@Test
	public void testeBuscaIngrediente() {
		Ingrediente ingrediente = dao.buscarIngrediente("Queijos", "Mussarela");
		assertEquals("O ingrediente deve ser 0.50", 0.5, ingrediente.getPreco());
	}
}
