package com.constellio.app.modules.es.connectors.smb;
import static com.constellio.app.modules.es.constants.ESTaxonomies.SMB_FOLDERS;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import org.assertj.core.api.ListAssert;
import org.junit.Before;
import com.constellio.app.modules.es.model.connectors.ConnectorInstance;
import com.constellio.app.modules.es.services.ConnectorManager;
import com.constellio.app.modules.es.services.ESSchemasRecordsServices;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.taxonomies.TaxonomiesSearchOptions;
import com.constellio.model.services.taxonomies.TaxonomiesSearchServices;
import com.constellio.sdk.SDKPasswords;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.annotations.UiTest;
import com.constellio.sdk.tests.setups.Users;
@UiTest
public class StartApplicationWithSmbRecordsAcceptanceTest extends ConstellioTest {
private Users users = new Users();
private ConnectorInstance<?> connectorInstance;
private ConnectorManager connectorManager;
private RecordServices recordServices;
private ESSchemasRecordsServices es;
private String share, domain, username, password;
private String folderA = "folderA";
private String folderB = "folderB";
private String folderAA = "folderAA";
private String folderAB = "folderAB";
private String documentA1 = "documentA1";
private String documentA2 = "documentA2";
private String documentB3 = "documentB3";
private String documentAA4 = "documentAA4";
private String documentAA5 = "documentAA5";
private TaxonomiesSearchOptions defaultOptions = new TaxonomiesSearchOptions();
private User userWithoutTokens;
private User userWithToken1;
private User userWithToken1And2;
private User userWithCollectionReadAccess;
@Before
public void setUp()
throws Exception {
givenBackgroundThreadsEnabled();
prepareSystem(withZeCollection().withConstellioESModule().withAllTestUsers());
inCollection(zeCollection).giveReadAccessTo(gandalf);
Users users = new Users().setUp(getModelLayerFactory().newUserServices())
.withPasswords(getModelLayerFactory().getPasswordFileAuthenticationService());
es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory());
recordServices = getModelLayerFactory().newRecordServices();
connectorManager = es.getConnectorManager();
share = SDKPasswords.testSmbShare();
domain = SDKPasswords.testSmbDomain();
username = SDKPasswords.testSmbUsername();
password = SDKPasswords.testSmbPassword();
recordServices.update(users.bobIn(zeCollection)
.setManualTokens("rtoken1"));
recordServices.update(users.chuckNorrisIn(zeCollection)
.setManualTokens("rtoken1", "rtoken2"));
userWithoutTokens = users.sasquatchIn(zeCollection);
userWithCollectionReadAccess = users.gandalfIn(zeCollection);
userWithToken1 = users.bobIn(zeCollection);
userWithToken1And2 = users.chuckNorrisIn(zeCollection);
// Transaction transaction = new Transaction();
// transaction.add(es.newConnectorSmbFolderWithId(folderA, connectorInstance))
// .setTitle("A").setUrl("smb://A/");
//
// transaction.add(es.newConnectorSmbFolderWithId(folderB, connectorInstance))
// .setTitle("B").setUrl("smb://B/");
//
// transaction.add(es.newConnectorSmbFolderWithId(folderAA, connectorInstance))
// .setTitle("AA").setUrl("smb://A/A/").setParent(folderA);
//
// transaction.add(es.newConnectorSmbFolderWithId(folderAB, connectorInstance))
// .setTitle("AB").setUrl("smb://A/B/");
//
// transaction.add(es.newConnectorSmbDocumentWithId(documentA1, connectorInstance))
// .setTitle("1.txt").setUrl("smb://A/1.txt").setParent(folderA).setManualTokens(PUBLIC_TOKEN);
//
// transaction.add(es.newConnectorSmbDocumentWithId(documentA2, connectorInstance))
// .setTitle("2.txt").setUrl("smb://A/2.txt").setParent(folderA).setManualTokens(PUBLIC_TOKEN);
//
// transaction.add(es.newConnectorSmbDocumentWithId(documentB3, connectorInstance))
// .setTitle("3.txt").setUrl("smb://B/3.txt").setParent(folderB).setManualTokens("rtoken1");
//
// transaction.add(es.newConnectorSmbDocumentWithId(documentAA4, connectorInstance))
// .setTitle("4.txt").setUrl("smb://A/A/4.txt").setParent(folderAA).setManualTokens(PUBLIC_TOKEN);
//
// transaction.add(es.newConnectorSmbDocumentWithId(documentAA5, connectorInstance))
// .setTitle("5.txt").setUrl("smb://A/A/5.txt").setParent(folderAA).setManualTokens("rtoken2");
//
// recordServices.execute(transaction);
}
private void createConnector(String connectorCode) {
connectorInstance = connectorManager.createConnector(es.newConnectorSmbInstance()
.setCode(connectorCode)
.setEnabled(false)
.setSeeds(asList(share))
.setUsername(username)
.setPassword(password)
.setDomain(domain)
.setTraversalCode("")
.setInclusions(asList(share))
.setTitle("New Smb Connector"));
}
// @Test
// @InDevelopmentTest
// public void givenAShareWhenTraversingThenAddUpdateDeleteContent()
// throws Exception {
//
// createConnector("zeConnector");
//
// newWebDriver();
// waitUntilICloseTheBrowsers();
// }
// @Test
// @InDevelopmentTest
// public void givenABigShareWhenTraversingThenAddUpdateDeleteContent()
// throws Exception {
// share = "smb://192.168.1.208/shareBig/";
// createConnector("zeConnector");
//
// newWebDriver();
// waitUntilICloseTheBrowsers();
// }
//
// @Test
// @InDevelopmentTest
// public void given2ConnectorsWhenRunningThenThereIsNoConflict()
// throws Exception {
//
// createConnector("zeConnector");
//
// share = "smb://192.168.1.208/shareBig/";
// createConnector("zeOtherConnector");
//
// newWebDriver();
// waitUntilICloseTheBrowsers();
// }
//
// @Test
// @InDevelopmentTest
// public void whenModifyingConfigurationThenTraversalUsesNewConfiguration() {
// fail("To implement!");
// }
private ChildRecordAssertPreparator assertThatVisibleChildRecordsFor(User user) {
return new ChildRecordAssertPreparator(user);
}
private ListAssert<Object> assertThatVisibleRootRecordsFor(User user) {
TaxonomiesSearchServices taxonomiesSearchServices = getModelLayerFactory().newTaxonomiesSearchService();
return assertThat(taxonomiesSearchServices.getVisibleRootConcept(user, zeCollection, SMB_FOLDERS, defaultOptions))
.extracting("id");
}
private class ChildRecordAssertPreparator {
private User user;
private ChildRecordAssertPreparator(User user) {
this.user = user;
}
private ListAssert<Object> in(String recordId) {
Record record = getModelLayerFactory().newRecordServices()
.getDocumentById(recordId);
TaxonomiesSearchServices taxonomiesSearchServices = getModelLayerFactory().newTaxonomiesSearchService();
return assertThat(taxonomiesSearchServices.getVisibleChildConcept(user, SMB_FOLDERS, record, defaultOptions))
.extracting("id");
}
}
}