|
|
@@ -0,0 +1,120 @@
|
|
|
+package com.malk.cloudpure.controller;
|
|
|
+
|
|
|
+import com.malk.cloudpure.dto.H3CustomerListRequest;
|
|
|
+import com.malk.cloudpure.service.H3OpenApiClient;
|
|
|
+import com.malk.server.common.McException;
|
|
|
+import com.malk.server.common.McR;
|
|
|
+import org.junit.Before;
|
|
|
+import org.junit.Test;
|
|
|
+
|
|
|
+import java.lang.reflect.Field;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import static org.junit.Assert.assertEquals;
|
|
|
+import static org.junit.Assert.assertNull;
|
|
|
+import static org.junit.Assert.assertTrue;
|
|
|
+import static org.junit.Assert.fail;
|
|
|
+
|
|
|
+/** 客户名称查询的权限取消及原有输入、响应契约回归。 */
|
|
|
+public class H3yunControllerTest {
|
|
|
+
|
|
|
+ private H3yunController controller;
|
|
|
+ private CustomerClientStub client;
|
|
|
+
|
|
|
+ @Before
|
|
|
+ public void setUp() throws ReflectiveOperationException {
|
|
|
+ controller = new H3yunController();
|
|
|
+ client = new CustomerClientStub();
|
|
|
+ Field field = H3yunController.class.getDeclaredField("h3OpenApiClient");
|
|
|
+ field.setAccessible(true);
|
|
|
+ field.set(controller, client);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void queriesCustomersWithoutUserIdOrOwnershipFields() {
|
|
|
+ client.rows = Arrays.asList(customer("CloudPure甲"), customer("其他客户"), customer("cloudpure乙"));
|
|
|
+
|
|
|
+ McR response = controller.customerList(request("CLOUDPURE", null));
|
|
|
+
|
|
|
+ assertTrue(response.isSuccess());
|
|
|
+ assertEquals(Arrays.asList(name("CloudPure甲"), name("cloudpure乙")), response.getData());
|
|
|
+ assertEquals(1, client.calls);
|
|
|
+ assertEquals("D00086786d02a447942405d9e27821538a57834", client.schemaCode);
|
|
|
+ assertNull(client.matcher);
|
|
|
+ assertEquals(Collections.singletonList("F0000001"), client.returnFields);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void legacyAndUnmappedUserIdsDoNotChangeResults() {
|
|
|
+ client.rows = Collections.singletonList(customer("云璞"));
|
|
|
+ Object expected = controller.customerList(request("云璞", null)).getData();
|
|
|
+
|
|
|
+ for (String userId : Arrays.asList("", "old-user", "unmapped-user")) {
|
|
|
+ assertEquals(expected, controller.customerList(request("云璞", userId)).getData());
|
|
|
+ }
|
|
|
+ assertEquals(4, client.calls);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void returnsEmptyListWhenNameDoesNotMatch() {
|
|
|
+ client.rows = Arrays.asList(customer("其他客户"), customer(null));
|
|
|
+
|
|
|
+ assertEquals(Collections.emptyList(), controller.customerList(request("云璞", null)).getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void rejectsMissingOrBlankNamesBeforeQuerying() {
|
|
|
+ for (String name : Arrays.asList(null, "", " ")) {
|
|
|
+ assertInvalid(request(name, null));
|
|
|
+ }
|
|
|
+ assertInvalid(null);
|
|
|
+ assertEquals(0, client.calls);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void assertInvalid(H3CustomerListRequest request) {
|
|
|
+ try {
|
|
|
+ controller.customerList(request);
|
|
|
+ fail("空客户名称必须被拒绝");
|
|
|
+ } catch (McException expected) {
|
|
|
+ assertTrue(expected.getMessage().contains("name"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private H3CustomerListRequest request(String name, String userId) {
|
|
|
+ H3CustomerListRequest request = new H3CustomerListRequest();
|
|
|
+ request.setName(name);
|
|
|
+ request.setUserId(userId);
|
|
|
+ return request;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Object> customer(String name) {
|
|
|
+ Map<String, Object> row = new HashMap<>();
|
|
|
+ row.put("F0000001", name);
|
|
|
+ return row;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, String> name(String name) {
|
|
|
+ return Collections.singletonMap("name", name);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static class CustomerClientStub extends H3OpenApiClient {
|
|
|
+ private List<Map> rows = Collections.emptyList();
|
|
|
+ private int calls;
|
|
|
+ private String schemaCode;
|
|
|
+ private Map matcher;
|
|
|
+ private List<String> returnFields;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map> queryData(String schemaCode, Map matcher, List<String> returnFields) {
|
|
|
+ this.calls++;
|
|
|
+ this.schemaCode = schemaCode;
|
|
|
+ this.matcher = matcher;
|
|
|
+ this.returnFields = returnFields;
|
|
|
+ return rows;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|