package com.constellio.sdk.tests; import static com.constellio.app.ui.i18n.i18n.$; import static com.constellio.model.services.search.query.logical.LogicalSearchQuery.query; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import static junit.framework.Assert.fail; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Random; import java.util.Set; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.assertj.core.api.Condition; import org.assertj.core.api.ListAssert; import org.assertj.core.api.ObjectAssert; import org.assertj.core.groups.Tuple; import org.jdom2.Document; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; import org.joda.time.LocalDate; import org.joda.time.LocalDateTime; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import com.constellio.app.modules.rm.wrappers.DecommissioningList; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.i18n.i18n; import com.constellio.data.dao.dto.records.RecordDTO; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.RecordWrapper; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.entities.schemas.entries.ManualDataEntry; import com.constellio.model.entities.security.XMLAuthorizationDetails; import com.constellio.model.entities.security.global.UserCredential; import com.constellio.model.frameworks.validation.ValidationError; import com.constellio.model.frameworks.validation.ValidationErrors; import com.constellio.model.frameworks.validation.ValidationRuntimeException; import com.constellio.model.services.contents.ContentFactory; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesException.ValidationException; import com.constellio.model.services.records.RecordServicesRuntimeException; import com.constellio.model.services.records.RecordUtils; import com.constellio.model.services.schemas.SchemaUtils; import com.constellio.model.services.search.SearchServices; import com.constellio.sdk.tests.setups.SchemaShortcuts; public class TestUtils { public static final String chuckNorris = "Chuck Norris"; private static Random random = new Random(); private static int gen; public static Comparator<? super DecommissioningList> comparingRecordWrapperIds = new Comparator<DecommissioningList>() { @Override public int compare(DecommissioningList o1, DecommissioningList o2) { return o1.getId().endsWith(o2.getId()) ? 0 : 1; } }; private TestUtils() { } public static String frenchPangram() { return "ABCDEFGHIJKLMNOPQRST"; } public static byte[] aByteArray() { return aByteArray(2); } public static byte[] aByteArray(int length) { byte[] bytes = new byte[length]; for (int i = 0; i < length; i++) { if (gen >= Byte.MAX_VALUE) { gen = 0; } bytes[i] = Integer.valueOf(++gen).byteValue(); } return bytes; } public static byte[] aRandomByteArray(int length) { byte[] bytes = new byte[length]; random.nextBytes(bytes); return bytes; } public static LocalDateTime aDateTime() { return new LocalDateTime(2000 + random.nextInt(20), random.nextInt(13 - 1) + 1, random.nextInt(29 - 1) + 1, random.nextInt(24 - 1) + 1, random.nextInt(60 - 1) + 1); } public static LocalDate aDate() { return new LocalDate(2000 + random.nextInt(20), random.nextInt(13 - 1) + 1, random.nextInt(29 - 1) + 1); } public static File aFile() { return new File(aString()); } public static File aFile(File parent) { return new File(parent, aString()); } public static long aLong() { return anInteger(); } public static int anInteger() { if (gen > 100000000) { gen = 0; } return ++gen; } public static String aString() { return "" + anInteger(); } public static String[] aStringArray() { final int maxArraySize = 10; String[] theStringArray = new String[maxArraySize]; for (int i = 0; i < random.nextInt(maxArraySize); i++) { theStringArray[i] = aString(); } return theStringArray; } public static Set<Class<?>> getElementsClasses(Set<?> objects) { Set<Class<?>> classes = new HashSet<Class<?>>(); for (Object o : objects) { classes.add(o.getClass()); } return classes; } public static boolean isIntegrationServer() { return new File(".").getAbsolutePath().contains("jenkins"); } @SuppressWarnings("rawtypes") public static <T> Condition onlyElementsOfClass(final Class<?>... classes) { return new Condition() { @SuppressWarnings("unchecked") @Override public boolean matches(Object value) { List<Class<?>> valuesClasses = new ArrayList<>(); Iterator<T> iterator = ((Iterable) value).iterator(); while (iterator.hasNext()) { valuesClasses.add(iterator.next().getClass()); } try { assertThat(valuesClasses).containsOnly(classes); return true; } catch (Exception e) { return false; } } }; } public static void assertThatToEqualsAndToStringThrowNoException(Object o, Object o2) { assertThat(o).isEqualTo(o2); assertThat(o.toString()).isEqualTo(o2.toString()); assertThat(o.hashCode()).isEqualTo(o2.hashCode()); for (Method method : o.getClass().getMethods()) { boolean getter = method.getName().startsWith("get") || method.getName().startsWith("is"); if (getter && method.getGenericParameterTypes().length == 0) { try { method.invoke(o); } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } } } } @SuppressWarnings({ "unchecked", "rawtypes" }) public static Condition<? super Object> unmodifiableCollection() { return new Condition() { @Override public boolean matches(Object value) { Collection collection = (Collection) value; try { collection.clear(); return false; } catch (Exception e) { return true; } } }.describedAs("unmodifiable"); } public static List<String> ids(List<Record> records) { return new RecordUtils().toIdList(records); } public static String[] idsArray(Record... records) { return ids(Arrays.asList(records)).toArray(new String[0]); } @SafeVarargs public static <T> List<T> asList(T... elements) { return Arrays.asList(elements); } public static <K, V> Map<K, V> asMap(K key1, V value1) { Map<K, V> map = new HashMap<K, V>(); map.put(key1, value1); return map; } public static <K, V> Map<K, V> asMap(K key1, V value1, K key2, V value2) { Map<K, V> map = new HashMap<K, V>(); map.put(key1, value1); map.put(key2, value2); return map; } public static <K, V> Map<K, V> asMap(K key1, V value1, K key2, V value2, K key3, V value3) { Map<K, V> map = new HashMap<K, V>(); map.put(key1, value1); map.put(key2, value2); map.put(key3, value3); return map; } public static <K, V> Map<K, V> asMap(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4) { Map<K, V> map = new HashMap<K, V>(); map.put(key1, value1); map.put(key2, value2); map.put(key3, value3); map.put(key4, value4); return map; } public static <K, V> Map<K, V> asMap(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4, K key5, V value5) { Map<K, V> map = new HashMap<K, V>(); map.put(key1, value1); map.put(key2, value2); map.put(key3, value3); map.put(key4, value4); map.put(key5, value5); return map; } public static <K, V> Map<K, V> asMap(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4, K key5, V value5, K key6, V value6) { Map<K, V> map = new HashMap<K, V>(); map.put(key1, value1); map.put(key2, value2); map.put(key3, value3); map.put(key4, value4); map.put(key5, value5); map.put(key6, value6); return map; } public static Map<String, Object> asStringObjectMap(String key1, Object value1) { Map<String, Object> map = new HashMap<String, Object>(); map.put(key1, value1); return map; } public static Map<String, Object> asStringObjectMap(String key1, Object value1, String key2, Object value2) { Map<String, Object> map = new HashMap<String, Object>(); map.put(key1, value1); map.put(key2, value2); return map; } public static Map<String, Object> asStringObjectMap(String key1, Object value1, String key2, Object value2, String key3, Object value3) { Map<String, Object> map = new HashMap<String, Object>(); map.put(key1, value1); map.put(key2, value2); map.put(key3, value3); return map; } public static Metadata mockMetadata(String code) { String localCode = code.split("_")[2]; final Metadata metadata = mock(Metadata.class, code); when(metadata.getCode()).thenReturn(code); when(metadata.getLocalCode()).thenReturn(localCode); when(metadata.getInheritanceCode()).thenAnswer(new Answer<String>() { @Override public String answer(InvocationOnMock invocation) throws Throwable { return metadata.computeInheritanceCode(); } }); when(metadata.isGlobal()).thenAnswer(new Answer<Boolean>() { @Override public Boolean answer(InvocationOnMock invocation) throws Throwable { return metadata.computeIsGlobal(); } }); return metadata; } public static Metadata mockManualMultivalueMetadata(String code, MetadataValueType type) { Metadata metadata = mockManualMetadata(code, type); when(metadata.isMultivalue()).thenReturn(true); return metadata; } public static Metadata mockManualMetadata(String code, MetadataValueType type) { String localCode = code.split("_")[2]; Metadata metadata = mock(Metadata.class, code); when(metadata.getCode()).thenReturn(code); when(metadata.getLocalCode()).thenReturn(localCode); when(metadata.getType()).thenReturn(type); if (type == MetadataValueType.CONTENT) { when(metadata.getStructureFactory()).thenReturn(new ContentFactory()); } when(metadata.getDataEntry()).thenReturn(new ManualDataEntry()); return metadata; } public static List<String> idsOf(List<XMLAuthorizationDetails> details) { List<String> ids = new ArrayList<>(); for (XMLAuthorizationDetails detail : details) { ids.add(detail.getId()); } return ids; } public static List<String> recordsIds(List<Record> records) { List<String> ids = new ArrayList<>(); for (Record record : records) { ids.add(record.getId()); } return ids; } public static List<String> usernamesOf(List<UserCredential> users) { List<String> ids = new ArrayList<>(); for (UserCredential user : users) { ids.add(user.getUsername()); } return ids; } @SafeVarargs public static <T> Set<T> asSet(T... elements) { return new HashSet<T>(asList(elements)); } public static RecordDTO newRecordDTO(String id, SchemaShortcuts schema) { Map<String, Object> fields = new HashMap<>(); fields.put("collection_s", schema.collection()); fields.put("schema_s", schema.code()); return new RecordDTO(id, anInteger(), null, fields); } public static Condition<? super List<String>> noDuplicates() { return new Condition<List<String>>() { @Override public boolean matches(List<String> list) { Set<String> set = new HashSet<>(); for (String item : list) { if (set.contains(item)) { fail("Item '" + item + "' was found twice in list"); } else { set.add(item); } } return true; } }; } public static void printDocument(Document document) { XMLOutputter xmlOutput = new XMLOutputter(); xmlOutput.setFormat(Format.getPrettyFormat()); System.out.println(xmlOutput.outputString(document)); } public static void print(RecordWrapper wrapper) { StringBuilder stringBuilder = new StringBuilder( "Record '" + wrapper.getId() + "' of schema '" + wrapper.getSchemaCode() + "'"); final List<Metadata> metadatas = new ArrayList<>(wrapper.getSchema().getMetadatas()); Collections.sort(metadatas, new Comparator<Metadata>() { @Override public int compare(Metadata o1, Metadata o2) { return o1.getLocalCode().compareTo(o2.getLocalCode()); } }); for (Metadata metadata : metadatas) { if (wrapper.hasValue(metadata.getLocalCode())) { stringBuilder.append(metadata.getLocalCode() + ": " + wrapper.get(metadata) + "\n"); } } System.out.println(stringBuilder.toString()); } public static void write(Document document, File file) { XMLOutputter xmlOutput = new XMLOutputter(); FileWriter fileWriter = null; try { fileWriter = new FileWriter(file); // display nice nice xmlOutput.setFormat(Format.getPrettyFormat()); xmlOutput.output(document, fileWriter); } catch (IOException e) { throw new RuntimeException(e); } finally { IOUtils.closeQuietly(fileWriter); } } public static class MapBuilder<K, V> { Map<K, V> map = new HashMap<>(); public static <K, V> MapBuilder<K, V> with(K key, V value) { return new MapBuilder<K, V>().andWith(key, value); } public MapBuilder<K, V> andWith(K key, V value) { map.put(key, value); return this; } public Map<K, V> build() { return map; } } public static void sleep(long time) { try { Thread.sleep(time); } catch (InterruptedException e) { throw new RuntimeException(e); } } public static RecordWrapperAssert assertThatRecord(RecordWrapper recordWrapper) { return new RecordWrapperAssert(recordWrapper); } public static RecordsAssert assertThatRecords(RecordWrapper... actual) { return assertThatRecords(asList(actual)); } public static RecordsAssert assertThatRecords(List<?> actual) { return new RecordsAssert(actual); } public static RecordAssert assertThatRecord(Record actual) { return new RecordAssert(actual); } public static class RecordAssert extends ObjectAssert<Record> { protected RecordAssert(Record actual) { super(actual); } public RecordAssert hasMetadataValue(final Metadata metadata, final Object expectedValue) { assertThat(actual).describedAs("record").isNotNull(); return (RecordAssert) super.has(new Condition<Record>() { @Override public boolean matches(Record value) { assertThat((Object) actual.get(metadata)).as((metadata.getCode())).isEqualTo(expectedValue); return true; } }); } public RecordAssert hasNoMetadataValue(final Metadata metadata) { assertThat(actual).describedAs("record").isNotNull(); return (RecordAssert) super.has(new Condition<Record>() { @Override public boolean matches(Record value) { if (metadata.isMultivalue()) { assertThat(actual.getList(metadata)).as((metadata.getCode())).isEmpty(); } else { assertThat((Object) actual.get(metadata)).as((metadata.getCode())).isNull(); } return true; } }); } private Object getMetadataValue(Record record, String metadataLocalCode) { MetadataSchema schema = ConstellioFactories.getInstance().getModelLayerFactory() .getMetadataSchemasManager().getSchemaTypes(((Record) record).getCollection()) .getSchema(((Record) record).getSchemaCode()); Metadata metadata = schema.getMetadata(metadataLocalCode); if (metadata.isMultivalue()) { return record.getList(metadata); } else { return record.get(metadata); } } public ListAssert<Object> extracting(String... metadatas) { Object[] objects = new Object[metadatas.length]; if (actual instanceof Record) { for (int i = 0; i < metadatas.length; i++) { String metadata = metadatas[i]; String refMetadata = null; if (metadata.contains(".")) { refMetadata = org.apache.commons.lang3.StringUtils.substringAfter(metadata, "."); metadata = org.apache.commons.lang3.StringUtils.substringBefore(metadata, "."); } objects[i] = getMetadataValue(((Record) actual), metadata); if (refMetadata != null && objects[i] != null) { Record referencedRecord = ConstellioFactories.getInstance().getModelLayerFactory().newRecordServices() .getDocumentById((String) objects[i]); objects[i] = getMetadataValue(referencedRecord, refMetadata); } } } else if (actual instanceof RecordWrapper) { for (int i = 0; i < metadatas.length; i++) { String metadata = metadatas[i]; String refMetadata = null; if (metadata.contains(".")) { refMetadata = org.apache.commons.lang3.StringUtils.substringAfter(metadata, "."); metadata = org.apache.commons.lang3.StringUtils.substringBefore(metadata, "."); } objects[i] = ((RecordWrapper) actual).get(metadata); if (refMetadata != null && objects[i] != null) { Record referencedRecord = ConstellioFactories.getInstance().getModelLayerFactory().newRecordServices() .getDocumentById((String) objects[i]); objects[i] = getMetadataValue(referencedRecord, refMetadata); } } } else { throw new RuntimeException("Unsupported object of class '" + actual.getClass()); } return assertThat(asList(objects)); } public void exists() { RecordServices recordServices = ConstellioFactories.getInstance().getModelLayerFactory().newRecordServices(); try { recordServices.getDocumentById(actual.getId()); } catch (Exception e) { fail("Record '" + actual.getId() + "' is supposed to exist, but it does not"); } } } public static class RecordsAssert extends ListAssert<Object> { protected RecordsAssert(List<?> actual) { super((List<Object>) actual); } public ListAssert<Tuple> extractingMetadatas(Metadata... metadatas) { List<Tuple> values = new ArrayList<>(); for (Object record : actual) { Object[] objects = new Object[metadatas.length]; for (int i = 0; i < metadatas.length; i++) { if (record instanceof Record) { objects[i] = ((Record) record).get(metadatas[i]); } else if (record instanceof RecordWrapper) { objects[i] = ((RecordWrapper) record).get(metadatas[i]); } else { throw new RuntimeException("Unsupported object of class '" + record.getClass()); } } values.add(new Tuple(objects)); } return assertThat(values); } private Object getMetadataValue(Record record, String metadataLocalCode) { MetadataSchema schema = ConstellioFactories.getInstance().getModelLayerFactory() .getMetadataSchemasManager().getSchemaTypes(((Record) record).getCollection()) .getSchema(((Record) record).getSchemaCode()); Metadata metadata = schema.getMetadata(metadataLocalCode); if (metadata.isMultivalue()) { return record.getList(metadata); } else { return record.get(metadata); } } public ListAssert<Tuple> extractingMetadatas(String... metadatas) { List<Tuple> values = new ArrayList<>(); for (Object record : actual) { Object[] objects = new Object[metadatas.length]; if (record instanceof Record) { for (int i = 0; i < metadatas.length; i++) { String metadata = metadatas[i]; String refMetadata = null; if (metadata.contains(".")) { refMetadata = org.apache.commons.lang3.StringUtils.substringAfter(metadata, "."); metadata = org.apache.commons.lang3.StringUtils.substringBefore(metadata, "."); } objects[i] = getMetadataValue(((Record) record), metadata); if (refMetadata != null && objects[i] != null) { Record referencedRecord = ConstellioFactories.getInstance().getModelLayerFactory().newRecordServices() .getDocumentById((String) objects[i]); objects[i] = getMetadataValue(referencedRecord, refMetadata); } } } else if (record instanceof RecordWrapper) { for (int i = 0; i < metadatas.length; i++) { String metadata = metadatas[i]; String refMetadata = null; if (metadata.contains(".")) { refMetadata = org.apache.commons.lang3.StringUtils.substringAfter(metadata, "."); metadata = org.apache.commons.lang3.StringUtils.substringBefore(metadata, "."); } objects[i] = ((RecordWrapper) record).get(metadata); if (refMetadata != null && objects[i] != null) { Record referencedRecord = ConstellioFactories.getInstance().getModelLayerFactory().newRecordServices() .getDocumentById((String) objects[i]); objects[i] = getMetadataValue(referencedRecord, refMetadata); } } } else { throw new RuntimeException("Unsupported object of class '" + record.getClass()); } values.add(new Tuple(objects)); } return assertThat(values); } } public static class RecordWrapperAssert extends ObjectAssert<RecordWrapper> { protected RecordWrapperAssert(RecordWrapper actual) { super(actual); } public RecordWrapperAssert hasMetadata(final Metadata metadata, final Object expectedValue) { //return hasMetadata(metadata.getLocalCode(), expectedValue); assertThat(actual).isNotNull(); return (RecordWrapperAssert) super.has(new Condition<RecordWrapper>() { @Override public boolean matches(RecordWrapper value) { assertThat((Object) actual.getWrappedRecord().get(metadata)).as((metadata.getCode())) .isEqualTo(expectedValue); return true; } }); } public RecordWrapperAssert hasMetadata(final String metadataLocalCode, final Object expectedValue) { return hasMetadata(actual.getSchema().getMetadata(metadataLocalCode), expectedValue); // assertThat(actual).isNotNull(); // return (RecordWrapperAssert) super.has(new Condition<RecordWrapper>() { // @Override // public boolean matches(RecordWrapper value) { // Metadata metadata = value.getSchema().getMetadata(metadataLocalCode); // assertThat(actual.getWrappedRecord().get(metadata)).as((metadata.getCode())).isEqualTo(expectedValue); // return true; // } // }); } public void doesNotExist() { ModelLayerFactory modelLayerFactory = ConstellioFactories.getInstance().getModelLayerFactory(); try { modelLayerFactory.newRecordServices().getDocumentById(actual.getId()); fail("Record " + actual.getId() + "-" + actual.getTitle() + " does exist"); } catch (RecordServicesRuntimeException.NoSuchRecordWithId e) { } } public void exist() { ModelLayerFactory modelLayerFactory = ConstellioFactories.getInstance().getModelLayerFactory(); try { modelLayerFactory.newRecordServices().getDocumentById(actual.getId()); } catch (RecordServicesRuntimeException.NoSuchRecordWithId e) { fail("Record " + actual.getId() + "-" + actual.getTitle() + " does not exist"); } } private Object getMetadataValue(Record record, String metadataLocalCode) { MetadataSchema schema = ConstellioFactories.getInstance().getModelLayerFactory() .getMetadataSchemasManager().getSchemaTypes(((Record) record).getCollection()) .getSchema(((Record) record).getSchemaCode()); Metadata metadata = schema.getMetadata(metadataLocalCode); if (metadata.isMultivalue()) { return record.getList(metadata); } else { return record.get(metadata); } } public ListAssert<Object> extracting(String... metadatas) { Object[] objects = new Object[metadatas.length]; if (actual instanceof Record) { for (int i = 0; i < metadatas.length; i++) { String metadata = metadatas[i]; String refMetadata = null; if (metadata.contains(".")) { refMetadata = org.apache.commons.lang3.StringUtils.substringAfter(metadata, "."); metadata = org.apache.commons.lang3.StringUtils.substringBefore(metadata, "."); } objects[i] = getMetadataValue(((Record) actual), metadata); if (refMetadata != null && objects[i] != null) { Record referencedRecord = ConstellioFactories.getInstance().getModelLayerFactory().newRecordServices() .getDocumentById((String) objects[i]); objects[i] = getMetadataValue(referencedRecord, refMetadata); } } } else if (actual instanceof RecordWrapper) { for (int i = 0; i < metadatas.length; i++) { String metadata = metadatas[i]; String refMetadata = null; if (metadata.contains(".")) { refMetadata = org.apache.commons.lang3.StringUtils.substringAfter(metadata, "."); metadata = org.apache.commons.lang3.StringUtils.substringBefore(metadata, "."); } objects[i] = ((RecordWrapper) actual).get(metadata); if (refMetadata != null && objects[i] != null) { if (objects[i] instanceof String) { Record referencedRecord = ConstellioFactories.getInstance().getModelLayerFactory().newRecordServices() .getDocumentById((String) objects[i]); objects[i] = getMetadataValue(referencedRecord, refMetadata); } else if (objects[i] instanceof List) { List<Object> values = new ArrayList<>(); for (Object ref : (List) objects[i]) { Record referencedRecord = ConstellioFactories.getInstance().getModelLayerFactory() .newRecordServices() .getDocumentById((String) ref); values.add(getMetadataValue(referencedRecord, refMetadata)); } objects[i] = values; } else { throw new RuntimeException("Invalid value : " + objects[i].getClass().getSimpleName()); } } } } else { throw new RuntimeException("Unsupported object of class '" + actual.getClass()); } return assertThat(asList(objects)); } } public static List<Tuple> extractingSimpleCodeAndParameters(ValidationRuntimeException e, String... parameters) { return extractingSimpleCodeAndParameters(e.getValidationErrors(), parameters); } public static List<Tuple> extractingSimpleCodeAndParameters(ValidationException e, String... parameters) { return extractingSimpleCodeAndParameters(e.getErrors(), parameters); } public static List<Tuple> extractingSimpleCodeAndParameters(com.constellio.model.frameworks.validation.ValidationException e, String... parameters) { return extractingSimpleCodeAndParameters(e.getValidationErrors(), parameters); } public static List<String> extractingSimpleCode(ValidationErrors errors) { List<String> codes = new ArrayList<>(); for (ValidationError error : errors.getValidationErrors()) { codes.add(StringUtils.substringAfterLast(error.getCode(), ".")); } return codes; } public static List<Tuple> extractingWarningsSimpleCodeAndParameters( com.constellio.model.frameworks.validation.ValidationException e, String... parameters) { return extractingWarningsSimpleCodeAndParameters(e.getValidationErrors(), parameters); } public static List<Tuple> extractingWarningsSimpleCodeAndParameters( com.constellio.model.frameworks.validation.ValidationRuntimeException e, String... parameters) { return extractingWarningsSimpleCodeAndParameters(e.getValidationErrors(), parameters); } public static List<Tuple> extractingWarningsSimpleCodeAndParameters(ValidationErrors errors, String... parameters) { List<Tuple> tuples = new ArrayList<>(); for (ValidationError error : errors.getValidationWarnings()) { Tuple tuple = new Tuple(StringUtils.substringAfterLast(error.getCode(), ".")); for (String parameter : parameters) { tuple.addData(error.getParameters().get(parameter)); } tuples.add(tuple); } return tuples; } public static List<Tuple> extractingSimpleCodeAndParameters(ValidationErrors errors, String... parameters) { List<Tuple> tuples = new ArrayList<>(); for (ValidationError error : errors.getValidationErrors()) { Tuple tuple = new Tuple(StringUtils.substringAfterLast(error.getCode(), ".")); for (String parameter : parameters) { tuple.addData(error.getParameters().get(parameter)); } tuples.add(tuple); } return tuples; } public static List<String> frenchMessages(ValidationRuntimeException e) { return frenchMessages(e.getValidationErrors()); } public static List<String> frenchMessages(ValidationException e) { return frenchMessages(e.getErrors()); } public static List<String> frenchMessages(com.constellio.model.frameworks.validation.ValidationException e) { return frenchMessages(e.getValidationErrors()); } public static List<String> frenchMessages(List<ValidationError> errors) { List<String> messages = new ArrayList<>(); Locale originalLocale = i18n.getLocale(); i18n.setLocale(Locale.FRENCH); for (ValidationError error : errors) { messages.add($(error)); } i18n.setLocale(originalLocale); return messages; } public static List<String> frenchMessages(ValidationErrors errors) { List<String> messages = new ArrayList<>(); Locale originalLocale = i18n.getLocale(); i18n.setLocale(Locale.FRENCH); for (ValidationError error : errors.getValidationErrors()) { messages.add($(error)); } for (ValidationError error : errors.getValidationWarnings()) { messages.add($(error)); } i18n.setLocale(originalLocale); return messages; } public static String frenchMessage(String key, Map<String, Object> args) { Locale originalLocale = i18n.getLocale(); i18n.setLocale(Locale.FRENCH); String value = $(key, args); i18n.setLocale(originalLocale); return value; } public static String englishMessage(String key, Map<String, Object> args) { Locale originalLocale = i18n.getLocale(); i18n.setLocale(Locale.ENGLISH); String value = $(key, args); i18n.setLocale(originalLocale); return value; } public static List<String> englishMessages(ValidationErrors errors) { List<String> messages = new ArrayList<>(); Locale originalLocale = i18n.getLocale(); i18n.setLocale(Locale.ENGLISH); for (ValidationError error : errors.getValidationErrors()) { messages.add($(error)); } i18n.setLocale(originalLocale); return messages; } public static RecordsAssert assertThatAllRecordsOf(MetadataSchemaType type) { SearchServices searchServices = ConstellioFactories.getInstance().getModelLayerFactory().newSearchServices(); return assertThatRecords(searchServices.search(query(from(type).returnAll()))); } public static RecordsAssert assertThatAllRecordsOf(SchemaShortcuts schemaShortcuts) { SearchServices searchServices = ConstellioFactories.getInstance().getModelLayerFactory().newSearchServices(); String schemaTypeCode = SchemaUtils.getSchemaTypeCode(schemaShortcuts.code()); MetadataSchemaType type = ConstellioFactories.getInstance().getModelLayerFactory().getMetadataSchemasManager() .getSchemaTypes(schemaShortcuts.collection()).getSchemaType(schemaTypeCode); return assertThatRecords(searchServices.search(query(from(type).returnAll()))); } public static void assumeWindows() { org.junit.Assume.assumeTrue(System.getProperty("os.name").startsWith("Windows")); } }