public ContractInput toContractInput(final ContractInput parentInput) { contractInput = ProcessFactory.eINSTANCE.createContractInput(); contractInput.setName(field.getName()); contractInput.setType(toContractInputType()); contractInput.setMultiple(field != null && field.isCollection()); if (parentInput != null) { parentInput.getInputs().add(contractInput); } return contractInput; }
@Test public void should_create_operation_for_given_multiple_business_data_and_generated_contract_input() throws Exception { final SimpleField firstNameField = SimpleFieldBuilder.aStringField("firstName").build(); final SimpleFieldToContractInputMapping mapping = new SimpleFieldToContractInputMapping(firstNameField); final BusinessObjectModelRepositoryStore businessObjectStore = mock(BusinessObjectModelRepositoryStore.class); final BusinessObject bo = aBO("org.test.Employee").withField(firstNameField).build(); when(businessObjectStore.getBusinessObjectByQualifiedName("org.test.Employee")).thenReturn(bo); final RepositoryAccessor repositoryAccessor = mock(RepositoryAccessor.class); when(repositoryAccessor.getRepositoryStore(BusinessObjectModelRepositoryStore.class)) .thenReturn(businessObjectStore); final FieldToContractInputMappingOperationBuilder operationBuilder = mock(FieldToContractInputMappingOperationBuilder.class); final RootContractInputGenerator rootContractInputGenerator = new RootContractInputGenerator( "employeesInput", newArrayList(mapping), repositoryAccessor, operationBuilder, mock(FieldToContractInputMappingExpressionBuilder.class)); final BusinessObjectData businessObjectData = aBusinessData().withName("employees").withClassname("org.test.Employee").multiple().build(); rootContractInputGenerator.build(businessObjectData); final ArgumentCaptor<FieldToContractInputMapping> argumentCaptor = ArgumentCaptor.forClass(FieldToContractInputMapping.class); verify(operationBuilder).toOperation(eq(businessObjectData), argumentCaptor.capture()); final Field field = argumentCaptor.getValue().getField(); assertThat(field).isInstanceOf(RelationField.class); assertThat(field.getName()).isEqualTo("employeesInput"); assertThat(field.isCollection()).isTrue(); assertThat(((RelationField) field).getReference().getQualifiedName()) .isEqualTo("org.test.Employee"); assertThat(((RelationField) field).getType()).isEqualTo(RelationField.Type.COMPOSITION); }