diff --git a/clearing-parent/clearing-validation/pom.xml b/clearing-parent/clearing-validation/pom.xml
index 60ad3b00b..174415025 100644
--- a/clearing-parent/clearing-validation/pom.xml
+++ b/clearing-parent/clearing-validation/pom.xml
@@ -73,8 +73,8 @@
test
- org.skyscreamer
- jsonassert
+ org.mockito
+ mockito-core
test
@@ -91,5 +91,11 @@
ru.spcex.platform
platform-messaging
+
+ org.slf4j
+ slf4j-simple
+ 1.7.33
+ test
+
\ No newline at end of file
diff --git a/clearing-parent/clearing-validation/src/test/java/ru/spcex/clearing/util/services/IMDGMessageResolverTest.java b/clearing-parent/clearing-validation/src/test/java/ru/spcex/clearing/util/services/IMDGMessageResolverTest.java
new file mode 100644
index 000000000..9b03cd75f
--- /dev/null
+++ b/clearing-parent/clearing-validation/src/test/java/ru/spcex/clearing/util/services/IMDGMessageResolverTest.java
@@ -0,0 +1,67 @@
+package ru.spcex.clearing.util.services;
+
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import ru.clearing.platform.dictionary.ErrorCodeDictionary;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+import ru.spcex.platform.utils.enumeration.EnumMessage;
+import ru.spcex.platform.utils.enumeration.IErrorEnumId;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class IMDGMessageResolverTest {
+
+ @Test
+ void resolve() {
+ ImdgProvider imdgProvider = Mockito.mock(ImdgProvider.class);
+ Imdg errorCodeDictionary = Mockito.mock(Imdg.class);
+ ErrorCodeDictionary error1Dict = new ErrorCodeDictionary();
+ error1Dict.setId(1L);
+ error1Dict.setCode("TEST");
+ error1Dict.setName("Error 1 test. Two arg %s, %s.");
+ Mockito.when(errorCodeDictionary.getSingleObjectByID(1L)).thenReturn(error1Dict);
+ Mockito.when(imdgProvider.getImdg(IMDGDistributedNames.Map_ErrorCodeDictionary, ErrorCodeDictionary.class))
+ .thenReturn(errorCodeDictionary);
+
+
+ IMDGMessageResolver resolver = new IMDGMessageResolver(imdgProvider);
+
+ IErrorEnumId err1 = ClearingErrorInternalTest.TestError;
+ {
+ String text = resolver.resolve(new EnumMessage(err1, "a", "and", "b"));
+ assertEquals("Error 1 test. Two arg a, and.", text);
+ }
+ {
+ String text = resolver.resolve(new EnumMessage(err1, "a", "and"));
+ assertEquals("Error 1 test. Two arg a, and.", text);
+ }
+ {
+ String text = resolver.resolve(new EnumMessage(err1, "one only this"));
+ //assertEquals("Error 1 test. Two arg one only this, %s.", text);
+ // java.util.MissingFormatArgumentException: Format specifier '%s'
+ assertEquals("(1) args [one only this]", text);
+ }
+ {
+ String text = resolver.resolve(new EnumMessage(err1));
+ //assertEquals("Error 1 test. Two arg %s, %s.", text);
+ // java.util.MissingFormatArgumentException: Format specifier '%s'
+ assertEquals("(1) args []", text);
+ }
+ }
+
+ static enum ClearingErrorInternalTest implements IErrorEnumId { // see ClearingErrorInternal
+ TestError(1L);
+ private final Long id;
+
+ ClearingErrorInternalTest(Long id) {
+ this.id = id;
+ }
+
+ @Override
+ public Long getId() {
+ return id;
+ }
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/NotPresentBySecuritySymbolAndWorkflowStatusActv.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/NotPresentBySecuritySymbolAndWorkflowStatusActv.java
index 397df369b..5b451be2c 100644
--- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/NotPresentBySecuritySymbolAndWorkflowStatusActv.java
+++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/NotPresentBySecuritySymbolAndWorkflowStatusActv.java
@@ -36,7 +36,7 @@ public class NotPresentBySecuritySymbolAndWorkflowStatusActv