/**
 * RuleHandlerClassFinderTest.java
 * Created on May 20, 2008
 * (C) Copyright TANDBERG Television Ltd.
 */
package com.tandbergtv.watchpoint.pmm.job.unitTests;

import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

import com.tandbergtv.watchpoint.pmm.entities.EntityType;
import com.tandbergtv.watchpoint.pmm.entities.RuleParameter;
import com.tandbergtv.watchpoint.pmm.entities.RuleParameterDataType;
import com.tandbergtv.watchpoint.pmm.entities.RuleType;
import com.tandbergtv.watchpoint.pmm.entities.RuleTypeParameter;
import com.tandbergtv.watchpoint.pmm.job.util.RuleCallbackClassFinder;
import com.tandbergtv.watchpoint.pmm.title.TitleActivator;

/**
 * Remember to comment out 'checkLicense' in WatchPointPluginManager before running
 * these tests.
 *  
 * @author spuranik
 * 
 */
public class RuleCallbackClassFinderTest extends TestCase {

	private TitleActivator titleActivator;

	/* (non-Javadoc)
	 * @see junit.framework.TestCase#setUp()
	 */
	@Override
	protected void setUp() throws Exception {
		titleActivator = new TitleActivator();
		titleActivator.start();
		super.setUp();
	}

	/* (non-Javadoc)
	 * @see junit.framework.TestCase#tearDown()
	 */
	@Override
	protected void tearDown() throws Exception {
		titleActivator.stop();
		super.tearDown();
	}

	public void testGettingMetadataCallback() {
		try {
			RuleCallbackClassFinder finder = new RuleCallbackClassFinder();
			EntityType type = EntityType.SELF;

			List<RuleParameter> ruleParams = new ArrayList<RuleParameter>();
			RuleParameter rp = new RuleParameter();
			rp.setValue("$Title Metadata.License Start Date");
			rp.setOrder(1);
			ruleParams.add(rp);

			RuleType ruleType = new RuleType();
			ruleType.setName("NDaysFromMetadata");
			ruleType.setTitlesAssociated(true);

			List<RuleTypeParameter> ruleTypeParams = new ArrayList<RuleTypeParameter>();
			RuleTypeParameter rtp = new RuleTypeParameter();
			rtp.setType(RuleParameterDataType.PARAMETERREF);
			rtp.setOrder(1);
			ruleTypeParams.add(rtp);
			ruleType.setParams(ruleTypeParams);

			String callbackClass = finder.getCallbackClass(true, type, ruleParams, ruleTypeParams);

			System.out.println("Callback class for Title is: " + callbackClass);
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}

	public void testGettingTimeBasedCallback() {
		try {
			RuleCallbackClassFinder finder = new RuleCallbackClassFinder();
			EntityType type = EntityType.PARTNER;

			RuleType ruleType = new RuleType();
			ruleType.setName("EveryNWeeks");
			ruleType.setTitlesAssociated(false);

			List<RuleParameter> ruleParams = new ArrayList<RuleParameter>();
			RuleParameter rp1 = new RuleParameter();
			rp1.setValue("2");
			rp1.setOrder(1);
			ruleParams.add(rp1);
			RuleParameter rp2 = new RuleParameter();
			rp2.setValue("1:48 pm");
			rp2.setOrder(1);
			ruleParams.add(rp2);

			ArrayList<RuleTypeParameter> rtParams = new ArrayList<RuleTypeParameter>();
			RuleTypeParameter rtp1 = new RuleTypeParameter();
			rtp1.setOrder(1);
			rtp1.setType(RuleParameterDataType.INTEGER);
			rtParams.add(rtp1);
			RuleTypeParameter rtp2 = new RuleTypeParameter();
			rtp2.setOrder(2);
			rtp2.setType(RuleParameterDataType.TIME);
			rtParams.add(rtp2);

			ruleType.setParams(rtParams);

			String callbackClass = finder.getCallbackClass(false, type, ruleParams, rtParams);

			System.out.println("Callback class for 'EveryNWeeks' ruletype is: " + callbackClass);
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}
}
