package com.constellio.model.services.records.validators; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.frameworks.validation.ValidationErrors; import com.constellio.model.services.records.RecordImplRuntimeException.RecordImplException_RecordCannotHaveTwoParents; import com.constellio.model.services.schemas.validators.MetadataChildOfValidator; import com.constellio.model.services.search.SearchServices; import com.constellio.sdk.tests.ConstellioTest; public class MetadataChildOfValidatorTest extends ConstellioTest { public static final String MULTIPLE_PARENTS = MetadataChildOfValidator.class.getName() + "_multipleParentForRecord"; @Mock Metadata metadata; @Mock Metadata parentMetadata; @Mock MetadataSchemaTypes schemaTypes; @Mock MetadataSchema schema; @Mock Record record; @Mock SearchServices searchServices; MetadataChildOfValidator validator; List<Metadata> validParents; List<Metadata> invalidParents; ValidationErrors validationErrors; @Before public void setUp() { List<Metadata> metadatas = new ArrayList<>(); metadatas.add(metadata); validParents = Arrays.asList(null, null, parentMetadata); invalidParents = Arrays.asList(null, parentMetadata, parentMetadata); when(record.getSchemaCode()).thenReturn("zeType_zeSchemaCode"); when(metadata.isChildOfRelationship()).thenReturn(true); when(record.getNonNullValueIn(validParents)).thenReturn(null); when(record.getNonNullValueIn(invalidParents)).thenThrow(RecordImplException_RecordCannotHaveTwoParents.class); when(metadata.getCode()).thenReturn("zeType_zeSchemaCode_zeCompleteCode"); when(schemaTypes.getSchema("zeType_zeSchemaCode")).thenReturn(schema); when(schema.getCode()).thenReturn("zeType_zeSchemaCode"); when(metadata.getType()).thenReturn(MetadataValueType.STRING); validator = new MetadataChildOfValidator(metadatas, schemaTypes); validationErrors = new ValidationErrors(); } @Test public void givenChildOfMetadataAndOneNotNullParentThenNoError() { when(schema.getParentReferences()).thenReturn(validParents); validator.validate(record, validationErrors); assertThat(validationErrors.getValidationErrors()).isEmpty(); } @Test public void givenChildOfMetadataAndTwoNotNullParentThenError() { when(schema.getParentReferences()).thenReturn(invalidParents); validator.validate(record, validationErrors); assertThat(validationErrors.getValidationErrors()).isNotEmpty(); assertThat(validationErrors.getValidationErrors().get(0).getCode()).isEqualTo(MULTIPLE_PARENTS); } }