/*
* 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.dynamic.client;
import com.google.gwtmockito.GwtMock;
import com.google.gwtmockito.GwtMockitoTestRunner;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.forms.dynamic.client.helper.MapModelBindingHelper;
import org.kie.workbench.common.forms.dynamic.client.init.FormHandlerGeneratorManager;
import org.kie.workbench.common.forms.dynamic.client.rendering.FieldLayoutComponent;
import org.kie.workbench.common.forms.dynamic.client.rendering.FieldRenderer;
import org.kie.workbench.common.forms.dynamic.client.rendering.renderers.relations.subform.widget.SubFormWidget;
import org.kie.workbench.common.forms.dynamic.client.test.TestDynamicFormRenderer;
import org.kie.workbench.common.forms.dynamic.service.shared.FormRenderingContext;
import org.kie.workbench.common.forms.dynamic.service.shared.FormRenderingContextGeneratorService;
import org.kie.workbench.common.forms.dynamic.service.shared.adf.DynamicFormModelGenerator;
import org.kie.workbench.common.forms.dynamic.test.model.Employee;
import org.kie.workbench.common.forms.dynamic.test.util.TestFormGenerator;
import org.kie.workbench.common.forms.model.FieldDefinition;
import org.kie.workbench.common.forms.processing.engine.handling.FieldChangeHandler;
import org.kie.workbench.common.forms.processing.engine.handling.FormHandler;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.uberfire.mocks.CallerMock;
import org.uberfire.mvp.Command;
import static org.mockito.Mockito.*;
@RunWith(GwtMockitoTestRunner.class)
public class DynamicFormRendererTest extends TestCase {
private FieldLayoutComponent component;
private FieldRenderer fieldRenderer;
@GwtMock
private SubFormWidget widget;
@Mock
private FieldChangeHandler changeHandler;
@Mock
private FormHandler formHandler;
@Mock
private MapModelBindingHelper helper;
private DynamicFormRenderer.DynamicFormRendererView view;
private FormRenderingContextGeneratorService formRenderingContextGeneratorService;
private CallerMock<FormRenderingContextGeneratorService> transformer;
private DynamicFormRenderer renderer;
private Employee employee = new Employee();
@Before
public void initTest() {
component = mock(FieldLayoutComponent.class);
view = mock(DynamicFormRenderer.DynamicFormRendererView.class);
fieldRenderer = mock(FieldRenderer.class);
formRenderingContextGeneratorService = mock(FormRenderingContextGeneratorService.class);
transformer = new CallerMock<FormRenderingContextGeneratorService>(formRenderingContextGeneratorService);
when(formRenderingContextGeneratorService.createContext(any(Employee.class))).thenAnswer(new Answer<FormRenderingContext>() {
@Override
public FormRenderingContext answer(InvocationOnMock invocationOnMock) throws Throwable {
return TestFormGenerator.getContextForEmployee(employee);
}
});
when(view.getFieldLayoutComponentForField(any(FieldDefinition.class))).thenReturn(component);
when(component.getFieldRenderer()).thenReturn(fieldRenderer);
when(fieldRenderer.getInputWidget()).thenReturn(widget);
FormHandlerGeneratorManager generatorManager = new FormHandlerGeneratorManager(context -> formHandler,
context -> formHandler);
renderer = new TestDynamicFormRenderer(view,
transformer,
generatorManager,
mock(DynamicFormModelGenerator.class));
renderer.init();
verify(view).setPresenter(renderer);
renderer.asWidget();
verify(view).asWidget();
}
@Test
public void testBaseBinding() {
doBind();
unBind();
}
@Test
public void testBindingAddingFieldChangeHandler() {
doBind();
renderer.addFieldChangeHandler(changeHandler);
renderer.addFieldChangeHandler("name",
changeHandler);
renderer.addFieldChangeHandler("address",
changeHandler);
verify(formHandler).addFieldChangeHandler(any());
verify(formHandler,
times(2)).addFieldChangeHandler(anyString(),
any());
unBind();
}
protected void doBind() {
Command callback = mock(Command.class);
renderer.renderDefaultForm(employee,
callback);
verify(callback).execute();
verify(view).render(any());
verify(view).bind();
verify(formHandler).setUp(any(Employee.class));
}
protected void unBind() {
renderer.isValid();
renderer.unBind();
verify(formHandler).clear();
verify(view).clear();
}
}