Files
baiyue-firstleg/integration-service/src/test/java/com/baiyue/integration/provider/HedeTrackingClientTest.java
T

60 lines
2.5 KiB
Java
Raw Normal View History

2026-08-21 16:04:16 +08:00
package com.baiyue.integration.provider;
import com.baiyue.integration.config.IntegrationProperties;
import com.baiyue.integration.dto.CarrierScheduleDtos.QueryRequest;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpServer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.concurrent.atomic.AtomicReference;
import static org.assertj.core.api.Assertions.assertThat;
class HedeTrackingClientTest {
private HttpServer server;
@AfterEach
void stopServer() { if (server != null) server.stop(0); }
@Test
void postsTheConfirmedHedeFormAsUtf8() throws Exception {
AtomicReference<String> postedBody = new AtomicReference<>();
server = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0);
server.createContext("/getVBilldynamic", exchange -> {
postedBody.set(new String(exchange.getRequestBody().readAllBytes(), StandardCharsets.UTF_8));
respond(exchange, 200, "<html><table><tr class=\"read-tr\"><td>***</td>"
+ "<td>XYLU8251457</td></tr></table></html>");
});
server.start();
var hede = new IntegrationProperties.CarrierSchedule.Hede(true,
URI.create("http://127.0.0.1:" + server.getAddress().getPort() + "/getVBilldynamic"),
Duration.ofSeconds(2), Duration.ofSeconds(2), Duration.ZERO);
HedeTrackingClient client = new HedeTrackingClient();
ReflectionTestUtils.setField(client, "properties", new IntegrationProperties(null, null,
new IntegrationProperties.CarrierSchedule(null, hede, null, null, null)));
client.initialize();
var response = client.query(new QueryRequest("HEDE", "CONTAINER_NO", "XYLU8251457"));
assertThat(response.html()).contains("XYLU8251457");
assertThat(postedBody.get()).isEqualTo(
"billno=&cntr=XYLU8251457&selecttype=1&resultlist=1&paramtype=0");
}
private static void respond(HttpExchange exchange, int status, String body) throws IOException {
byte[] bytes = body.getBytes(StandardCharsets.UTF_8);
exchange.getResponseHeaders().add("Content-Type", "text/html; charset=UTF-8");
exchange.sendResponseHeaders(status, bytes.length);
exchange.getResponseBody().write(bytes);
exchange.close();
}
}