package testUnitaire.database.migration.etape1;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Set;

import junit.framework.Assert;

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

import database.dataset.Article;
import database.dataset.Categorie_article;
import database.migration.SqlFactory;
import database.migration.etape0.categorie_article.ReadCategorieStock;
import database.migration.etape1.article.ReadStock;

public class testArticle {
	private static Connection connection;
	private static Set<Article> articles;
	private static Set<Categorie_article> categories;
	
	@BeforeClass
	public static void connect() throws FileNotFoundException, SQLException, IOException{
		connection = SqlFactory.connect(SqlFactory.loadProperties("hotel_orford_import.xml"));
		articles = ReadStock.from(connection);
		categories = ReadCategorieStock.from(connection);
	}
	
	@AfterClass
	public static void disconnect() throws SQLException{
		connection.close();
	}
	
	@Test
	public void testQueToutesLesCategorieSontLa() throws SQLException {
		Statement stm = connection.createStatement();
		ResultSet rs = stm.executeQuery("SELECT ID FROM categorie");
		while(rs.next()){
			boolean ok = false;
			for (Categorie_article c : categories){
				if (c.getcategorie_article_p_id()==rs.getInt("ID")){
					ok=true;
				}
			}
			Assert.assertTrue("missing categorie n " + rs.getInt("ID"), ok);
		}
	}

	@Test
	public void testQueTousLesArticlesSontLa() throws SQLException{
		Statement stm = connection.createStatement();
		ResultSet rs = stm.executeQuery("SELECT ID FROM stock");
		while(rs.next()){
			boolean ok = false;
			for (Article c : articles){
				if (c.getarticle_p_id()==rs.getInt("ID")){
					ok=true;
				}
			}
			Assert.assertTrue("missing article n " + rs.getInt("ID"), ok);
		}
	}
	
	@Test
	public void testIntegriterReferentielEntreStockEtCategorie(){
		for (Article a : articles){
			boolean ok = false;
			for (Categorie_article c : categories){
				if (a.getCategorie_fk_id()==c.getcategorie_article_p_id())
					ok=true;
			}
			assertTrue("echec integriter categorie n " + a.getCategorie_fk_id(),ok);
		}
	}
	
	@Test
	public void testNotZero_article_categorie_fk_id(){
		for (Article a : articles){
			assertFalse("echec not zero categorie n " + a.getCategorie_fk_id(),a.getCategorie_fk_id()==0);
		}
	}
}
