package com.constellio.model.services.batch.actions;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
import com.constellio.model.services.records.RecordProvider;
import com.constellio.sdk.tests.ConstellioTest;
public class ChangeValueOfMetadataBatchProcessActionTest extends ConstellioTest {
String changedMetadataCode1 = "type_default_code1";
String changedMetadataCode2 = "type_default_code2";
@Mock Metadata changedMetadata1;
@Mock Metadata changedMetadata2;
@Mock MetadataSchemaTypes schemaTypes;
@Mock Record record1;
@Mock Record record2;
@Mock Record record3;
List<Record> batch;
Map<String, Object> metadataChangedValues;
ChangeValueOfMetadataBatchProcessAction action;
@Mock Object changedValue1;
@Mock Object changedValue2;
@Mock RecordProvider recordProvider;
@Before
public void setUp()
throws Exception {
metadataChangedValues = new HashMap<>();
metadataChangedValues.put(changedMetadataCode1, changedValue1);
metadataChangedValues.put(changedMetadataCode2, changedValue2);
action = new ChangeValueOfMetadataBatchProcessAction(metadataChangedValues);
batch = asList(record1, record2, record3);
when(record1.getId()).thenReturn(aString());
when(record2.getId()).thenReturn(aString());
when(record3.getId()).thenReturn(aString());
when(record1.getSchemaCode()).thenReturn("type_default");
when(record2.getSchemaCode()).thenReturn("type_default");
when(record3.getSchemaCode()).thenReturn("type_default");
when(schemaTypes.getMetadata(changedMetadataCode1)).thenReturn(changedMetadata1);
when(schemaTypes.getMetadata(changedMetadataCode2)).thenReturn(changedMetadata2);
}
@Test
public void whenGetParametersThenReturnMetadataChangedValues()
throws Exception {
Object[] parameters = action.getInstanceParameters();
assertThat(parameters).containsOnly(metadataChangedValues);
}
@Test
public void whenExecutingThenCreateTransactionSetForcedChangeFieldsForAllRecords()
throws Exception {
Transaction transaction = action.execute(batch, schemaTypes, recordProvider);
assertThat(transaction.getRecords()).containsOnly(record1, record2, record3);
for (Record record : batch) {
verify(record).set(changedMetadata1, changedValue1);
verify(record).set(changedMetadata2, changedValue2);
}
assertThat(transaction.isSkippingRequiredValuesValidation()).isTrue();
}
}