package eu.dnetlib.actionmanager;

import static org.junit.Assert.assertNotNull;

import java.io.IOException;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.hbase.client.Put;
import org.junit.Before;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import com.google.common.collect.Maps;

import eu.dnetlib.actionmanager.actions.ActionFactory;
import eu.dnetlib.actionmanager.actions.XsltInfoPackageAction;
import eu.dnetlib.actionmanager.common.Agent;
import eu.dnetlib.actionmanager.common.Agent.AGENT_TYPE;
import eu.dnetlib.actionmanager.common.Operation;
import eu.dnetlib.actionmanager.common.Provenance;
import eu.dnetlib.actionmanager.rmi.ActionManagerException;

public class XsltInfopackageActionTest {

	private final Resource recordDataciteInputStream = new ClassPathResource("/eu/dnetlib/actionmanager/recordDatacite.xml");

	private ActionFactory actionFactory;

	private String dataciteXSLT = "datacite2actions";

	private Agent agent = new Agent("agentId", "name", AGENT_TYPE.service);

	@Before
	public void setUp() throws Exception {
		actionFactory = new ActionFactory();

		Map<String, Resource> xslts = Maps.newHashMap();

		xslts.put(dataciteXSLT, new ClassPathResource("/eu/dnetlib/actionmanager/datacite2insertActions.xslt"));

		actionFactory.setXslts(xslts);
	}

	@Test
	public void testActionFactory() throws IOException, ActionManagerException {
		String record = IOUtils.toString(recordDataciteInputStream.getInputStream());
		XsltInfoPackageAction action = actionFactory.generateInfoPackageAction(dataciteXSLT, "actionSetId_1", agent, Operation.INSERT, record);

		assertNotNull(action);
		for (Put put : action.asPutOperations("parentId", Provenance.sysimport_mining_datasetarchive, "0.8", "datacite____")) {
			assertNotNull(put);
		}
	}

}
