|
@@ -30,9 +30,11 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
|
import static org.mockito.ArgumentMatchers.anyMap;
|
|
import static org.mockito.ArgumentMatchers.anyMap;
|
|
|
|
|
+import static org.mockito.ArgumentMatchers.argThat;
|
|
|
import static org.mockito.ArgumentMatchers.eq;
|
|
import static org.mockito.ArgumentMatchers.eq;
|
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.mock;
|
|
|
import static org.mockito.Mockito.never;
|
|
import static org.mockito.Mockito.never;
|
|
|
|
|
+import static org.mockito.Mockito.times;
|
|
|
import static org.mockito.Mockito.verify;
|
|
import static org.mockito.Mockito.verify;
|
|
|
import static org.mockito.Mockito.when;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
|
|
|
@@ -113,6 +115,62 @@ class CustomerReleaseDepartmentConfigurationTest {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void fillsFinanceManagerUsingFinanceDepartmentDefaultInsteadOfApplicantDepartment() {
|
|
|
|
|
+ Map<String, Object> applicantConfiguration = Collections.<String, Object>singletonMap(
|
|
|
|
|
+ "employeeField_mszdqrl8_id", Collections.singletonList("applicant-manager"));
|
|
|
|
|
+ try (Fixture fixture = new Fixture(Collections.<String, Object>singletonMap("main_dept_id", 20L), applicantConfiguration)) {
|
|
|
|
|
+ fixture.financeConfiguration = new LinkedHashMap<String, Object>();
|
|
|
|
|
+ fixture.financeConfiguration.put("employeeField_mszdqrl8", Collections.singletonList("Finance Display Name"));
|
|
|
|
|
+ fixture.financeConfiguration.put("employeeField_mszdqrl8_id", Collections.singletonList("finance-manager"));
|
|
|
|
|
+ JSONObject form = fixture.start();
|
|
|
|
|
+ assertEquals("962219827", form.getString("textField_mte1kc0i"));
|
|
|
|
|
+ assertEquals(Collections.singletonList("finance-manager"), form.getJSONArray("employeeField_mte1kc0g"));
|
|
|
|
|
+ assertEquals(Collections.singletonList("applicant-manager"), form.getJSONArray("employeeField_mt6thsdh"));
|
|
|
|
|
+ fixture.verifyFinanceQuery("962219827");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @ParameterizedTest
|
|
|
|
|
+ @ValueSource(booleans = {true, false})
|
|
|
|
|
+ void startsNormallyWhenFinanceConfigurationOrManagerIsMissing(boolean noRecord) {
|
|
|
|
|
+ try (Fixture fixture = new Fixture(Collections.<String, Object>singletonMap("main_dept_id", 20L), null)) {
|
|
|
|
|
+ if (!noRecord) {
|
|
|
|
|
+ fixture.financeConfiguration = new LinkedHashMap<String, Object>();
|
|
|
|
|
+ fixture.financeConfiguration.put("employeeField_mszdqrl8", Collections.singletonList("Display Name Only"));
|
|
|
|
|
+ fixture.financeConfiguration.put("employeeField_mszdqrl8_id", Collections.emptyList());
|
|
|
|
|
+ }
|
|
|
|
|
+ JSONObject form = fixture.start();
|
|
|
|
|
+ assertEquals("962219827", form.getString("textField_mte1kc0i"));
|
|
|
|
|
+ assertFalse(form.containsKey("employeeField_mte1kc0g"));
|
|
|
|
|
+ fixture.verifyFinanceQuery("962219827");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void usesProvidedFinanceDepartmentBeforeTheDefault() {
|
|
|
|
|
+ try (Fixture fixture = new Fixture(Collections.<String, Object>singletonMap("main_dept_id", 20L), null)) {
|
|
|
|
|
+ ((ErpYidaPushMainData) fixture.request.getMainData()).setExtraField("textField_mte1kc0i", "30");
|
|
|
|
|
+ fixture.financeDepartmentId = "30";
|
|
|
|
|
+ fixture.financeConfiguration = Collections.<String, Object>singletonMap(
|
|
|
|
|
+ "employeeField_mszdqrl8_id", Collections.singletonList("other-finance-manager"));
|
|
|
|
|
+ JSONObject form = fixture.start();
|
|
|
|
|
+ assertEquals("30", form.getString("textField_mte1kc0i"));
|
|
|
|
|
+ assertEquals(Collections.singletonList("other-finance-manager"), form.getJSONArray("employeeField_mte1kc0g"));
|
|
|
|
|
+ fixture.verifyFinanceQuery("30");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void doesNotStartWhenFinanceConfigurationQueryFails() {
|
|
|
|
|
+ try (Fixture fixture = new Fixture(Collections.<String, Object>singletonMap("main_dept_id", 20L), null)) {
|
|
|
|
|
+ when(fixture.masterDataClient.queryData(argThat((YDParam parameter) -> parameter.getSearchFieldJson().contains("962219827")),
|
|
|
|
|
+ eq(YDConf.FORM_QUERY.retrieve_search_form))).thenThrow(new IllegalStateException("Finance configuration unavailable"));
|
|
|
|
|
+ assertThrows(IllegalStateException.class, () -> fixture.handler.push(fixture.request));
|
|
|
|
|
+ verify(fixture.processClient, never()).startProcess(anyMap());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private static class Fixture implements AutoCloseable {
|
|
private static class Fixture implements AutoCloseable {
|
|
|
private final YDClient masterDataClient = mock(YDClient.class);
|
|
private final YDClient masterDataClient = mock(YDClient.class);
|
|
|
private final YidaProcessOpenApiClient processClient = mock(YidaProcessOpenApiClient.class);
|
|
private final YidaProcessOpenApiClient processClient = mock(YidaProcessOpenApiClient.class);
|
|
@@ -120,6 +178,8 @@ class CustomerReleaseDepartmentConfigurationTest {
|
|
|
private final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
|
|
private final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
|
|
|
private final ErpYidaPushRequest request = new ErpYidaPushRequest();
|
|
private final ErpYidaPushRequest request = new ErpYidaPushRequest();
|
|
|
private final CustomerReleaseFormPushHandler handler;
|
|
private final CustomerReleaseFormPushHandler handler;
|
|
|
|
|
+ private String financeDepartmentId = "962219827";
|
|
|
|
|
+ private Map<String, Object> financeConfiguration;
|
|
|
|
|
|
|
|
private Fixture(Map<String, Object> user, Map<String, Object> configuration) {
|
|
private Fixture(Map<String, Object> user, Map<String, Object> configuration) {
|
|
|
DDClient dingTalkClient = mock(DDClient.class);
|
|
DDClient dingTalkClient = mock(DDClient.class);
|
|
@@ -133,11 +193,16 @@ class CustomerReleaseDepartmentConfigurationTest {
|
|
|
applications.getCoordinationOffice().setSystemToken("office-token");
|
|
applications.getCoordinationOffice().setSystemToken("office-token");
|
|
|
applications.getMasterData().setAppType("APP_KI0AOTH7OLFS2UAUHZXI");
|
|
applications.getMasterData().setAppType("APP_KI0AOTH7OLFS2UAUHZXI");
|
|
|
applications.getMasterData().setSystemToken("master-data-token");
|
|
applications.getMasterData().setSystemToken("master-data-token");
|
|
|
- DDR_New queryResponse = mock(DDR_New.class);
|
|
|
|
|
- when(queryResponse.getRecords()).thenReturn(configuration == null ? Collections.emptyList()
|
|
|
|
|
- : Collections.singletonList(Collections.singletonMap("formData", configuration)));
|
|
|
|
|
when(masterDataClient.queryData(any(YDParam.class), eq(YDConf.FORM_QUERY.retrieve_search_form)))
|
|
when(masterDataClient.queryData(any(YDParam.class), eq(YDConf.FORM_QUERY.retrieve_search_form)))
|
|
|
- .thenReturn(queryResponse);
|
|
|
|
|
|
|
+ .thenAnswer(invocation -> {
|
|
|
|
|
+ YDParam parameter = invocation.getArgument(0);
|
|
|
|
|
+ String departmentId = JSONObject.parseArray(parameter.getSearchFieldJson()).getJSONObject(0).getString("value");
|
|
|
|
|
+ Map<String, Object> selected = financeDepartmentId.equals(departmentId) ? financeConfiguration : configuration;
|
|
|
|
|
+ DDR_New queryResponse = mock(DDR_New.class);
|
|
|
|
|
+ when(queryResponse.getRecords()).thenReturn(selected == null ? Collections.emptyList()
|
|
|
|
|
+ : Collections.singletonList(Collections.singletonMap("formData", selected)));
|
|
|
|
|
+ return queryResponse;
|
|
|
|
|
+ });
|
|
|
DDR_New startResponse = new DDR_New();
|
|
DDR_New startResponse = new DDR_New();
|
|
|
startResponse.setResult("process-1");
|
|
startResponse.setResult("process-1");
|
|
|
when(processClient.startProcess(anyMap())).thenReturn(startResponse);
|
|
when(processClient.startProcess(anyMap())).thenReturn(startResponse);
|
|
@@ -156,6 +221,7 @@ class CustomerReleaseDepartmentConfigurationTest {
|
|
|
main.setExtraField("employeeField_mt6thsdh", Collections.singletonList("wrong-manager"));
|
|
main.setExtraField("employeeField_mt6thsdh", Collections.singletonList("wrong-manager"));
|
|
|
main.setExtraField("employeeField_mt6thsdi", Collections.singletonList("wrong-manager"));
|
|
main.setExtraField("employeeField_mt6thsdi", Collections.singletonList("wrong-manager"));
|
|
|
main.setExtraField("employeeField_mt6v6alx", Collections.singletonList("wrong-manager"));
|
|
main.setExtraField("employeeField_mt6v6alx", Collections.singletonList("wrong-manager"));
|
|
|
|
|
+ main.setExtraField("employeeField_mte1kc0g", Collections.singletonList("wrong-finance-manager"));
|
|
|
request.setType("axmt140");
|
|
request.setType("axmt140");
|
|
|
request.setOriginatorUserId("applicant-1");
|
|
request.setOriginatorUserId("applicant-1");
|
|
|
request.setGs("ERP Company");
|
|
request.setGs("ERP Company");
|
|
@@ -175,10 +241,23 @@ class CustomerReleaseDepartmentConfigurationTest {
|
|
|
private void verifyDepartmentQuery(String departmentId) {
|
|
private void verifyDepartmentQuery(String departmentId) {
|
|
|
verify(contactsClient).getUserInfoById("access-token", "applicant-1");
|
|
verify(contactsClient).getUserInfoById("access-token", "applicant-1");
|
|
|
ArgumentCaptor<YDParam> parameter = ArgumentCaptor.forClass(YDParam.class);
|
|
ArgumentCaptor<YDParam> parameter = ArgumentCaptor.forClass(YDParam.class);
|
|
|
- verify(masterDataClient).queryData(parameter.capture(), eq(YDConf.FORM_QUERY.retrieve_search_form));
|
|
|
|
|
- assertEquals("APP_KI0AOTH7OLFS2UAUHZXI", parameter.getValue().getAppType());
|
|
|
|
|
- assertEquals("FORM-8F527F696C5B4AF7AB7A53979527FBA23USO", parameter.getValue().getFormUuid());
|
|
|
|
|
- JSONObject filter = JSONObject.parseArray(parameter.getValue().getSearchFieldJson()).getJSONObject(0);
|
|
|
|
|
|
|
+ verify(masterDataClient, times(2)).queryData(parameter.capture(), eq(YDConf.FORM_QUERY.retrieve_search_form));
|
|
|
|
|
+ YDParam applicantQuery = parameter.getAllValues().get(0);
|
|
|
|
|
+ assertEquals("APP_KI0AOTH7OLFS2UAUHZXI", applicantQuery.getAppType());
|
|
|
|
|
+ assertEquals("FORM-8F527F696C5B4AF7AB7A53979527FBA23USO", applicantQuery.getFormUuid());
|
|
|
|
|
+ JSONObject filter = JSONObject.parseArray(applicantQuery.getSearchFieldJson()).getJSONObject(0);
|
|
|
|
|
+ assertEquals("textField_msztwhs2", filter.getString("key"));
|
|
|
|
|
+ assertEquals(departmentId, filter.getString("value"));
|
|
|
|
|
+ assertEquals("eq", filter.getString("operator"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void verifyFinanceQuery(String departmentId) {
|
|
|
|
|
+ ArgumentCaptor<YDParam> parameter = ArgumentCaptor.forClass(YDParam.class);
|
|
|
|
|
+ verify(masterDataClient, times(2)).queryData(parameter.capture(), eq(YDConf.FORM_QUERY.retrieve_search_form));
|
|
|
|
|
+ YDParam financeQuery = parameter.getAllValues().get(1);
|
|
|
|
|
+ assertEquals("APP_KI0AOTH7OLFS2UAUHZXI", financeQuery.getAppType());
|
|
|
|
|
+ assertEquals("FORM-8F527F696C5B4AF7AB7A53979527FBA23USO", financeQuery.getFormUuid());
|
|
|
|
|
+ JSONObject filter = JSONObject.parseArray(financeQuery.getSearchFieldJson()).getJSONObject(0);
|
|
|
assertEquals("textField_msztwhs2", filter.getString("key"));
|
|
assertEquals("textField_msztwhs2", filter.getString("key"));
|
|
|
assertEquals(departmentId, filter.getString("value"));
|
|
assertEquals(departmentId, filter.getString("value"));
|
|
|
assertEquals("eq", filter.getString("operator"));
|
|
assertEquals("eq", filter.getString("operator"));
|