package net.woodyfolsom.cs6601.p2;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.hamcrest.CoreMatchers.*;

import java.io.File;

import net.woodyfolsom.cs6601.p2.Ingredient.TYPE;
import net.woodyfolsom.cs6601.p2.Recipe;
import net.woodyfolsom.cs6601.p2.RecipeBook;
import net.woodyfolsom.cs6601.p2.RecipeBookReader;

import org.junit.Test;

public class RecipeBookReaderTest {

	@Test
	public void testReadSurveyDataset() {
		RecipeBook recipeBook = RecipeBookReader.readRecipeBook(new File("data/survey_recipes.xml"));
		assertNotNull(recipeBook);
		assertThat(recipeBook.getSize(), is(equalTo(22)));
		
		Recipe recipe = recipeBook.getRecipe(0);
		System.out.println(recipe.getHead().getTitle());
		assertThat(recipe.getHead().getTitle(), is(equalTo("Honey cake")));
		assertTrue(recipe.getIngredients().contains(TYPE.EGGS));
		assertTrue(recipe.getIngredients().contains(TYPE.GLUTEN));
		assertTrue(recipe.getIngredients().contains(TYPE.SPICE));
		assertFalse(recipe.getIngredients().contains(TYPE.BEEF));
		assertFalse(recipe.getIngredients().contains(TYPE.POULTRY));
		assertFalse(recipe.getIngredients().contains(TYPE.SHELLFISH));
		
		for (int rIndex = 0; rIndex < recipeBook.getSize(); rIndex++) {
			System.out.println(recipeBook.getRecipe(rIndex).getHead().getTitle());
		}
	}
	
	@Test
	public void testReadShortSurveyDataset() {
		RecipeBook recipeBook = RecipeBookReader.readRecipeBook(new File("data/short_recipebook.xml"));
		assertNotNull(recipeBook);
		assertThat(recipeBook.getSize(), is(equalTo(4)));
		
		for (int i = 0; i < 4; i++) {
			Recipe recipe = recipeBook.getRecipe(i);
			System.out.println(i + ": " +recipe.getHead().getTitle());
		}
		
		Recipe recipe = recipeBook.getRecipe(0);
		assertThat(recipe.getHead().getTitle(), is(equalTo("Catalan Rice")));
		assertTrue(recipe.getIngredients().contains(TYPE.PORK));
		assertFalse(recipe.getIngredients().contains(TYPE.BEEF));
		assertFalse(recipe.getIngredients().contains(TYPE.POTATO));
		assertTrue(recipe.getIngredients().contains(TYPE.TOMATO));
		
		recipe = recipeBook.getRecipe(1);
		assertThat(recipe.getHead().getTitle(), is(equalTo("Hamburger Steak")));
		assertFalse(recipe.getIngredients().contains(TYPE.PORK));
		assertTrue(recipe.getIngredients().contains(TYPE.BEEF));
		assertFalse(recipe.getIngredients().contains(TYPE.POTATO));
		assertFalse(recipe.getIngredients().contains(TYPE.TOMATO));
		
		recipe = recipeBook.getRecipe(2);
		assertThat(recipe.getHead().getTitle(), is(equalTo("Potatoes in a Thick Sauce")));
		assertFalse(recipe.getIngredients().contains(TYPE.PORK));
		assertFalse(recipe.getIngredients().contains(TYPE.BEEF));
		assertTrue(recipe.getIngredients().contains(TYPE.POTATO));
		assertTrue(recipe.getIngredients().contains(TYPE.TOMATO));
		
		recipe = recipeBook.getRecipe(3);
		assertThat(recipe.getHead().getTitle(), is(equalTo("Tomato-Zucchini Casserole")));
		assertFalse(recipe.getIngredients().contains(TYPE.PORK));
		assertFalse(recipe.getIngredients().contains(TYPE.BEEF));
		assertFalse(recipe.getIngredients().contains(TYPE.POTATO));
		assertTrue(recipe.getIngredients().contains(TYPE.TOMATO));
	}
}
