package com.constellio.app.modules.es.services.mapping;
import static com.constellio.model.entities.schemas.MetadataValueType.BOOLEAN;
import static com.constellio.model.entities.schemas.MetadataValueType.DATE;
import static com.constellio.model.entities.schemas.MetadataValueType.DATE_TIME;
import static com.constellio.model.entities.schemas.MetadataValueType.STRING;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.entry;
import static org.assertj.core.api.Assertions.tuple;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import com.constellio.model.entities.Language;
import org.assertj.core.api.ListAssert;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.constellio.app.modules.es.connectors.spi.ConnectorEventObserver;
import com.constellio.app.modules.es.connectors.spi.ConnectorLogger;
import com.constellio.app.modules.es.connectors.spi.ConsoleConnectorLogger;
import com.constellio.app.modules.es.model.connectors.ConnectorDocument;
import com.constellio.app.modules.es.model.connectors.ConnectorInstance;
import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpDocument;
import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance;
import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbDocument;
import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbFolder;
import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbInstance;
import com.constellio.app.modules.es.services.ConnectorManager;
import com.constellio.app.modules.es.services.ESSchemasRecordsServices;
import com.constellio.app.modules.es.services.crawler.DefaultConnectorEventObserver;
import com.constellio.app.modules.es.services.mapping.ConnectorMappingServiceRuntimeException.ConnectorMappingServiceRuntimeException_InvalidArgument;
import com.constellio.app.modules.es.services.mapping.ConnectorMappingServiceRuntimeException.ConnectorMappingServiceRuntimeException_MetadataAlreadyExist;
import com.constellio.app.services.schemasDisplay.SchemasDisplayManager;
import com.constellio.data.dao.services.idGenerator.UUIDV1Generator;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.setups.Users;
public class ConnectorMappingServiceAcceptanceTest extends ConstellioTest {
private LocalDate date1 = new LocalDate();
private LocalDate date2 = date1.plusDays(2);
private LocalDateTime datetime1 = new LocalDateTime();
private LocalDateTime datetime2 = datetime1.plusDays(2);
ConnectorSmbInstance smbConnectorInstance;
ConnectorHttpInstance httpConnectorInstance;
ConnectorHttpInstance anotherHttpConnectorInstance;
String httpConnectorDocumentSchema;
String smbConnectorDocumentSchema;
String smbConnectorFolderSchema;
Users users = new Users();
ConnectorManager connectorManager;
ESSchemasRecordsServices es;
ConnectorMappingService service;
ConnectorLogger connectorLogger = new ConsoleConnectorLogger();
String httpDocumentType = ConnectorHttpDocument.SCHEMA_TYPE;
String smbDocumentType = ConnectorSmbDocument.SCHEMA_TYPE;
String smbFolderType = ConnectorSmbFolder.SCHEMA_TYPE;
ConnectorEventObserver eventObserver;
@Before
public void setUp()
throws Exception {
prepareSystem(withZeCollection().withConstellioESModule().withAllTest(users));
es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory());
service = new ConnectorMappingService(es);
connectorManager = es.getConnectorManager();
smbConnectorInstance = connectorManager.createConnector(es.newConnectorSmbInstance()
.setCode("smb").setTitle("Smb connector").setEnabled(false)
.setDomain("domain").setSeeds(asList("seeds")).setUsername("username").setPassword("password"));
httpConnectorInstance = connectorManager.createConnector(es.newConnectorHttpInstance()
.setCode("http").setTitle("Http connector").setEnabled(false)
.setSeeds("seeds").setIncludePatterns("username"));
anotherHttpConnectorInstance = connectorManager.createConnector(es.newConnectorHttpInstance()
.setCode("http2").setTitle("Http connector").setEnabled(false)
.setSeeds("seeds").setIncludePatterns("username"));
httpConnectorDocumentSchema = ConnectorHttpDocument.SCHEMA_TYPE + "_" + httpConnectorInstance.getId();
smbConnectorDocumentSchema = ConnectorSmbDocument.SCHEMA_TYPE + "_" + smbConnectorInstance.getId();
smbConnectorFolderSchema = ConnectorSmbFolder.SCHEMA_TYPE + "_" + smbConnectorInstance.getId();
}
@After
public void tearDown()
throws Exception {
if (eventObserver != null) {
eventObserver.close();
}
}
@Test
public void givenNewUndeclaredConnectorFieldReturnedForADocumentThenAppearsHasAvailableFieldsForTheType()
throws Exception {
List<ConnectorField> initialHttpConnectorFields = service
.getConnectorFields(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE);
List<ConnectorField> initialSmbConnectorFolderFields = service
.getConnectorFields(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE);
List<ConnectorField> initialSmbConnectorDocumentFields = service
.getConnectorFields(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE);
addConnectorFieldsToConnectorInstances();
getModelLayerFactory().newRecordServices().refresh(httpConnectorInstance, smbConnectorInstance);
assertThatConnectorFields(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE)
.containsAll(initialHttpConnectorFields)
.contains(
new ConnectorField(ConnectorHttpDocument.SCHEMA_TYPE + ":runtimeField1", "runtimeField1", STRING),
new ConnectorField(ConnectorHttpDocument.SCHEMA_TYPE + ":runtimeField2", "runtimeField2", DATE),
new ConnectorField(ConnectorHttpDocument.SCHEMA_TYPE + ":runtimeField3", "runtimeField3", DATE_TIME),
new ConnectorField(ConnectorHttpDocument.SCHEMA_TYPE + ":runtimeField4", "Champ 4", STRING)
)
.hasSize(initialHttpConnectorFields.size() + 4);
assertThatConnectorFields(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE)
.containsAll(initialSmbConnectorFolderFields)
.contains(
new ConnectorField(ConnectorSmbFolder.SCHEMA_TYPE + ":runtimeField5", "runtimeField5", STRING),
new ConnectorField(ConnectorSmbFolder.SCHEMA_TYPE + ":runtimeField6", "runtimeField6", BOOLEAN),
new ConnectorField(ConnectorSmbFolder.SCHEMA_TYPE + ":runtimeField7", "Champ 7", STRING)
)
.hasSize(initialSmbConnectorFolderFields.size() + 3);
assertThatConnectorFields(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE)
.containsAll(initialSmbConnectorDocumentFields)
.contains(
new ConnectorField(ConnectorSmbDocument.SCHEMA_TYPE + ":runtimeField8", "runtimeField8", STRING),
new ConnectorField(ConnectorSmbDocument.SCHEMA_TYPE + ":runtimeField9", "Champ 9", STRING)
)
.hasSize(initialSmbConnectorDocumentFields.size() + 2);
assertThatConnectorFields(anotherHttpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE)
.containsAll(initialHttpConnectorFields)
.hasSize(initialHttpConnectorFields.size());
}
//FIXME
@Test
public void whenCreateTargetMetadataThenHasCorrectInfos()
throws Exception {
assertThat(service.getTargetMetadata(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE)).isEmpty();
assertThat(service.getTargetMetadata(anotherHttpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE)).isEmpty();
assertThat(service.getTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE)).isEmpty();
assertThat(service.getTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE)).isEmpty();
service.createTargetMetadata(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE,
new TargetParams("meta1", "My first metadata", BOOLEAN).withAdvancedSearch(true));
service.createTargetMetadata(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE,
new TargetParams("MAPmeta2", "My second metadata", STRING).withSearchable(true));
service.createTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE,
new TargetParams("meta1", "My first metadata", DATE));
service.createTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE,
new TargetParams("meta2", "My second metadata", STRING).withSearchable(true));
service.createTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE,
new TargetParams("MAPmeta3", "My third metadata", STRING).withMultivalue(false).withSearchResults(true));
service.createTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE,
new TargetParams("meta4", "My fourth metadata", DATE_TIME).withSearchable(true));
List<Metadata> metadatas = service.getTargetMetadata(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE);
Map<Language, String> firstLabels = new HashMap<>();
firstLabels.put(Language.French, "My first metadata");
firstLabels.put(Language.English, "My first metadata");
Map<Language, String> secondLabels = new HashMap<>();
secondLabels.put(Language.French, "My second metadata");
secondLabels.put(Language.English, "My second metadata");
assertThat(metadatas)
.extracting("code", "type", "labels", "multivalue", "searchable").containsOnly(
tuple(httpConnectorDocumentSchema + "_MAPmeta1", BOOLEAN,
firstLabels, true, false),
tuple(httpConnectorDocumentSchema + "_MAPmeta2", STRING, secondLabels, true, true)
);
assertThat(service.getTargetMetadata(anotherHttpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE)).isEmpty();
assertThat(service.getTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE))
.extracting("code", "type", "labels", "multivalue", "searchable").containsOnly(
tuple(smbConnectorFolderSchema + "_MAPmeta1", DATE, firstLabels, true, false),
tuple(smbConnectorFolderSchema + "_MAPmeta2", STRING, secondLabels, true, true)
);
Map<Language, String> thirdLabels = new HashMap<>();
thirdLabels.put(Language.French, "My third metadata");
thirdLabels.put(Language.English, "My third metadata");
Map<Language, String> fourthLabels = new HashMap<>();
fourthLabels.put(Language.French, "My fourth metadata");
fourthLabels.put(Language.English, "My fourth metadata");
assertThat(service.getTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE))
.extracting("code", "type", "labels", "multivalue", "searchable").containsOnly(
tuple(smbConnectorDocumentSchema + "_MAPmeta3", STRING, thirdLabels, false, false),
tuple(smbConnectorDocumentSchema + "_MAPmeta4", DATE_TIME, fourthLabels, true, true)
);
SchemasDisplayManager manager = getAppLayerFactory().getMetadataSchemasDisplayManager();
assertThat(manager.getAdvancedSearchMetadatas(zeCollection, ConnectorHttpDocument.SCHEMA_TYPE)).extracting("metadataCode")
.contains(httpConnectorDocumentSchema + "_MAPmeta1").doesNotContain(httpConnectorDocumentSchema + "_MAPmeta2");
assertThat(manager.getSchema(zeCollection, smbConnectorDocumentSchema).getSearchResultsMetadataCodes())
.contains(smbConnectorDocumentSchema + "_MAPmeta3").doesNotContain(smbConnectorDocumentSchema + "_MAPmeta4");
}
@Test(expected = ConnectorMappingServiceRuntimeException_MetadataAlreadyExist.class)
public void whenCreateTwoTargetMetadatasWithTheSameCodeThenExceptionThrown() {
service.createTargetMetadata(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE,
new TargetParams("meta", "My first metadata", STRING));
service.createTargetMetadata(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE,
new TargetParams("meta", "My second metadata", STRING));
}
@Test(expected = ConnectorMappingServiceRuntimeException_InvalidArgument.class)
public void whenCreateTargetMetadatasWithInvalidCodeThenExceptionThrown() {
service.createTargetMetadata(smbConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE,
new TargetParams("meta", "My metadata", STRING));
}
@Test(expected = ConnectorMappingServiceRuntimeException_InvalidArgument.class)
public void whenCreateTargetMetadatasWithInvalidValueTypeThenExceptionThrown() {
service.createTargetMetadata(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE,
new TargetParams("meta", "My metadata", null));
}
@Test(expected = ConnectorMappingServiceRuntimeException_InvalidArgument.class)
public void whenCreateTargetMetadatasWithInvalidDocumentSchemaTypeThenExceptionThrown() {
service.createTargetMetadata(httpConnectorInstance, null,
new TargetParams("meta", "My metadata", STRING));
}
@Test(expected = ConnectorMappingServiceRuntimeException_InvalidArgument.class)
public void whenCreateTargetMetadatasWithInvalidConnectorInstanceThenExceptionThrown() {
service.createTargetMetadata(null, ConnectorHttpDocument.SCHEMA_TYPE,
new TargetParams("meta", "My metadata", STRING));
}
@Test(expected = ConnectorMappingServiceRuntimeException_InvalidArgument.class)
public void whenCreateTargetMetadatasWithDocumentSchemaTypeInAnotherConnectorInstanceThenExceptionThrown() {
service.createTargetMetadata(httpConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE,
new TargetParams("meta", "My metadata", STRING));
}
@Test
public void whenConfigureMappingThenPersisted()
throws Exception {
service.createTargetMetadata(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE,
new TargetParams("meta1", "My first metadata", DATE));
service.createTargetMetadata(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE,
new TargetParams("meta2", "My second metadata", STRING));
service.createTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE,
new TargetParams("meta1", "My first metadata", BOOLEAN));
service.createTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE,
new TargetParams("meta2", "My second metadata", STRING));
service.createTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE,
new TargetParams("meta3", "My third metadata", STRING));
service.createTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE,
new TargetParams("meta4", "My fourth metadata", DATE_TIME));
assertThat(service.getMapping(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE)).isEmpty();
assertThat(service.getMapping(anotherHttpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE)).isEmpty();
assertThat(service.getMapping(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE)).isEmpty();
assertThat(service.getMapping(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE)).isEmpty();
Map<String, List<String>> connectorHttpMapping = new HashMap<>();
connectorHttpMapping.put("MAPmeta1", asList(httpDocumentType + ":runtimeField2"));
connectorHttpMapping.put("MAPmeta2", asList(httpDocumentType + ":runtimeField1", httpDocumentType + ":runtimeField4"));
service.setMapping(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE, connectorHttpMapping);
Map<String, List<String>> connectorSmbFolderMapping = new HashMap<>();
connectorSmbFolderMapping.put("MAPmeta1", asList(smbFolderType + ":runtimeField6"));
connectorSmbFolderMapping.put("MAPmeta2", asList(smbFolderType + ":runtimeField7", smbFolderType + ":runtimeField5"));
service.setMapping(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE, connectorSmbFolderMapping);
Map<String, List<String>> connectorSmbDocumentMapping = new HashMap<>();
connectorSmbDocumentMapping.put("MAPmeta3", asList(smbDocumentType + ":runtimeField9"));
service.setMapping(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE, connectorSmbDocumentMapping);
assertThat(service.getMapping(httpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE)).containsOnly(
entry("MAPmeta1", asList(httpDocumentType + ":runtimeField2")),
entry("MAPmeta2", asList(httpDocumentType + ":runtimeField1", httpDocumentType + ":runtimeField4"))
);
assertThat(service.getMapping(anotherHttpConnectorInstance, ConnectorHttpDocument.SCHEMA_TYPE)).isEmpty();
assertThat(service.getMapping(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE)).containsOnly(
entry("MAPmeta1", asList(smbFolderType + ":runtimeField6")),
entry("MAPmeta2", asList(smbFolderType + ":runtimeField7", smbFolderType + ":runtimeField5"))
);
assertThat(service.getMapping(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE)).containsOnly(
entry("MAPmeta3", asList(smbDocumentType + ":runtimeField9"))
);
connectorSmbFolderMapping = new HashMap<>();
connectorSmbFolderMapping.put("MAPmeta3", asList("runtimeField6"));
connectorSmbFolderMapping.put("MAPmeta2", asList("runtimeField5", "runtimeField7"));
service.setMapping(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE, connectorSmbFolderMapping);
service.createTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE,
new TargetParams("meta3", "My third metadata", BOOLEAN));
assertThat(service.getMapping(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE)).containsOnly(
entry("MAPmeta3", asList("runtimeField6")),
entry("MAPmeta2", asList("runtimeField5", "runtimeField7"))
);
}
@Test
public void givenPropertiesMappedWhenAddConnectorDocumentWithfieldsThenMappedToMetadatas()
throws Exception {
Metadata folderMeta1 = service.createTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE,
new TargetParams("meta1", "My first metadata", STRING));
Metadata folderMeta2 = service.createTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE,
new TargetParams("meta2", "My second metadata", DATE));
Metadata folderMeta3 = service.createTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE,
new TargetParams("meta3", "My third metadata", DATE_TIME));
Metadata folderMeta4 = service.createTargetMetadata(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE,
new TargetParams("meta4", "My fourth metadata", BOOLEAN));
Metadata documentMeta1 = service.createTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE,
new TargetParams("meta1", "My first metadata", STRING));
Metadata documentMeta2 = service.createTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE,
new TargetParams("meta2", "My second metadata", DATE));
Metadata documentMeta3 = service.createTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE,
new TargetParams("meta3", "My third metadata", DATE_TIME));
Metadata documentMeta4 = service.createTargetMetadata(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE,
new TargetParams("meta4", "My fourth metadata", BOOLEAN));
eventObserver = new DefaultConnectorEventObserver(es, connectorLogger, SDK_STREAM);
ConnectorSmbFolder smbFolderAddedBeforeMapping = newValidSmbFolder()
.addStringProperty("stringFieldA", "value1")
.addStringProperty("stringFieldB", "value2")
.addDateProperty("dateFieldA", date1)
.addDateProperty("dateFieldB", date2)
.addDateTimeProperty("dateTimeFieldA", datetime1)
.addDateTimeProperty("dateTimeFieldB", datetime2)
.addBooleanProperty("booleanFieldA", true)
.addBooleanProperty("booleanFieldB", false);
ConnectorSmbDocument smbDocumentAddedBeforeMapping = newValidSmbDocumentInFolder(smbFolderAddedBeforeMapping)
.addStringProperty("stringFieldA", "value1")
.addStringProperty("stringFieldB", "value2")
.addDateProperty("dateFieldA", date1)
.addDateProperty("dateFieldB", date2)
.addDateTimeProperty("dateTimeFieldA", datetime1)
.addDateTimeProperty("dateTimeFieldB", datetime2)
.addBooleanProperty("booleanFieldA", true)
.addBooleanProperty("booleanFieldB", false);
eventObserver.addUpdateEvents(smbFolderAddedBeforeMapping, smbDocumentAddedBeforeMapping);
Map<String, List<String>> connectorSmbFolderMapping = new HashMap<>();
connectorSmbFolderMapping.put("MAPmeta1", asList(smbFolderType + ":stringFieldA", smbFolderType + ":stringFieldB"));
connectorSmbFolderMapping.put("MAPmeta2", asList(smbFolderType + ":dateFieldA", smbFolderType + ":dateFieldB"));
connectorSmbFolderMapping.put("MAPmeta3", asList(smbFolderType + ":dateTimeFieldA", smbFolderType + ":dateTimeFieldB"));
connectorSmbFolderMapping.put("MAPmeta4", asList(smbFolderType + ":booleanFieldA", smbFolderType + ":booleanFieldB"));
service.setMapping(smbConnectorInstance, ConnectorSmbFolder.SCHEMA_TYPE, connectorSmbFolderMapping);
Map<String, List<String>> connectorSmbDocMapping = new HashMap<>();
connectorSmbDocMapping.put("MAPmeta1", asList(smbDocumentType + ":stringFieldB", smbDocumentType + ":stringFieldA"));
connectorSmbDocMapping.put("MAPmeta2", asList(smbDocumentType + ":dateFieldB", smbDocumentType + ":dateFieldA"));
connectorSmbDocMapping.put("MAPmeta3", asList(smbDocumentType + ":dateTimeFieldB", smbDocumentType + ":dateTimeFieldA"));
connectorSmbDocMapping.put("MAPmeta4", asList(smbDocumentType + ":booleanFieldB", smbDocumentType + ":booleanFieldA"));
service.setMapping(smbConnectorInstance, ConnectorSmbDocument.SCHEMA_TYPE, connectorSmbDocMapping);
ConnectorSmbFolder smbFolderAddedAfterMapping = newValidSmbFolder()
.addStringProperty("stringFieldA", "value1")
.addStringProperty("stringFieldB", "value2")
.addDateProperty("dateFieldA", date1)
.addDateProperty("dateFieldB", date2)
.addDateTimeProperty("dateTimeFieldA", datetime1)
.addDateTimeProperty("dateTimeFieldB", datetime2)
.addBooleanProperty("booleanFieldA", true)
.addBooleanProperty("booleanFieldB", false);
ConnectorSmbDocument smbDocumentAddedAfterMapping = newValidSmbDocumentInFolder(smbFolderAddedBeforeMapping)
.addStringProperty("stringFieldA", "value1")
.addStringProperty("stringFieldB", "value2")
.addDateProperty("dateFieldA", date1)
.addDateProperty("dateFieldB", date2)
.addDateTimeProperty("dateTimeFieldA", datetime1)
.addDateTimeProperty("dateTimeFieldB", datetime2)
.addBooleanProperty("booleanFieldA", true)
.addBooleanProperty("booleanFieldB", false);
eventObserver.addUpdateEvents(smbFolderAddedAfterMapping, smbDocumentAddedAfterMapping);
eventObserver.flush();
assertThat(smbDocumentAddedBeforeMapping.getList(documentMeta1)).isEmpty();
assertThat(smbDocumentAddedBeforeMapping.getList(documentMeta2)).isEmpty();
assertThat(smbDocumentAddedBeforeMapping.getList(documentMeta3)).isEmpty();
assertThat(smbDocumentAddedBeforeMapping.getList(documentMeta4)).isEmpty();
assertThat(smbFolderAddedBeforeMapping.getList(folderMeta1)).isEmpty();
assertThat(smbFolderAddedBeforeMapping.getList(folderMeta2)).isEmpty();
assertThat(smbFolderAddedBeforeMapping.getList(folderMeta3)).isEmpty();
assertThat(smbFolderAddedBeforeMapping.getList(folderMeta4)).isEmpty();
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta1)).isEqualTo(asList("value2", "value1"));
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta2)).isEqualTo(asList(date2, date1));
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta3)).isEqualTo(asList(datetime2, datetime1));
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta4)).isEqualTo(asList(false, true));
assertThat(smbFolderAddedAfterMapping.getList(folderMeta1)).isEqualTo(asList("value1", "value2"));
assertThat(smbFolderAddedAfterMapping.getList(folderMeta2)).isEqualTo(asList(date1, date2));
assertThat(smbFolderAddedAfterMapping.getList(folderMeta3)).isEqualTo(asList(datetime1, datetime2));
assertThat(smbFolderAddedAfterMapping.getList(folderMeta4)).isEqualTo(asList(true, false));
eventObserver.addUpdateEvents(smbFolderAddedAfterMapping, smbDocumentAddedAfterMapping);
eventObserver.flush();
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta1)).isEmpty();
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta2)).isEmpty();
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta3)).isEmpty();
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta4)).isEmpty();
assertThat(smbFolderAddedAfterMapping.getList(folderMeta1)).isEmpty();
assertThat(smbFolderAddedAfterMapping.getList(folderMeta2)).isEmpty();
assertThat(smbFolderAddedAfterMapping.getList(folderMeta3)).isEmpty();
assertThat(smbFolderAddedAfterMapping.getList(folderMeta4)).isEmpty();
smbFolderAddedAfterMapping
.addStringProperty("stringFieldB", "value2")
.addDateProperty("dateFieldB", date2)
.addDateTimeProperty("dateTimeFieldB", datetime2)
.addBooleanProperty("booleanFieldB", false);
smbDocumentAddedAfterMapping
.addStringProperty("stringFieldA", "value1")
.addDateProperty("dateFieldA", date1)
.addDateTimeProperty("dateTimeFieldA", datetime1)
.addBooleanProperty("booleanFieldA", true);
eventObserver.push(asList((ConnectorDocument) smbFolderAddedAfterMapping, smbDocumentAddedAfterMapping));
eventObserver.flush();
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta1)).isEqualTo(asList("value1"));
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta2)).isEqualTo(asList(date1));
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta3)).isEqualTo(asList(datetime1));
assertThat(smbDocumentAddedAfterMapping.getList(documentMeta4)).isEqualTo(asList(true));
assertThat(smbFolderAddedAfterMapping.getList(folderMeta1)).isEqualTo(asList("value2"));
assertThat(smbFolderAddedAfterMapping.getList(folderMeta2)).isEqualTo(asList(date2));
assertThat(smbFolderAddedAfterMapping.getList(folderMeta3)).isEqualTo(asList(datetime2));
assertThat(smbFolderAddedAfterMapping.getList(folderMeta4)).isEqualTo(asList(false));
}
private ConnectorSmbFolder newValidSmbFolder() {
return es.newConnectorSmbFolder(smbConnectorInstance)
.setUrl("/" + UUIDV1Generator.newRandomId())
.setTraversalCode(UUIDV1Generator.newRandomId());
}
private ConnectorSmbDocument newValidSmbDocumentInFolder(ConnectorSmbFolder folder) {
return es.newConnectorSmbDocument(smbConnectorInstance)
.setParent(folder)
.setUrl("/" + UUIDV1Generator.newRandomId())
.setTraversalCode(UUIDV1Generator.newRandomId());
}
private ConnectorHttpDocument newValidHttpDocument() {
return es.newConnectorHttpDocument(httpConnectorInstance)
.setUrl("/" + UUIDV1Generator.newRandomId())
.setTraversalCode(UUIDV1Generator.newRandomId());
}
private ListAssert<ConnectorField> assertThatConnectorFields(ConnectorInstance<?> connectorInstance,
String connectorDocumentSchemaType) {
return assertThat(service.getConnectorFields(connectorInstance, connectorDocumentSchemaType))
.usingFieldByFieldElementComparator();
}
private void addConnectorFieldsToConnectorInstances() {
eventObserver = new DefaultConnectorEventObserver(es, connectorLogger, SDK_STREAM);
eventObserver.push(asList((ConnectorDocument) newValidHttpDocument()
.addStringProperty("runtimeField1", "value")
.addDateProperty("runtimeField2", new LocalDate())
.addDateTimeProperty("runtimeField3", new LocalDateTime())
.addStringProperty("runtimeField4", (String) null).withPropertyLabel("runtimeField4", "Champ 4")
));
ConnectorSmbFolder smbFolder = newValidSmbFolder()
.addStringProperty("runtimeField5", "value")
.addBooleanProperty("runtimeField6", true)
.addStringProperty("runtimeField7", asList("value1", "value2")).withPropertyLabel("runtimeField7", "Champ 7");
eventObserver.addUpdateEvents(smbFolder, newValidSmbDocumentInFolder(smbFolder)
.addStringProperty("runtimeField8", "value")
.addStringProperty("runtimeField9", (String) null).withPropertyLabel("runtimeField9", "Champ 9")
);
eventObserver.close();
eventObserver = null;
}
}