/*
* Copyright 2017 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.data.modeller.service.impl;
import java.util.Date;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.forms.fields.shared.fieldTypes.relations.multipleSubform.definition.MultipleSubFormFieldDefinition;
import org.kie.workbench.common.forms.fields.test.TestFieldManager;
import org.kie.workbench.common.forms.model.FieldDefinition;
import org.kie.workbench.common.screens.datamodeller.model.maindomain.MainDomainAnnotations;
import org.kie.workbench.common.services.datamodeller.core.Annotation;
import org.kie.workbench.common.services.datamodeller.core.DataObject;
import org.kie.workbench.common.services.datamodeller.core.ObjectProperty;
import org.kie.workbench.common.services.datamodeller.core.impl.AnnotationDefinitionImpl;
import org.kie.workbench.common.services.datamodeller.core.impl.AnnotationImpl;
import org.kie.workbench.common.services.datamodeller.core.impl.DataObjectImpl;
import org.mockito.runners.MockitoJUnitRunner;
import static org.junit.Assert.*;
@RunWith(MockitoJUnitRunner.class)
public class DataModellerFieldGeneratorTest extends AbstractDataObjectTest {
public static final String PACKAGE = "org.kie.workbench.common.forms.test";
public static final String DATA_OBJECT_NAME = "Test";
public static final String NESTED_MODEL_TYPE = PACKAGE + ".NestedModel";
public static final String MODEL_NAME = "test";
public static final int EXPECTED_FIELDS = 6;
protected DataModellerFieldGenerator generator;
@Before
public void initTest() {
generator = new DataModellerFieldGenerator(new TestFieldManager());
}
@Test
public void testBasicDataObject() {
DataObject dataObject = generateDataObject(false,
false);
checkGeneratedFields(dataObject,
generator.getFieldsFromDataObject(MODEL_NAME,
dataObject),
false);
}
@Test
public void testBasicDataObjectWithLabel() {
DataObject dataObject = generateDataObject(false,
true);
checkGeneratedFields(dataObject,
generator.getFieldsFromDataObject(MODEL_NAME,
dataObject),
true);
}
@Test
public void testDataObjectWithPersistence() {
DataObject dataObject = generateDataObject(true,
false);
checkGeneratedFields(dataObject,
generator.getFieldsFromDataObject(MODEL_NAME,
dataObject),
false);
}
@Test
public void testDataObjectWithPersistenceAndLabel() {
DataObject dataObject = generateDataObject(true,
true);
checkGeneratedFields(dataObject,
generator.getFieldsFromDataObject(MODEL_NAME,
dataObject),
true);
}
protected void checkGeneratedFields(DataObject dataObject,
List<FieldDefinition> fields,
boolean withLabels) {
assertNotNull(fields);
assertFalse(fields.isEmpty());
assertEquals(EXPECTED_FIELDS,
fields.size());
fields.forEach(fieldDefinition -> {
assertNotNull(fieldDefinition.getBinding());
ObjectProperty property = dataObject.getProperty(fieldDefinition.getBinding());
assertNotNull(property);
assertEquals(property.getClassName(),
fieldDefinition.getStandaloneClassName());
if (withLabels) {
assertEquals(LABEL_SUFFIX + property.getName(),
fieldDefinition.getLabel());
} else {
assertEquals(property.getName(),
fieldDefinition.getLabel());
}
if (property.isMultiple()) {
assertTrue(fieldDefinition instanceof MultipleSubFormFieldDefinition);
}
});
}
protected DataObject generateDataObject(boolean withPersistence,
boolean withLabels) {
DataObject result = new DataObjectImpl(PACKAGE,
DATA_OBJECT_NAME);
addProperty(result,
DataModellerFieldGenerator.SERIAL_VERSION_UID,
Long.class.getName(),
false,
false);
if (withPersistence) {
ObjectProperty property = addProperty(result,
"id",
Long.class.getName(),
false,
false);
property.addAnnotation(new AnnotationImpl(new AnnotationDefinitionImpl(DataModellerFieldGenerator.PERSISTENCE_ANNOTATION)));
}
addProperty(result,
"text",
String.class.getName(),
false,
withLabels);
addProperty(result,
"integer",
Integer.class.getName(),
false,
withLabels);
addProperty(result,
"date",
Date.class.getName(),
false,
withLabels);
addProperty(result,
"boolean",
Boolean.class.getName(),
false,
withLabels);
addProperty(result,
"model",
NESTED_MODEL_TYPE,
false,
withLabels);
addProperty(result,
"multipleModel",
NESTED_MODEL_TYPE,
true,
withLabels);
return result;
}
}