Skip to content

Commit a651123

Browse files
committed
新增视频号客服消息模型
1 parent 8e6f58e commit a651123

5 files changed

Lines changed: 161 additions & 0 deletions

File tree

.superpowers/sdd/task-1-report.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Task 1 报告
2+
3+
## 修改
4+
5+
- 新增 `WxChannelKfCosUploadResponse`,映射 `cos_url` 并继承频道基础响应。
6+
- 新增 `WxChannelKfSendMsgParam`,映射 `request_id``open_id``msg_type` 和嵌套 `text.content`
7+
- 新增 `WxChannelKfSendMsgResponse`,映射 `msg_id` 并继承频道基础响应。
8+
- 新增 TestNG JSON 编解码测试 `WxChannelKfBeanTest`
9+
10+
## TDD 测试
11+
12+
- 红灯:`mvn -pl weixin-java-channel -Dtest=WxChannelKfBeanTest -DfailIfNoTests=false test`,因 3 个模型类不存在,在 testCompile 阶段失败。
13+
- 绿灯:`mvn -pl weixin-java-channel dependency:build-classpath -Dmdep.outputFile=/tmp/wxjava-channel-test-cp.txt -Dmdep.includeScope=test -q && TEST_CP="$(cat /tmp/wxjava-channel-test-cp.txt)" && java -cp "weixin-java-channel/target/test-classes:weixin-java-channel/target/classes:${TEST_CP}" org.testng.TestNG -testclass me.chanjar.weixin.channel.bean.kf.WxChannelKfBeanTest`,3 个测试通过,0 失败,0 跳过。
14+
- `git diff --check`:通过。
15+
16+
## Commit
17+
18+
`d742d673b`(新增视频号客服消息模型)。
19+
20+
## 顾虑
21+
22+
仓库父 POM 的 Surefire pluginManagement 默认配置 `skip=true`,因此 Maven 测试命令会显示 Tests are skipped;已使用同一编译产物和依赖通过 TestNG CLI 实际执行测试。
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package me.chanjar.weixin.channel.bean.kf;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Data;
5+
import lombok.EqualsAndHashCode;
6+
import lombok.NoArgsConstructor;
7+
import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse;
8+
9+
/** 客服素材上传响应。 */
10+
@Data
11+
@NoArgsConstructor
12+
@EqualsAndHashCode(callSuper = true)
13+
public class WxChannelKfCosUploadResponse extends WxChannelBaseResponse {
14+
15+
private static final long serialVersionUID = 1L;
16+
17+
/** 素材在 COS 上的地址。 */
18+
@JsonProperty("cos_url")
19+
private String cosUrl;
20+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package me.chanjar.weixin.channel.bean.kf;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import java.io.Serializable;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
/** 发送客服消息请求参数。 */
9+
@Data
10+
@NoArgsConstructor
11+
public class WxChannelKfSendMsgParam implements Serializable {
12+
13+
private static final long serialVersionUID = 1L;
14+
15+
/** 请求幂等标识。 */
16+
@JsonProperty("request_id")
17+
private String requestId;
18+
19+
/** 接收消息的用户 openid。 */
20+
@JsonProperty("open_id")
21+
private String openId;
22+
23+
/** 消息类型。 */
24+
@JsonProperty("msg_type")
25+
private String msgType;
26+
27+
/** 文本消息内容。 */
28+
@JsonProperty("text")
29+
private Text text;
30+
31+
@Data
32+
@NoArgsConstructor
33+
public static class Text implements Serializable {
34+
35+
private static final long serialVersionUID = 1L;
36+
37+
@JsonProperty("content")
38+
private String content;
39+
}
40+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package me.chanjar.weixin.channel.bean.kf;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Data;
5+
import lombok.EqualsAndHashCode;
6+
import lombok.NoArgsConstructor;
7+
import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse;
8+
9+
/** 发送客服消息响应。 */
10+
@Data
11+
@NoArgsConstructor
12+
@EqualsAndHashCode(callSuper = true)
13+
public class WxChannelKfSendMsgResponse extends WxChannelBaseResponse {
14+
15+
private static final long serialVersionUID = 1L;
16+
17+
/** 消息 id。 */
18+
@JsonProperty("msg_id")
19+
private String msgId;
20+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package me.chanjar.weixin.channel.bean.kf;
2+
3+
import static org.testng.Assert.assertEquals;
4+
import static org.testng.Assert.assertFalse;
5+
import static org.testng.Assert.assertNotNull;
6+
7+
import me.chanjar.weixin.channel.util.JsonUtils;
8+
import org.testng.annotations.Test;
9+
10+
/** JSON serialization tests for channel customer service models. */
11+
public class WxChannelKfBeanTest {
12+
13+
@Test
14+
public void testSendMsgParamJson() {
15+
WxChannelKfSendMsgParam param = new WxChannelKfSendMsgParam();
16+
param.setRequestId("request-1");
17+
param.setOpenId("open-1");
18+
param.setMsgType("text");
19+
WxChannelKfSendMsgParam.Text text = new WxChannelKfSendMsgParam.Text();
20+
text.setContent("hello");
21+
param.setText(text);
22+
23+
String json = JsonUtils.encode(param);
24+
assertNotNull(json);
25+
assertFalse(json.contains("requestId"));
26+
assertFalse(json.contains("openId"));
27+
assertFalse(json.contains("msgType"));
28+
WxChannelKfSendMsgParam decoded = JsonUtils.decode(json, WxChannelKfSendMsgParam.class);
29+
assertEquals(decoded.getRequestId(), "request-1");
30+
assertEquals(decoded.getOpenId(), "open-1");
31+
assertEquals(decoded.getMsgType(), "text");
32+
assertNotNull(decoded.getText());
33+
assertEquals(decoded.getText().getContent(), "hello");
34+
}
35+
36+
@Test
37+
public void testCosUploadResponseJson() {
38+
WxChannelKfCosUploadResponse response = JsonUtils.decode(
39+
"{\"errcode\":0,\"errmsg\":\"ok\",\"cos_url\":\"https://example.test/media\"}",
40+
WxChannelKfCosUploadResponse.class);
41+
42+
assertEquals(response.getErrCode(), 0);
43+
assertEquals(response.getCosUrl(), "https://example.test/media");
44+
assertEquals(JsonUtils.decode(JsonUtils.encode(response), WxChannelKfCosUploadResponse.class)
45+
.getCosUrl(), "https://example.test/media");
46+
}
47+
48+
@Test
49+
public void testSendMsgResponseJson() {
50+
WxChannelKfSendMsgResponse response = JsonUtils.decode(
51+
"{\"errcode\":0,\"errmsg\":\"ok\",\"msg_id\":\"msg-1\"}",
52+
WxChannelKfSendMsgResponse.class);
53+
54+
assertEquals(response.getErrCode(), 0);
55+
assertEquals(response.getMsgId(), "msg-1");
56+
assertEquals(JsonUtils.decode(JsonUtils.encode(response), WxChannelKfSendMsgResponse.class)
57+
.getMsgId(), "msg-1");
58+
}
59+
}

0 commit comments

Comments
 (0)