package de.axone.web.rest;
import static org.assertj.core.api.Assertions.*;
import static org.testng.Assert.*;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.testng.annotations.Test;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import de.axone.web.rest.Validator.ValidatorError;
import de.axone.web.rest.Validator.ValidatorResult;
import de.axone.web.rest.Validator.ValidatorResult.Severity;
import de.axone.web.rest.Validator.ValidatorResultImpl;
import de.axone.web.rest.Validator.ValidatorResultList;
@Test( groups = "tools.rest" )
public class Validator2Test {
@SuppressWarnings( "unchecked" )
public void testValidatorResult() {
ValidatorResultImpl res = new ValidatorResultImpl();
res.error( "field", "error-code" );
res.setInfo( "info" );
res.warn( "field2", "warn-code" );
ValidatorResult sub = res.descent( "sub" );
sub.info( "sub-field", "info-code" );
ValidatorResultList list = res.descentList( "list" );
ValidatorResult sub1 = list.descent( 1 );
sub1.info( "in-list1", "info" );
ValidatorResult sub2 = list.descent( 2 );
sub2.info( "in-list2", "info" );
sub2.error( "in-list2-2", "error" );
Map<String,Object> sim = new HashMap<String,Object>();
sim.put( "field", "blah" );
sim.put( "sub", new HashMap<String,Object>() );
List<Object> theList = new LinkedList<>();
theList.add( new HashMap<String,Object>() );
theList.add( new HashMap<String,Object>() );
sim.put( "list", theList );
res.mergeInto( sim );
ObjectMapper mapper = new ObjectMapper();
mapper.enable( SerializationFeature.INDENT_OUTPUT );
//E.rr( mapper.writeValueAsString( sim ) );
assertEquals( sim.get( "field" ), "blah" );
Map<String,Object> errors = (Map<String,Object>) sim.get( Validator.ERROR_KEY );
assertNotNull( errors );
assertTrue( errors.containsKey( "field" ) );
assertTrue( errors.containsKey( "field2" ) );
Map<String,Object> simSub = (Map<String,Object>) sim.get( "sub" );
assertNotNull( simSub );
errors = (Map<String,Object>) simSub.get( Validator.ERROR_KEY );
assertNotNull( errors );
assertTrue( errors.containsKey( "sub-field" ) );
List<Map<String,Object>> simList = (List<Map<String,Object>>) sim.get( "list" );
assertNotNull( simList );
assertEquals( simList.size(), 2 );
Map<String,Object> simListItem = simList.get( 0 );
assertFalse( simListItem.containsKey( Validator.ERROR_KEY ) );
simListItem = simList.get( 1 );
assertTrue( simListItem.containsKey( Validator.ERROR_KEY ) );
assertError( simListItem.get( Validator.ERROR_KEY ), "in-list1", Severity.INFO, "info", null );
List<Map<String,String>> asList = new LinkedList<>();
res.writeInto( "", asList );
}
private static void assertError( Object o, String field, Severity severity, String code, String info ){
assertThat( o ).isInstanceOf( Map.class );
@SuppressWarnings( "unchecked" )
Map<String,ValidatorError> err = (Map<String,ValidatorError>)o;
assertThat( err ).containsKey( field );
ValidatorError vErr = err.get( field );
assertEquals( vErr.getSeverity(), severity );
assertEquals( vErr.getCode(), code );
assertEquals( vErr.getInfo(), info );
}
}