/**
 * TitleHandlerTest.java
 * Created on Jun 5, 2008
 * (C) Copyright TANDBERG Television Ltd.
 */
package com.tandbergtv.watchpoint.pmm.job.unitTests;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

import com.tandbergtv.watchpoint.pmm.dao.hibernate.HibernateContext;
import com.tandbergtv.watchpoint.pmm.entities.JobParameter;
import com.tandbergtv.watchpoint.pmm.entities.RuleParameter;
import com.tandbergtv.watchpoint.pmm.job.handler.TitleAssociatedHandler;
import com.tandbergtv.watchpoint.pmm.job.util.JobScheduleInfoConstants;
import com.tandbergtv.watchpoint.pmm.title.TitleActivator;

/**
 * to run this test the spec manager's path needs to be set right.
 * 
 * @author spuranik
 *
 */
public class TitleHandlerTest extends TestCase {

	TitleActivator titleActivator = null;

	/*
	 * (non-Javadoc)
	 * 
	 * @see junit.framework.TestCase#setUp()
	 */
	@Override
	protected void setUp() throws Exception {
		try {
			HibernateContext.getContext().initializeContext();

			titleActivator = new TitleActivator();
			titleActivator.start();
		} catch (RuntimeException e) {
			System.out.println(e.getMessage());
		}
		super.setUp();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see junit.framework.TestCase#tearDown()
	 */
	@Override
	protected void tearDown() throws Exception {
		try {
			HibernateContext.getContext().closeContext();

			titleActivator.stop();
		} catch (RuntimeException e) {
			System.out.println(e.getMessage());
		}
		super.tearDown();
	}

	public void testJobExecution() {
		try {
			List<RuleParameter> ruleParams = new ArrayList<RuleParameter>();
			RuleParameter p1 = new RuleParameter();
			p1.setValue("1");
			RuleParameter p2 = new RuleParameter();
			p2.setValue("after");
			RuleParameter p3 = new RuleParameter();
			p3.setValue("$Title Metadata.CableLabsVOD1.1.Movie License Start Date");
			ruleParams.add(p1);
			ruleParams.add(p2);
			ruleParams.add(p3);

			List<JobParameter> jobParams = new ArrayList<JobParameter>();
			JobParameter j1 = new JobParameter();
			j1.setName("Variable");
			j1.setValue("Sometext");
			jobParams.add(j1);

			JobParameter j2 = new JobParameter();
			j2.setName("Movie License Start Date");
			j2.setValue("$Title.CableLabsVOD1.1.Movie License Start Date");
			jobParams.add(j2);

			JobParameter j3 = new JobParameter();
			j3.setName("Movie Runtime");
			j3.setValue("$Title.CableLabsVOD1.1.Movie Runtime");
			jobParams.add(j3);

			Map<String, Object> callbackInfo = new HashMap<String, Object>();
			callbackInfo.put(JobScheduleInfoConstants.JOB_RULE_PARAMETERS, ruleParams);
			callbackInfo.put(JobScheduleInfoConstants.JOB_RULE_NAME, "NDaysFromMetadata");
			callbackInfo.put(JobScheduleInfoConstants.JOB_PARAMETERS, jobParams);
			callbackInfo.put(JobScheduleInfoConstants.JOB_SELECTED_TEMPLATE_NAME, "TestTemplate1");
			callbackInfo.put(JobScheduleInfoConstants.JOB_PRIORITY, "Normal");

			TitleAssociatedHandler handler = new TitleAssociatedHandler();
			handler.executeJob(callbackInfo, new Date());
		} catch (RuntimeException e) {
			System.out.println("Error: " + e.toString());
		}
	}
}
