package org.bodington.servlet.facilities;

import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.util.GregorianCalendar;

import junit.framework.TestCase;

public class PigeonHoleFacilityTest extends TestCase
{

	private PrintWriter writer;
	private PigeonHoleFacility facility;
	
	public void setUp()
	{
		facility = new PigeonHoleFacility();
		writer = new PrintWriter(new ByteArrayOutputStream());
	}

	public void testValidateDate()
	{
		// Basic tests with current data.
		assertTrue(facility.validateDate(writer,null,null,null));		
		assertTrue(facility.validateDate(writer,new Date(), null, null));
		assertTrue(facility.validateDate(writer,null,new Date(), null));
		
		// Create some reusuable dates
		final Date january = new GregorianCalendar(2005,
				GregorianCalendar.JANUARY, 1).getTime();
		final Date febuary = new GregorianCalendar(2005,
				GregorianCalendar.FEBRUARY, 1).getTime();
		final Date march = new GregorianCalendar(2005,
				GregorianCalendar.MARCH, 1).getTime();
		
		// Good set of data
		assertTrue(facility.validateDate(writer,january,febuary,march));

		// Missing Penalty
		assertTrue(facility.validateDate(writer,january,febuary,null));
		
		//Same start and end
		assertFalse(facility.validateDate(writer,january,january,null));
		
		// Start without end but penalty
		assertFalse(facility.validateDate(writer,january,null,febuary));
		
		// Start before end date
		assertFalse(facility.validateDate(writer,march,january,null));
		
		//Penalty before start
		assertFalse(facility.validateDate(writer,febuary,march,january));
		
		//Penalty before end
		assertFalse(facility.validateDate(writer,january,march,febuary));
		
		// Same penalty and end
		assertFalse(facility.validateDate(writer,january,febuary,febuary));
	}

	
}
