package io.monokkel.core;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import io.monokkel.domain.PageData;
import org.junit.Test;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
public class DataCleanerTest{
@Test
public void clean_withNestedCleanObject_expectSubFieldToBeCleaned(){
Map<String, Object> fieldsAndCleanExpressions = setupMap();
DataCleaner dataCleaner = new DataCleaner(fieldsAndCleanExpressions);
Map data = Maps.newHashMap();
data.put("fristobject","1 577");
final Map<String, Object> submap = new LinkedHashMap<>();
submap.put("object","1 577");
data.put("subobject",submap);
PageData pageData = new PageData(null,null,1L,null,null,null,data);
final PageData clean = dataCleaner.clean(pageData);
Map cleanedTransformed = clean.getTransformed();
final Map subObject = (Map)cleanedTransformed.get("subobject");
assertEquals("1577",subObject.get("object"));
}
@Test
public void clean_withNestedCleanObjectButNoneMatching_expectNothingToBeMatched(){
Map<String, Object> fieldsAndCleanExpressions = setupMap();
DataCleaner dataCleaner = new DataCleaner(fieldsAndCleanExpressions);
Map<String, Object> data = Maps.newHashMap();
data.put("nothingMatchedField","1 577");
final Map<String, Object> submap = new LinkedHashMap<>();
submap.put("nothingMatchedObject","1 577");
data.put("subobject",submap);
PageData pageData = new PageData(null,null,1L,null,null,null,data);
final PageData clean = dataCleaner.clean(pageData);
Map cleanedTransformed = clean.getTransformed();
final Map subObject = (Map)cleanedTransformed.get("subobject");
assertEquals(subObject.get("nothingMatchedObject"), "1 577");
}
@Test
@SuppressWarnings("unchecked")
public void clean_withMultiExpressions_expectPatternToClean(){
Map<String, Object> fieldsAndCleanExpressions = setupMultiExpressionMap();
DataCleaner dataCleaner = new DataCleaner(fieldsAndCleanExpressions);
Map data = Maps.newHashMap();
data.put("object","1 577pattern");
PageData pageData = new PageData(null,null,1L,null,null,null,data);
final PageData clean = dataCleaner.clean(pageData);
Map cleanedTransformed = clean.getTransformed();
assertEquals("1577",cleanedTransformed.get("object"));
}
@Test
public void clean_withMultiExpressionsContainingObjects_expectPatternToClean(){
Map<String, Object> fieldsAndCleanExpressions = setupMultiExpressionMap();
DataCleaner dataCleaner = new DataCleaner(fieldsAndCleanExpressions);
Map data = Maps.newHashMap();
data.put("object","1 577pattern");
PageData pageData = new PageData(null,null,1L,null,null,null,data);
final PageData clean = dataCleaner.clean(pageData);
Map cleanedTransformed = clean.getTransformed();
assertEquals("1577",cleanedTransformed.get("object"));
}
@Test
public void clean_withMultiExpressionsWithLongType_expectNotToCastTypeAndClean(){
Map<String, Object> fieldsAndCleanExpressions = setupMultiExpressionMap();
DataCleaner dataCleaner = new DataCleaner(fieldsAndCleanExpressions);
Map data = Maps.newHashMap();
data.put("object",1577);
PageData pageData = new PageData(null,null,1L,null,null,null,data);
final PageData clean = dataCleaner.clean(pageData);
Map cleanedTransformed = clean.getTransformed();
assertEquals(1577,cleanedTransformed.get("object"));
}
@Test
public void clean_withMultiExpressionsWithBooleanType_expectNotToCastTypeAndClean(){
Map<String, Object> fieldsAndCleanExpressions = setupMultiExpressionMap();
DataCleaner dataCleaner = new DataCleaner(fieldsAndCleanExpressions);
Map data = Maps.newHashMap();
data.put("object",true);
PageData pageData = new PageData(null,null,1L,null,null,null,data);
final PageData clean = dataCleaner.clean(pageData);
Map cleanedTransformed = clean.getTransformed();
assertEquals(true,cleanedTransformed.get("object"));
}
@Test
public void clean_withMultiExpressionsWithDoubleType_expectNotToCastTypeAndClean(){
Map<String, Object> fieldsAndCleanExpressions = setupMultiExpressionMap();
DataCleaner dataCleaner = new DataCleaner(fieldsAndCleanExpressions);
Map data = Maps.newHashMap();
data.put("object",1.0);
PageData pageData = new PageData(null,null,1L,null,null,null,data);
final PageData clean = dataCleaner.clean(pageData);
Map cleanedTransformed = clean.getTransformed();
assertEquals(1.0,cleanedTransformed.get("object"));
}
@Test
public void clean_withMultiSubExpressingsInSubObjects_expectPatternToClean(){
Map<String, Object> fieldsAndCleanExpressions = setupMultiExpressionMap();
DataCleaner dataCleaner = new DataCleaner(fieldsAndCleanExpressions);
Map data = Maps.newHashMap();
data.put("object","1 577pattern");
final Map<String, Object> submap = new LinkedHashMap<>();
submap.put("object","1 577pattern");
data.put("subobject",submap);
PageData pageData = new PageData(null,null,1L,null,null,null,data);
final PageData clean = dataCleaner.clean(pageData);
Map cleanedTransformed = clean.getTransformed();
final Map subobject = (Map)cleanedTransformed.get("subobject");
assertEquals("1577", subobject.get("object"));
}
private Map<String, Object> setupMultiExpressionMap() {
Map<String,Object> fieldsAndCleanExpressions = Maps.newHashMap();
// The hashmap is added to detect if the filtering work
final ArrayList subObjectList = Lists.newArrayList("\\s", "pattern",Maps.newHashMap());
fieldsAndCleanExpressions.put("object", subObjectList);
Map<String, Object> subMap = Maps.newHashMap();
subMap.put("object", subObjectList);
fieldsAndCleanExpressions.put("subobject",subMap);
return fieldsAndCleanExpressions;
}
private Map<String, Object> setupMap() {
Map<String,Object> fieldsAndCleanExpressions = Maps.newHashMap();
fieldsAndCleanExpressions.put("object","\\s");
final LinkedHashMap<String, Object> submap = new LinkedHashMap<>();
submap.put("object","\\s");
fieldsAndCleanExpressions.put("subobject", submap);
return fieldsAndCleanExpressions;
}
}