@SuppressWarnings("ConstantConditions") @Test void testToAttributes() { String id = "id"; String name = "name"; String type = "string"; String parentId = "parentId"; EditorAttributeIdentifier editorParentAttributeIdentifier = EditorAttributeIdentifier.create(parentId, "label"); String refEntityTypeId = "refId"; EditorEntityTypeIdentifier editorRefEntityType = EditorEntityTypeIdentifier.create(refEntityTypeId, "label"); boolean cascadeDelete = false; EditorAttributeIdentifier editorMappedByAttribute = EditorAttributeIdentifier.create("mappedBy", "mappedByLabel"); EditorSort editorSort = mock(EditorSort.class); String expression = "expression"; boolean nullable = false; boolean auto = false; boolean visible = false; String label = "label"; String i18nLabelLangEn = "en"; String i18nLabelValue = "en label"; Map<String, String> i18nLabel = singletonMap(i18nLabelLangEn, i18nLabelValue); String description = "description"; String i18nDescriptionLangEn = "en"; String i18nDescriptionValue = "en description"; Map<String, String> i18nDescription = singletonMap(i18nDescriptionLangEn, i18nDescriptionValue); boolean aggregatable = false; Long rangeMin = 5L; Long rangeMax = 10L; boolean readonly = false; boolean unique = false; @SuppressWarnings("unchecked") ImmutableList<EditorTagIdentifier> editorTagIdentifiers = mock(ImmutableList.class); String nullableExpression = "nullableExpression"; String visibleExpression = "visibleExpression"; String validationExpression = "validationExpression"; String defaultValue = "defaultValue"; Integer sequenceNumber = 1; Attribute parentAttribute = mock(Attribute.class); when(attributeReferenceMapper.toAttributeReference(editorParentAttributeIdentifier)) .thenReturn(parentAttribute); EntityType refEntityType = mock(EntityType.class); when(entityTypeReferenceMapper.toEntityTypeReference(refEntityTypeId)) .thenReturn(refEntityType); Attribute mappedByAttribute = mock(Attribute.class); when(attributeReferenceMapper.toAttributeReference(editorMappedByAttribute)) .thenReturn(mappedByAttribute); Sort sort = mock(Sort.class); when(sortMapper.toSort(editorSort)).thenReturn(sort); @SuppressWarnings("unchecked") Iterable<Tag> tags = mock(Iterable.class); when(tagMapper.toTagReferences(editorTagIdentifiers)).thenReturn(tags); String entityId = "entityId"; EntityType entityType = mock(EntityType.class); when(entityTypeReferenceMapper.toEntityTypeReference(entityId)).thenReturn(entityType); Attribute attr = when(mock(Attribute.class).getIdentifier()).thenReturn(id).getMock(); Attribute parentAttr = when(mock(Attribute.class).getIdentifier()).thenReturn(parentId).getMock(); when(attributeFactory.create()).thenReturn(attr, parentAttr); EditorEntityType editorEntityType = when(mock(EditorEntityType.class).getId()).thenReturn(entityId).getMock(); EditorAttributeIdentifier editorIdAttributeIdentifier = EditorAttributeIdentifier.create(id, label); when(editorEntityType.getIdAttribute()).thenReturn(editorIdAttributeIdentifier); when(editorEntityType.getLabelAttribute()).thenReturn(editorIdAttributeIdentifier); when(editorEntityType.getLookupAttributes()) .thenReturn(singletonList(editorIdAttributeIdentifier)); EditorAttribute editorAttribute = EditorAttribute.create( id, name, type, editorParentAttributeIdentifier, editorRefEntityType, cascadeDelete, editorMappedByAttribute, editorSort, expression, nullable, auto, visible, label, i18nLabel, description, i18nDescription, aggregatable, of("option0"), rangeMin, rangeMax, readonly, unique, editorTagIdentifiers, nullableExpression, visibleExpression, validationExpression, defaultValue, sequenceNumber); EditorAttribute editorParentAttribute = EditorAttribute.create( parentId, name, type, null, editorRefEntityType, cascadeDelete, editorMappedByAttribute, editorSort, expression, nullable, auto, visible, label, i18nLabel, description, i18nDescription, aggregatable, of("option0"), rangeMin, rangeMax, readonly, unique, editorTagIdentifiers, nullableExpression, visibleExpression, validationExpression, defaultValue, sequenceNumber); ImmutableList<Attribute> attributes = copyOf( attributeMapper.toAttributes( of(editorAttribute, editorParentAttribute), editorEntityType)); assertEquals(2, attributes.size()); Attribute attribute = attributes.get(0); verify(attribute).setIdentifier(id); verify(attribute).setName(name); verify(attribute).setEntity(entityType); verify(attribute).setSequenceNumber(0); verify(attribute).setDataType(STRING); verify(attribute).setIdAttribute(true); verify(attribute).setLabelAttribute(true); verify(attribute).setLookupAttributeIndex(0); verify(attribute).setRefEntity(refEntityType); verify(attribute).setCascadeDelete(false); verify(attribute).setMappedBy(mappedByAttribute); verify(attribute).setOrderBy(sort); verify(attribute).setExpression(expression); verify(attribute).setNillable(nullable); verify(attribute).setAuto(auto); verify(attribute).setVisible(visible); verify(attribute).setLabel(label); verify(attribute).setLabel(i18nLabelLangEn, i18nLabelValue); verify(attribute).setLabel("nl", null); verify(attribute).setLabel("de", null); verify(attribute).setLabel("es", null); verify(attribute).setLabel("it", null); verify(attribute).setLabel("pt", null); verify(attribute).setLabel("fr", null); verify(attribute).setLabel("xx", null); verify(attribute).setDescription(description); verify(attribute).setDescription(i18nDescriptionLangEn, i18nDescriptionValue); verify(attribute).setDescription("nl", null); verify(attribute).setDescription("de", null); verify(attribute).setDescription("es", null); verify(attribute).setDescription("it", null); verify(attribute).setDescription("pt", null); verify(attribute).setDescription("fr", null); verify(attribute).setDescription("xx", null); verify(attribute).setAggregatable(aggregatable); verify(attribute).setEnumOptions(of("option0")); verify(attribute).setRangeMin(rangeMin); verify(attribute).setRangeMax(rangeMax); verify(attribute).setReadOnly(readonly); verify(attribute).setUnique(unique); verify(attribute).setTags(tags); verify(attribute).setNullableExpression(nullableExpression); verify(attribute).setVisibleExpression(visibleExpression); verify(attribute).setValidationExpression(validationExpression); verify(attribute).setDefaultValue(defaultValue); verify(attribute).getIdentifier(); verify(attribute).setParent(parentAttr); verify(attributes.get(1)).setIdentifier(parentId); verifyNoMoreInteractions(attribute); }
Iterable<Attribute> toAttributes( List<EditorAttribute> editorAttributes, EditorEntityType editorEntityType) { removeCompoundOrphans(editorAttributes); Map<String, Attribute> attributeMap = IntStream.range(0, editorAttributes.size()) .mapToObj(i -> toAttribute(i, editorAttributes.get(i), editorEntityType)) .collect(toLinkedMap(Attribute::getIdentifier, Function.identity())); return injectAttributeParents(attributeMap, editorAttributes); }
AttributeMapper { Iterable<Attribute> toAttributes( List<EditorAttribute> editorAttributes, EditorEntityType editorEntityType) { removeCompoundOrphans(editorAttributes); Map<String, Attribute> attributeMap = IntStream.range(0, editorAttributes.size()) .mapToObj(i -> toAttribute(i, editorAttributes.get(i), editorEntityType)) .collect(toLinkedMap(Attribute::getIdentifier, Function.identity())); return injectAttributeParents(attributeMap, editorAttributes); } }
AttributeMapper { Iterable<Attribute> toAttributes( List<EditorAttribute> editorAttributes, EditorEntityType editorEntityType) { removeCompoundOrphans(editorAttributes); Map<String, Attribute> attributeMap = IntStream.range(0, editorAttributes.size()) .mapToObj(i -> toAttribute(i, editorAttributes.get(i), editorEntityType)) .collect(toLinkedMap(Attribute::getIdentifier, Function.identity())); return injectAttributeParents(attributeMap, editorAttributes); } AttributeMapper(
      AttributeFactory attributeFactory,
      TagMapper tagMapper,
      EntityTypeReferenceMapper entityTypeReferenceMapper,
      AttributeReferenceMapper attributeReferenceMapper,
      SortMapper sortMapper); }
AttributeMapper { Iterable<Attribute> toAttributes( List<EditorAttribute> editorAttributes, EditorEntityType editorEntityType) { removeCompoundOrphans(editorAttributes); Map<String, Attribute> attributeMap = IntStream.range(0, editorAttributes.size()) .mapToObj(i -> toAttribute(i, editorAttributes.get(i), editorEntityType)) .collect(toLinkedMap(Attribute::getIdentifier, Function.identity())); return injectAttributeParents(attributeMap, editorAttributes); } AttributeMapper(
      AttributeFactory attributeFactory,
      TagMapper tagMapper,
      EntityTypeReferenceMapper entityTypeReferenceMapper,
      AttributeReferenceMapper attributeReferenceMapper,
      SortMapper sortMapper); EditorAttribute createEditorAttribute(); }
AttributeMapper { Iterable<Attribute> toAttributes( List<EditorAttribute> editorAttributes, EditorEntityType editorEntityType) { removeCompoundOrphans(editorAttributes); Map<String, Attribute> attributeMap = IntStream.range(0, editorAttributes.size()) .mapToObj(i -> toAttribute(i, editorAttributes.get(i), editorEntityType)) .collect(toLinkedMap(Attribute::getIdentifier, Function.identity())); return injectAttributeParents(attributeMap, editorAttributes); } AttributeMapper(
      AttributeFactory attributeFactory,
      TagMapper tagMapper,
      EntityTypeReferenceMapper entityTypeReferenceMapper,
      AttributeReferenceMapper attributeReferenceMapper,
      SortMapper sortMapper); EditorAttribute createEditorAttribute();  }