/* 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.flowable.editor.language;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.Arrays;

import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.IntermediateCatchEvent;
import org.flowable.bpmn.model.ReceiveTask;
import org.flowable.bpmn.model.SignalEventDefinition;
import org.flowable.bpmn.model.SubProcess;
import org.flowable.bpmn.model.UserTask;
import org.junit.jupiter.api.Test;

public class CompleteConverterTest extends AbstractConverterTest {

    @Test
    public void convertJsonToModel() throws Exception {
        BpmnModel bpmnModel = readJsonFile();
        validateModel(bpmnModel);
    }

    @Test
    public void doubleConversionValidation() throws Exception {
        BpmnModel bpmnModel = readJsonFile();
        bpmnModel = convertToJsonAndBack(bpmnModel);
        validateModel(bpmnModel);
    }

    @Override
    protected String getResource() {
        return "test.completemodel.json";
    }

    private void validateModel(BpmnModel model) {
        FlowElement flowElement = model.getMainProcess().getFlowElement("userTask1", true);
        assertThat(flowElement).isNotNull();
        assertThat(flowElement).isInstanceOf(UserTask.class);
        assertThat(flowElement.getId()).isEqualTo("userTask1");

        flowElement = model.getMainProcess().getFlowElement("catchsignal", true);
        assertThat(flowElement).isNotNull();
        assertThat(flowElement).isInstanceOf(IntermediateCatchEvent.class);
        assertThat(flowElement.getId()).isEqualTo("catchsignal");
        IntermediateCatchEvent catchEvent = (IntermediateCatchEvent) flowElement;
        assertThat(catchEvent.getEventDefinitions()).hasSize(1);
        assertThat(catchEvent.getEventDefinitions().get(0)).isInstanceOf(SignalEventDefinition.class);
        SignalEventDefinition signalEvent = (SignalEventDefinition) catchEvent.getEventDefinitions().get(0);
        assertThat(signalEvent.getSignalRef()).isEqualTo("testSignal");

        flowElement = model.getMainProcess().getFlowElement("subprocess", true);
        assertThat(flowElement).isNotNull();
        assertThat(flowElement).isInstanceOf(SubProcess.class);
        assertThat(flowElement.getId()).isEqualTo("subprocess");
        SubProcess subProcess = (SubProcess) flowElement;

        flowElement = subProcess.getFlowElement("receiveTask");
        assertThat(flowElement).isNotNull();
        assertThat(flowElement).isInstanceOf(ReceiveTask.class);
        assertThat(flowElement.getId()).isEqualTo("receiveTask");

        assertThat(model.getMainProcess().getCandidateStarterUsers()).isEqualTo(Arrays.asList("user1", "user2"));
        assertThat(model.getMainProcess().getCandidateStarterGroups()).isEqualTo(Arrays.asList("group1", "group2"));
    }
}

@@ -173,17 +173,16 @@
 se at%0A *
- 
 %0A *     
@@ -227,17 +227,16 @@
 E-2.0%0A *
- 
 %0A * Unle
@@ -655,34 +655,8 @@
 t;%0A%0A
-import java.util.Arrays;%0A%0A
 impo
@@ -3185,39 +3185,31 @@
 sers()).
-isEqualTo(Arrays.asList
+containsExactly
 (%22user1%22
@@ -3218,17 +3218,16 @@
 %22user2%22)
-)
 ;%0A      
@@ -3295,31 +3295,23 @@
 ()).
-isEqualTo(Arrays.asList
+containsExactly
 (%22gr
@@ -3326,17 +3326,16 @@
 group2%22)
-)
 ;%0A    %7D%0A

Use assertj fluent style in flowable-json-converter module. All test files in the `flowable-json-converter` module.