package org.ebayopensource.turmeric.tools.codegen;

import java.io.File;
import java.util.Properties;

import org.custommonkey.xmlunit.DifferenceEngine;
import org.custommonkey.xmlunit.XMLAssert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;


public class CommentsAddedToConfigTest extends AbstractServiceGeneratorTestCase{

@Rule public TestName name = new TestName();
	
	File destDir = null;
	File binDir = null;
	final String CONSUMER_PROPERTIES = "service_consumer_project.properties";


	
@Before
	
	public void init() throws Exception{
		
	testingdir.ensureEmpty();
	destDir = testingdir.getDir();
	binDir = testingdir.getFile("bin");
	File consumerProperty = null;
		consumerProperty =	createPropertyFile(destDir.getAbsolutePath(), CONSUMER_PROPERTIES);

		Properties consumerProps = new Properties();
		consumerProps.put("scpp_version","1.1");
		fillProperties(consumerProps, consumerProperty);
}


@Test
public void testCommentedElementsClientConfig() throws Exception{
	
	File path  = getCodegenQEDataFileInput("AccountService1.wsdl");
	
	
	String [] testArgs1 = {"-serviceName","AccountService",
			  "-genType","ClientConfig",	
			  "-wsdl",path.getAbsolutePath(),
			  "-consumerid","123",
			  "-interface","com.ebay.AccountService",
			  "-ccgn","marketplace",
			  "-sl","http://www.ebayopensource.com/services",
			  "-wl","http://www.ebayopensource.com/services?wsdl",
			  "-cn","AccountServiceConsumer",
			  "-environment","production",
			  "-dest",destDir.getAbsolutePath(),
			  "-src",destDir.getAbsolutePath(),
			  "-adminname","AccountService",
			  "-slayer","INTERMEDIATE",
			  "-bin",binDir.getAbsolutePath(),
			  "-scv","1.0.0",
			  "-pr",destDir.getAbsolutePath()};
	

	
	performDirectCodeGen(testArgs1, binDir);
	
	File genFile = new File(getClientConfigFile(destDir.getAbsolutePath(), "AccountService", "AccountServiceConsumer"));
	
	
	File goldFile = getCodegenQEDataFileInput("ClientConfig.xml");
	
	String genString = readFileAsString(genFile.getAbsolutePath());
	String goldString = readFileAsString(goldFile.getAbsolutePath());
	
	XMLAssert.assertXMLEqual(genString, goldString);
	
}


@Test
public void testCommentedElementsServiceConfig() throws Exception{
	
	File path  = getCodegenQEDataFileInput("AccountService1.wsdl");
	
	
	String [] testArgs1 = {"-serviceName","AccountService",
			  "-genType","ServerConfig",	
			  "-wsdl",path.getAbsolutePath(),
			  "-interface","com.ebayopensource.AccountService",
			  "-sicn","com.ebayopensource.impl.AccountServicesImpl",
			  "-scgn","marketplace",
			  "-dest",destDir.getAbsolutePath(),
			  "-src",destDir.getAbsolutePath(),
			  "-adminname","AccountService",
			  "-slayer","INTERMEDIATE",
			  "-bin",binDir.getAbsolutePath(),
			  "-scv","1.0.0",
			  "-pr",destDir.getAbsolutePath()};
	

	
	performDirectCodeGen(testArgs1, binDir);
	
	File genFile = new File(getServiceConfigFile(destDir.getAbsolutePath(), "AccountService"));
	
	
	File goldFile = getCodegenQEDataFileInput("ServiceConfig.xml");
	
	String genString = readFileAsString(genFile.getAbsolutePath());
	String goldString = readFileAsString(goldFile.getAbsolutePath());
	
	XMLAssert.assertXMLEqual(genString, goldString);
	
}



@Test
public void testCommentedElementsConfigAll() throws Exception{
	
	File path  = getCodegenQEDataFileInput("AccountService1.wsdl");
	
	
	String [] testArgs1 = {"-serviceName","AccountService",
			  "-genType","ConfigAll",	
			  "-wsdl",path.getAbsolutePath(),
			  //"-interface","org.ebayopensource.turmeric.common.v1.services.AccountService",
			  "-sl","http://www.ebayopensource.com/services",
			  "-wl","http://www.ebayopensource.com/services?wsdl",
			  "-cn","AccountServiceConsumer",
			  "-sicn","com.ebayopensource.impl.AccountServicesImpl",
			  "-environment","production",
			  "-ccgn","marketplace",
			  "-dest",destDir.getAbsolutePath(),
			  "-src",destDir.getAbsolutePath(),
			  "-adminname","AccountService",
			  "-slayer","INTERMEDIATE",
			  "-bin",binDir.getAbsolutePath(),
			  "-scv","1.0.0",
			  "-pr",destDir.getAbsolutePath()};
	

	
	performDirectCodeGen(testArgs1,binDir);
	
	File genFile = new File(getClientConfigFile(destDir.getAbsolutePath(), "AccountService", "AccountServiceConsumer"));
	
	
	File goldFile = getCodegenQEDataFileInput("ClientConfig2.xml");
	
	String genString = readFileAsString(genFile.getAbsolutePath());
	String goldString = readFileAsString(goldFile.getAbsolutePath());
	
	XMLAssert.assertXMLEqual(genString, goldString);
	
}

public String getClientConfigFile(String destDir,String serviceName,String consumerName){
	 
	 return destDir + File.separator +"gen-meta-src/META-INF/soa/client/config/"+consumerName+File.separator+ "production"+File.separator+serviceName+File.separator+"ClientConfig.xml";
	 
}

public String getServiceConfigFile(String destDir,String serviceName){
	 
	 return destDir + File.separator +"gen-meta-src/META-INF/soa/services/config/"+serviceName+"/ServiceConfig.xml";
	 
}
	
	
}
