package net.woodyfolsom.cs6601.p3.dao;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import net.woodyfolsom.cs6601.p3.svc.HeadlineService;

import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class MySQLHeadlineDaoImplTest {
	private static HeadlineService headlineSvc;
	
	@BeforeClass
	public static void setUp() {
		ApplicationContext context=new FileSystemXmlApplicationContext(new String[]{"AppContext.xml"});
	    headlineSvc = (HeadlineService) context
				.getBean("mySQLHeadlineSvc");
	}
	
	@Test
	public void testSelect() {
		assertNotNull(headlineSvc);
	}
	
	//Change this back to @Test to run it... but beware, it shuffles the datasets.  Best done n times for n-fold cross validation.
	@Test
	public void testAssignRandomDatasets() {
		
		int trainingPct = 60;
		//int testPct = 10;
		int valPct = 40;
		
		//assignment fails if character is ommitted from valPct (80% 10% 1% by accident)
		assertFalse(headlineSvc.assignRandomDatasets(trainingPct/*,testPct*/,valPct/10));
		//assignment succeeds if requested ratio is 8-1-1
		assertTrue(headlineSvc.assignRandomDatasets(trainingPct/*,testPct*/,valPct));
		
		int allCount = headlineSvc.getCount();
		int trainingCount = headlineSvc.getCount(1);
		int testCount = headlineSvc.getCount(2);
		int valCount = headlineSvc.getCount(3);
		
		assertEquals(trainingCount + testCount + valCount, allCount);
		
		assertEquals((double)trainingCount/allCount,(double)trainingPct / 100.0,0.01);
		//assertEquals((double)testCount/allCount,(double)testPct / 100.0,0.01);
		assertEquals((double)valCount/allCount,(double)valPct / 100.0,0.01);
	}
}
