package com.constellio.model.api.impl.schemas.validation.impl;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
import org.joda.time.LocalDateTime;
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.ConfigProvider;
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.frameworks.validation.ValidationErrors;
import com.constellio.model.services.records.RecordProvider;
import com.constellio.model.services.records.RecordValidatorParams;
import com.constellio.sdk.tests.ConstellioTest;
public class CreationDateIsBeforeOrEqualToLastModificationDateValidatorTest extends ConstellioTest {
@Mock Record record;
LocalDateTime date, dateAfter, dateBefore;
@Mock MetadataSchemaTypes types;
@Mock Metadata creationDate, modificationDate;
@Mock ValidationErrors validationErrors;
@Mock MetadataSchema schema;
@Mock ConfigProvider configProvider;
@Mock RecordProvider recordProvider;
SimpleDateFormat sdf = new SimpleDateFormat();
CreationDateIsBeforeOrEqualToLastModificationDateValidator validator;
@Before
public void setUp()
throws Exception {
validator = new CreationDateIsBeforeOrEqualToLastModificationDateValidator();
dateBefore = new LocalDateTime(2014, 7, 6, 23, 59, 59);
date = new LocalDateTime(2014, 7, 7, 0, 0, 0);
dateAfter = new LocalDateTime(2014, 7, 7, 0, 0, 1);
when(schema.getMetadata("creationDate")).thenReturn(creationDate);
when(schema.getMetadata("modificationDate")).thenReturn(modificationDate);
}
@Test
public void whenModificationDateIsBeforeCreationDateThenValidationMessage()
throws Exception {
when(record.get(creationDate)).thenReturn(date);
when(record.get(modificationDate)).thenReturn(dateBefore);
RecordValidatorParams params = new RecordValidatorParams(record, types, schema, validator, validationErrors,
configProvider, recordProvider);
validator.validate(params);
Map<String, Object> parameters = new HashMap<>();
parameters.put(CreationDateIsBeforeOrEqualToLastModificationDateValidator.CREATION_DATE_MESSAGE_PARAM, date.toString());
parameters.put(CreationDateIsBeforeOrEqualToLastModificationDateValidator.MODIFICATION_DATE_MESSAGE_PARAM,
dateBefore.toString());
verify(validationErrors).add(CreationDateIsBeforeOrEqualToLastModificationDateValidator.class,
CreationDateIsBeforeOrEqualToLastModificationDateValidator.CREATION_DATE_IS_AFTER_MODIFICATION_DATE, parameters);
}
@Test
public void whenModificationDateIsEqualCreationDateThenValidationMessage()
throws Exception {
when(record.get(creationDate)).thenReturn(date);
when(record.get(modificationDate)).thenReturn(date);
RecordValidatorParams params = new RecordValidatorParams(record, types, schema, validator, validationErrors,
configProvider, recordProvider);
validator.validate(params);
verifyZeroInteractions(validationErrors);
}
@Test
public void whenModificationDateIsAfterCreationDateThenValidationMessage()
throws Exception {
when(record.get(creationDate)).thenReturn(date);
when(record.get(modificationDate)).thenReturn(dateAfter);
RecordValidatorParams params = new RecordValidatorParams(record, types, schema, validator, validationErrors,
configProvider, recordProvider);
validator.validate(params);
verifyZeroInteractions(validationErrors);
}
}