package eu.dnetlib.data.mapreduce.util;

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

import org.junit.Before;
import org.junit.Test;

import com.google.protobuf.Descriptors.FieldDescriptor;

import eu.dnetlib.data.proto.OafProtos.OafRel;
import eu.dnetlib.data.proto.PersonResultProtos.PersonResult.Authorship;
import eu.dnetlib.data.proto.RelTypeProtos.RelType;
import eu.dnetlib.data.proto.RelTypeProtos.SubRelType;

public class OafRelDecoderTest {

	private OafRel oafRel;

	@Before
	public void setUp() {
		oafRel = OafTest.getPersonResult("ID_1", "ID_2", "1", "isAuthor");
	}

	@Test
	public void testSetClass() {

		OafRelDecoder d1 = OafRelDecoder.decode(oafRel);

		assertNotNull(d1);
		assertEquals("isAuthor", d1.getRelClass());

		OafRelDecoder d2 = OafRelDecoder.decode(d1.setClassId("hasAuthor").build());

		assertEquals("hasAuthor", d2.getRelClass());
		assertEquals("hasAuthor", d2.getRelMetadata().getSemantics().getClassid());
		assertEquals("hasAuthor", d2.getRelMetadata().getSemantics().getClassname());

		FieldDescriptor fd = Authorship.getDescriptor().findFieldByName("ranking");
		assertEquals(d1.getSubRel().getField(fd), d2.getSubRel().getField(fd));
	}

	@Test
	public void testGetCF() {
		assertEquals("personResult_authorship_isAuthorOf", OafRelDecoder.getCFQ(RelType.personResult, SubRelType.authorship, Authorship.RelName.isAuthorOf));
		assertEquals("personResult_authorship_isAuthorOf", OafRelDecoder.getCFQ(RelType.personResult, SubRelType.authorship, "isAuthorOf"));
	}

}
