package org.eclipse.osbp.utils.common.test;

import static org.junit.Assert.*;

import org.eclipse.osbp.dsl.semantic.dto.util.NamingConventionsUtil;
import org.eclipse.osbp.utils.common.EntityUtils;
import org.junit.Before;
import org.junit.Test;

public class EntityUtilsTest {

	private String qualifiedEntityName;
	private String qualifiedDtoName;
//	private String qualifiedEnumName;
//	private String qualifiedEnumDtoName;
	private String entityName;
	private String pckgEntity;
	private String dtoName;
	private String pckgDto;

	@Before
	public void initialize(){
		entityName = "Mcategory";
		pckgEntity = "org.eclipse.osbp.foodmart.entities";
		dtoName = "McategoryDto";
		pckgDto = "org.eclipse.osbp.foodmart.dtos";
		qualifiedEntityName = "org.eclipse.osbp.foodmart.entities.Mcategory";
		qualifiedDtoName = "org.eclipse.osbp.foodmart.dtos.McategoryDto";
//		qualifiedEnumName = "org.eclipse.osbp.foodmart.entities.MEnum";
//		qualifiedEnumDtoName = "org.eclipse.osbp.foodmart.dtos.MEnum";
	}
	
	@Test
	public void testGetQualifiedDtoNameForQualifiedEntityName() {
		String qualifiedDtoName = EntityUtils.getQualifiedDtoNameForQualifiedEntityName(qualifiedEntityName);
		assertEquals(this.qualifiedDtoName, qualifiedDtoName);
//		String qualifiedEnumDtoName = EntityUtils.getQualifiedDtoNameForQualifiedEntityName(qualifiedEntityName);
//		assertEquals(this.qualifiedEnumDtoName, qualifiedEnumDtoName);
		String dtoName = NamingConventionsUtil.toDtoName(entityName);
		assertEquals(this.dtoName, dtoName);
		String pckgDto = NamingConventionsUtil.toDtoPackage(pckgEntity);
		assertEquals(this.pckgDto, pckgDto);
	}

}
