package com.constellio.app.services.schemas.bulkImport;
import static com.constellio.app.ui.i18n.i18n.$;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.LocalDateTime;
import org.junit.Before;
import org.junit.Test;
import com.constellio.app.modules.rm.RMTestRecords;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.services.schemas.bulkImport.data.ImportDataProvider;
import com.constellio.app.services.schemas.bulkImport.data.xml.XMLImportDataProvider;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.security.global.UserCredential;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.users.UserServices;
import com.constellio.model.services.users.UserServicesRuntimeException;
import com.constellio.sdk.tests.ConstellioTest;
public class UserImportServicesAcceptanceTest extends ConstellioTest {
RMSchemasRecordsServices rm;
RMTestRecords records = new RMTestRecords(zeCollection);
LocalDateTime shishOClock = new LocalDateTime().minusHours(1);
BulkImportProgressionListener progressionListener = new LoggerBulkImportProgressionListener();
UserImportServices importServices;
SearchServices searchServices;
UserServices userServices;
User admin;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records)
);
progressionListener = new LoggerBulkImportProgressionListener();
importServices = new UserImportServices(getModelLayerFactory(), 100);
searchServices = getModelLayerFactory().newSearchServices();
userServices = getModelLayerFactory().newUserServices();
admin = getModelLayerFactory().newUserServices().getUserInCollection("admin", zeCollection);
rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory());
}
@Test
public void whenImportingUsersXMLFileThenImportedCorrectly()
throws Exception {
File usersFile = getTestResourceFile("user.xml");
importAndValidate(XMLImportDataProvider.forSingleXMLFile(getModelLayerFactory(), usersFile));
}
private void importAndValidate(ImportDataProvider importDataProvider) {
List<String> collections = new ArrayList<>();
collections.add(zeCollection);
BulkImportResults results = importServices.bulkImport(importDataProvider, null, null, collections);
assertThat(results.getImportErrors().size()).isEqualTo(0);
validateAlice();
validateBob();
}
@Test
public void whenImportingUserWithInvalidGroupThenImportOtherUsersAndGiveAdequateErrorMessage()
throws Exception {
File usersFile = getTestResourceFile("userAliceWithInvalidGroup.xml");
importAndValidateWhenUserWithInvalidGroup(XMLImportDataProvider.forSingleXMLFile(getModelLayerFactory(), usersFile));
}
private void importAndValidateWhenUserWithInvalidGroup(ImportDataProvider importDataProvider) {
List<String> collections = new ArrayList<>();
collections.add(zeCollection);
BulkImportResults results = importServices.bulkImport(importDataProvider, null, null, collections);
assertThat(results.getImportErrors().size()).isEqualTo(1);
ImportError mariImportError = results.getImportErrors().get(0);
assertThat(mariImportError.getInvalidElementId()).isEqualTo("mari");
assertThat(mariImportError.getCompleteErrorMessage())
.contains("Invalid group");//$("UserServicesRuntimeException_InvalidGroup"));
assertThat(mariImportError.getCompleteErrorMessage()).contains($("legends1"));
try {
userServices.getUser("mari");
fail("mari shouldn't exist");
} catch (UserServicesRuntimeException.UserServicesRuntimeException_NoSuchUser e) {
}
validateBob();
}
private void validateBob() {
UserCredential bob = userServices.getUser("bob");
assertThat(bob.getFirstName()).isEqualTo("Bob 'Elvis'");
assertThat(bob.getLastName()).isEqualTo("Gratton");
assertThat(bob.getEmail()).isEqualTo("bob@doculibre.com");
assertThat(bob.isSystemAdmin()).isEqualTo(true);
assertThat(bob.getGlobalGroups().size()).isEqualTo(0);
assertThat(bob.getCollections()).contains(zeCollection);
assertThat(bob.getCollections().size()).isEqualTo(1);
}
private void validateAlice() {
UserCredential alice = userServices.getUser("alice");
assertThat(alice.getFirstName()).isEqualTo("Alice");
assertThat(alice.getLastName()).isEqualTo("Wonderland");
assertThat(alice.getEmail()).isEqualTo("alice@doculibre.com");
assertThat(alice.isSystemAdmin()).isEqualTo(false);
assertThat(alice.getGlobalGroups()).contains("legends", "heroes");
assertThat(alice.getGlobalGroups().size()).isEqualTo(2);
assertThat(alice.getCollections()).contains(zeCollection);
assertThat(alice.getCollections().size()).isEqualTo(1);
}
}