package io.github.ibuildthecloud.gdapi.validation; import static org.junit.Assert.*; import io.github.ibuildthecloud.gdapi.exception.ClientVisibleException; import io.github.ibuildthecloud.gdapi.factory.impl.SchemaFactoryImpl; import io.github.ibuildthecloud.gdapi.model.impl.FieldImpl; import io.github.ibuildthecloud.gdapi.model.impl.SchemaImpl; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.util.RequestUtils; import io.github.ibuildthecloud.gdapi.validation.ValidationHandler.ValidationContext; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; public class ValidationHandlerTest { @Test public void testNullableOption() { SchemaImpl schema = new SchemaImpl(); FieldImpl field = new FieldImpl(); field.setType("array[enum]"); field.setOptions(Arrays.asList("one", "two")); field.setCreate(true); field.setNullable(true); schema.getResourceFields().put("test", field); ApiRequest request = new ApiRequest(null, null); ValidationContext context = new ValidationContext(); ValidationHandler handler = new ValidationHandler(); Map<String, Object> input = new HashMap<String, Object>(); input.put("test", null); request.setRequestObject(input); handler.validateOperationField(schema, request, true, context); } @Test public void testListEnum() { SchemaImpl schema = new SchemaImpl(); FieldImpl field = new FieldImpl(); field.setType("array[enum]"); field.setOptions(Arrays.asList("one", "two")); field.setCreate(true); schema.getResourceFields().put("test", field); ApiRequest request = new ApiRequest(null, null); ValidationContext context = new ValidationContext(); ValidationHandler handler = new ValidationHandler(); Map<String, Object> input = new HashMap<String, Object>(); input.put("test", "three"); request.setRequestObject(input); try { handler.validateOperationField(schema, request, true, context); fail(); } catch (ClientVisibleException e) { assertEquals(ValidationErrorCodes.INVALID_OPTION, e.getApiError().getCode()); } input.put("test", "one"); handler.validateOperationField(schema, request, true, context); } @Test public void testCreateSubtype() { SchemaFactoryImpl factory = new SchemaFactoryImpl(); factory.getTypes().add(ParentType.class); factory.getTypes().add(SubType.class); factory.init(); ApiRequest request = new ApiRequest(null, null); ValidationContext context = new ValidationContext(); ValidationHandler handler = new ValidationHandler(); context.schemaFactory = factory; Map<String, Object> childType = new HashMap<String, Object>(); childType.put("testField", "abc"); childType.put("notWrite", "xyz"); Map<String, Object> input = new HashMap<String, Object>(); input.put("subType", childType); request.setRequestObject(input); handler.validateOperationField(factory.getSchema(ParentType.class), request, true, context); Map<String, Object> result = RequestUtils.toMap(request.getRequestObject()); @SuppressWarnings("unchecked") Map<String, Object> childData = (Map<String, Object>)result.get("subType"); assertTrue(childData != null); } @SuppressWarnings("unchecked") @Test public void testCreateArraySubtype() { SchemaFactoryImpl factory = new SchemaFactoryImpl(); factory.getTypes().add(ParentType.class); factory.getTypes().add(SubType.class); factory.init(); ApiRequest request = new ApiRequest(null, null); ValidationContext context = new ValidationContext(); ValidationHandler handler = new ValidationHandler(); context.schemaFactory = factory; Map<String, Object> childType = new HashMap<String, Object>(); childType.put("testField", "abc"); childType.put("notWrite", "xyz"); Map<String, Object> childType2 = new HashMap<String, Object>(); childType2.put("testField", "abc2"); childType2.put("notWrite", "xyz"); Map<String, Object> input = new HashMap<String, Object>(); input.put("subTypes", Arrays.asList(childType, childType2)); request.setRequestObject(input); handler.validateOperationField(factory.getSchema(ParentType.class), request, true, context); Map<String, Object> result = RequestUtils.toMap(request.getRequestObject()); List<Object> childData = (List<Object>)result.get("subTypes"); assertTrue(childData != null); assertEquals("abc", ((Map<String, Object>)childData.get(0)).get("testField")); assertEquals("abc2", ((Map<String, Object>)childData.get(1)).get("testField")); } }