// Path: src/main/java/org/jboss/elasticsearch/tools/content/RESTCallPreprocessor.java
// public static enum HttpMethodType {
//     GET, POST;
// }
// 
// Path: src/main/java/org/jboss/elasticsearch/tools/content/RESTCallPreprocessor.java
// public static final class HttpResponseContent {
//     public String contentType;
//     public byte[] content;
// 
//     public HttpResponseContent(String contentType, byte[] content) {
//         super();
//         this.contentType = contentType;
//         this.content = content;
//     }
// 
//     @Override
//     public String toString() {
//         return "HttpResponseContent [contentType=" + contentType + ", content=" + content != null ? new String(content) : "" + "]";
//     }
// 
// }
// 
// Path: src/test/java/org/jboss/elasticsearch/tools/content/testtools/TestUtils.java
// public abstract class TestUtils {
// 
// 	/**
// 	 * Assert passed string is same as contnt of given file loaded from classpath.
// 	 * 
// 	 * @param expectedFilePath path to file inside classpath
// 	 * @param actual content to assert
// 	 * @throws IOException
// 	 */
// 	public static void assertStringFromClasspathFile(String expectedFilePath, String actual) throws IOException {
// 		Assert.assertEquals(readStringFromClasspathFile(expectedFilePath), actual);
// 	}
// 
// 	/**
// 	 * Read file from classpath into String. UTF-8 encoding expected.
// 	 * 
// 	 * @param filePath in classpath to read data from.
// 	 * @return file content.
// 	 * @throws IOException
// 	 */
// 	public static String readStringFromClasspathFile(String filePath) throws IOException {
// 		StringWriter stringWriter = new StringWriter();
// 		IOUtils.copy(TestUtils.class.getResourceAsStream(filePath), stringWriter, "UTF-8");
// 		return stringWriter.toString();
// 	}
// 
// 	/**
// 	 * Read JSON file from classpath into Map of Map structure.
// 	 * 
// 	 * @param filePath path in classpath pointing to JSON file to read
// 	 * @return parsed JSON file
// 	 * @throws SettingsException
// 	 */
// 	public static Map<String, Object> loadJSONFromClasspathFile(String filePath) throws SettingsException {
// 		XContentParser parser = null;
// 		try {
// 			parser = XContentFactory.xContent(XContentType.JSON).createParser(TestUtils.class.getResourceAsStream(filePath));
// 			return parser.mapAndClose();
// 		} catch (IOException e) {
// 			throw new SettingsException(e.getMessage(), e);
// 		} finally {
// 			if (parser != null)
// 				parser.close();
// 		}
// 	}
// 
// }


import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.elasticsearch.common.settings.SettingsException;
import org.elasticsearch.common.xcontent.support.XContentMapValues;
import org.jboss.elasticsearch.tools.content.RESTCallPreprocessor.HttpMethodType;
import org.jboss.elasticsearch.tools.content.RESTCallPreprocessor.HttpResponseContent;
import org.jboss.elasticsearch.tools.content.testtools.TestUtils;
import org.junit.Test;
import junit.framework.Assert;
        //we also test JSON encoding there!!
        data.put("val", "aha\" aha");
        StructureUtils.putValueIntoMapOfMaps(data, "val2.val", "jo \\ jo");
        Assert.assertEquals("{ \"test\" : \"aha\\\" aha\", \"test2\":\"jo \\\\ jo\"}", tested.prepareContent(data ));
        
    }
    
    @Test
    public void prepareUrl(){
        RESTCallPreprocessor tested = getTested();
        tested.request_url = "http://test.org/api/method?param1={val}&param2={val2.val}";
        
        Assert.assertEquals("http://test.org/api/method?param1=&param2=", tested.prepareUrl(null));
        Map<String, Object> data = new HashMap<>();
        //we also test URL encoding there!!
        data.put("val", "aha&aha");
        StructureUtils.putValueIntoMapOfMaps(data, "val2.val", "jo&jo");
        Assert.assertEquals("http://test.org/api/method?param1=aha%26aha&param2=jo%26jo", tested.prepareUrl(data));
    }
    
    @SuppressWarnings("unchecked")
    @Test
    public void processResponse_no_response_data() throws Exception{
        RESTCallPreprocessor tested = getTested();
        tested.responseMapping = (List<Map<String, String>>) TestUtils.loadJSONFromClasspathFile("/RESTCallPreprocessor_settings_correct_with_defaults.json").get(RESTCallPreprocessor.CFG_RESPONSE_MAPPING);
        
        
        Map<String, Object> data = new HashMap<>();
        
        byte[] content = new byte[]{};
// Path: src/main/java/org/jboss/elasticsearch/tools/content/RESTCallPreprocessor.java
// public static enum HttpMethodType {
//     GET, POST;
// }
// 
// Path: src/main/java/org/jboss/elasticsearch/tools/content/RESTCallPreprocessor.java
// public static final class HttpResponseContent {
//     public String contentType;
//     public byte[] content;
// 
//     public HttpResponseContent(String contentType, byte[] content) {
//         super();
//         this.contentType = contentType;
//         this.content = content;
//     }
// 
//     @Override
//     public String toString() {
//         return "HttpResponseContent [contentType=" + contentType + ", content=" + content != null ? new String(content) : "" + "]";
//     }
// 
// }
// 
// Path: src/test/java/org/jboss/elasticsearch/tools/content/testtools/TestUtils.java
// public abstract class TestUtils {
// 
// 	/**
// 	 * Assert passed string is same as contnt of given file loaded from classpath.
// 	 * 
// 	 * @param expectedFilePath path to file inside classpath
// 	 * @param actual content to assert
// 	 * @throws IOException
// 	 */
// 	public static void assertStringFromClasspathFile(String expectedFilePath, String actual) throws IOException {
// 		Assert.assertEquals(readStringFromClasspathFile(expectedFilePath), actual);
// 	}
// 
// 	/**
// 	 * Read file from classpath into String. UTF-8 encoding expected.
// 	 * 
// 	 * @param filePath in classpath to read data from.
// 	 * @return file content.
// 	 * @throws IOException
// 	 */
// 	public static String readStringFromClasspathFile(String filePath) throws IOException {
// 		StringWriter stringWriter = new StringWriter();
// 		IOUtils.copy(TestUtils.class.getResourceAsStream(filePath), stringWriter, "UTF-8");
// 		return stringWriter.toString();
// 	}
// 
// 	/**
// 	 * Read JSON file from classpath into Map of Map structure.
// 	 * 
// 	 * @param filePath path in classpath pointing to JSON file to read
// 	 * @return parsed JSON file
// 	 * @throws SettingsException
// 	 */
// 	public static Map<String, Object> loadJSONFromClasspathFile(String filePath) throws SettingsException {
// 		XContentParser parser = null;
// 		try {
// 			parser = XContentFactory.xContent(XContentType.JSON).createParser(TestUtils.class.getResourceAsStream(filePath));
// 			return parser.mapAndClose();
// 		} catch (IOException e) {
// 			throw new SettingsException(e.getMessage(), e);
// 		} finally {
// 			if (parser != null)
// 				parser.close();
// 		}
// 	}
// 
// }


// Path: src/test/java/org/jboss/elasticsearch/tools/content/RESTCallPreprocessorTest.java
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.elasticsearch.common.settings.SettingsException;
import org.elasticsearch.common.xcontent.support.XContentMapValues;
import org.jboss.elasticsearch.tools.content.RESTCallPreprocessor.HttpMethodType;
import org.jboss.elasticsearch.tools.content.RESTCallPreprocessor.HttpResponseContent;
import org.jboss.elasticsearch.tools.content.testtools.TestUtils;
import org.junit.Test;
import junit.framework.Assert;

        //we also test JSON encoding there!!
        data.put("val", "aha\" aha");
        StructureUtils.putValueIntoMapOfMaps(data, "val2.val", "jo \\ jo");
        Assert.assertEquals("{ \"test\" : \"aha\\\" aha\", \"test2\":\"jo \\\\ jo\"}", tested.prepareContent(data ));
        
    }
    
    @Test
    public void prepareUrl(){
        RESTCallPreprocessor tested = getTested();
        tested.request_url = "http://test.org/api/method?param1={val}&param2={val2.val}";
        
        Assert.assertEquals("http://test.org/api/method?param1=&param2=", tested.prepareUrl(null));
        Map<String, Object> data = new HashMap<>();
        //we also test URL encoding there!!
        data.put("val", "aha&aha");
        StructureUtils.putValueIntoMapOfMaps(data, "val2.val", "jo&jo");
        Assert.assertEquals("http://test.org/api/method?param1=aha%26aha&param2=jo%26jo", tested.prepareUrl(data));
    }
    
    @SuppressWarnings("unchecked")
    @Test
    public void processResponse_no_response_data() throws Exception{
        RESTCallPreprocessor tested = getTested();
        tested.responseMapping = (List<Map<String, String>>) TestUtils.loadJSONFromClasspathFile("/RESTCallPreprocessor_settings_correct_with_defaults.json").get(RESTCallPreprocessor.CFG_RESPONSE_MAPPING);
        
        
        Map<String, Object> data = new HashMap<>();
        
        byte[] content = new byte[]{};
        HttpResponseContent response = new HttpResponseContent("ct", content );