/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.workbench.common.forms.serialization.impl;
import junit.framework.TestCase;
import org.apache.commons.lang3.StringUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.forms.fields.shared.fieldTypes.basic.BasicTypeFieldProvider;
import org.kie.workbench.common.forms.fields.shared.fieldTypes.basic.selectors.listBox.definition.EnumListBoxFieldDefinition;
import org.kie.workbench.common.forms.fields.shared.fieldTypes.relations.multipleSubform.definition.MultipleSubFormFieldDefinition;
import org.kie.workbench.common.forms.fields.shared.fieldTypes.relations.subForm.definition.SubFormFieldDefinition;
import org.kie.workbench.common.forms.fields.test.TestFieldManager;
import org.kie.workbench.common.forms.model.FieldDataType;
import org.kie.workbench.common.forms.model.FieldDefinition;
import org.kie.workbench.common.forms.model.FormDefinition;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.ext.layout.editor.api.editor.LayoutTemplate;
import static org.junit.Assert.*;
@RunWith(MockitoJUnitRunner.class)
public class FormDefinitionSerializerImplTest extends TestCase {
private TestFieldManager fieldManager;
private FormDefinitionSerializerImpl definitionSerializer;
private FormDefinition formDefinition;
@Before
public void initTest() {
fieldManager = new TestFieldManager();
definitionSerializer = new FormDefinitionSerializerImpl(new FieldSerializer(),
new FormModelSerializer());
formDefinition = new FormDefinition();
formDefinition.setId("testForm");
formDefinition.setName("testForm");
formDefinition.setLayoutTemplate(new LayoutTemplate());
for (BasicTypeFieldProvider provider : fieldManager.getAllBasicTypeProviders()) {
for (String type : provider.getSupportedTypes()) {
FieldDefinition field = provider.getFieldByType(new FieldDataType(type));
assertNotNull(field);
String fieldDescription = provider.getFieldTypeName() + "_" + type;
field.setName(fieldDescription);
field.setLabel(fieldDescription);
field.setStandaloneClassName(type);
field.setBinding(fieldDescription);
formDefinition.getFields().add(field);
}
}
SubFormFieldDefinition subForm = new SubFormFieldDefinition();
subForm.setLabel("SubForm");
subForm.setNestedForm("");
subForm.setBinding("model");
subForm.setStandaloneClassName("org.test.MyTestModel");
subForm.setBinding("SubForm");
formDefinition.getFields().add(subForm);
MultipleSubFormFieldDefinition multipleSubForm = new MultipleSubFormFieldDefinition();
multipleSubForm.setLabel("MultipleSubForm");
multipleSubForm.setCreationForm("");
multipleSubForm.setEditionForm("");
multipleSubForm.setStandaloneClassName("org.test.MyTestModel");
multipleSubForm.setBinding("MultipleSubForm");
formDefinition.getFields().add(multipleSubForm);
EnumListBoxFieldDefinition enumListBox = new EnumListBoxFieldDefinition();
enumListBox.setLabel("EnumListBox");
enumListBox.setBinding("EnumListBox");
enumListBox.setStandaloneClassName("org.test.MyTestModel");
formDefinition.getFields().add(enumListBox);
}
@Test
public void testFormSerialization() {
doSerializationTest();
}
protected String doSerializationTest() {
String serializedForm = definitionSerializer.serialize(formDefinition);
assertEquals(formDefinition.getFields().size(),
StringUtils.countMatches(serializedForm,
"\"code\""));
assertNotNull(serializedForm);
assertNotEquals(0,
serializedForm.length());
return serializedForm;
}
@Test
public void testFormDeSerialization() {
String serializedForm = doSerializationTest();
FormDefinition deSerializedForm = definitionSerializer.deserialize(serializedForm);
assertNotNull(deSerializedForm);
assertEquals(formDefinition.getFields().size(),
deSerializedForm.getFields().size());
for (FieldDefinition originalField : formDefinition.getFields()) {
FieldDefinition resultField = deSerializedForm.getFieldById(originalField.getId());
assertNotNull(resultField);
assertEquals(originalField.getClass(),
resultField.getClass());
assertEquals(originalField.getName(),
resultField.getName());
assertEquals(originalField.getLabel(),
resultField.getLabel());
assertEquals(originalField.getStandaloneClassName(),
resultField.getStandaloneClassName());
}
}
}