package eu.dnetlib.pace.model;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.junit.Test;

import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;

import eu.dnetlib.pace.AbstractProtoPaceTest;
import eu.dnetlib.pace.config.Config;

public class ProtoDocumentBuilderTest extends AbstractProtoPaceTest {

	@Test
	public void test_serialise1() {

		final String id = "12345";

		final Config config = getResultFullConf();

		final MapDocument document = ProtoDocumentBuilder.newInstance(id, getResult(id), config.model());

		assertFalse(document.fieldNames().isEmpty());
		assertFalse(Iterables.isEmpty(document.fields()));

		System.out.println("original:\n" + document);

		final String stringDoc = MapDocumentSerializer.toString(document);

		System.out.println("srialization:\n" + stringDoc);

		final MapDocument decoded = MapDocumentSerializer.decode(stringDoc.getBytes());

		final SetView<String> diff = Sets.difference(document.fieldNames(), decoded.fieldNames());

		assertTrue(diff.isEmpty());

		System.out.println("decoded:\n" + decoded);
	}

	@Test
	public void test_serialise2() {

		final String id = "12345";
		final String path = "/eu/dnetlib/pace/model/gt.author.manghi1.json";

		final Config config = getPersonConf();

		final MapDocument document = ProtoDocumentBuilder.newInstance(id, getPersonGT(path).getEntity(), config.model());

		assertFalse(document.fieldNames().isEmpty());
		assertFalse(Iterables.isEmpty(document.fields()));

		System.out.println("original:\n" + document);

		final String stringDoc = MapDocumentSerializer.toString(document);

		System.out.println("srialization:\n" + stringDoc);

		final MapDocument decoded = MapDocumentSerializer.decode(stringDoc.getBytes());

		final SetView<String> diff = Sets.difference(document.fieldNames(), decoded.fieldNames());

		assertTrue(diff.isEmpty());

		System.out.println("decoded:\n" + decoded);
	}

}
