package eu.dnetlib.lbs.utils;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Date;
import java.util.List;

import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import eu.dnetlib.lbs.elasticsearch.Event;

@Ignore
public class JsonMessageToEventFunctionTest {

	private JsonMessageToEventFunction f;

	@Before
	public void setUp() throws Exception {
		f = new JsonMessageToEventFunction();
	}

	@Test
	public void test() throws IOException {
		final String json = IOUtils.toString(getClass().getResourceAsStream("/test-event-1.json"), Charset.defaultCharset());
		System.out.println("Original record:\n\n" + json + "\n\n");

		final Event event = f.apply(json);

		assertNotNull(event);

		assertEquals("openaire", event.getProducerId());
		assertEquals("INSERT/123", event.getTopic());
		assertEquals("Hello World", event.getPayload());
		assertEquals(10 * 24 * 60 * 60 * 1000, event.getExpiryDate() - event.getCreationDate());
		assertEquals("id_123", event.getMap().get("id"));
		assertEquals("Hello", event.getMap().get("title"));
		assertEquals(0.7d, event.getMap().get("trust"));
		assertEquals(4l, event.getMap().get("count"));
		assertEquals(true, event.getMap().get("open"));

		assertNotNull(event.getMap().get("date"));
		assertTrue(event.getMap().get("date") instanceof Date);

		assertNotNull(event.getMap().get("creators"));
		assertTrue(event.getMap().get("creators") instanceof List);
		assertEquals(3, ((List<?>) event.getMap().get("creators")).size());
		assertEquals("michele", ((List<?>) event.getMap().get("creators")).get(0));
		assertEquals("claudio", ((List<?>) event.getMap().get("creators")).get(1));
		assertEquals("alessia", ((List<?>) event.getMap().get("creators")).get(2));

		assertNotNull(event.getMap().get("years"));
		assertTrue(event.getMap().get("years") instanceof List);
		assertEquals(2, ((List<?>) event.getMap().get("years")).size());
		assertEquals(2011L, ((List<?>) event.getMap().get("years")).get(0));
		assertEquals(2013L, ((List<?>) event.getMap().get("years")).get(1));
	}

}
