Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update: Make WxCP compatible with privatized version like ptr.version #1624

Merged
merged 1 commit into from
Jun 17, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public class WxCpUser implements Serializable {
private Long[] departIds;
private Integer[] orders;
private String position;
private String[] positions;
private String mobile;
private Gender gender;
private String email;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@ public WxCpUser deserialize(JsonElement json, Type typeOfT, JsonDeserializationC
user.setOrders(orders);
}

if (o.get("positions") != null) {
JsonArray positionJsonArray = o.get("positions").getAsJsonArray();
String[] positions = new String[positionJsonArray.size()];
int i = 0;
for (JsonElement jsonElement : positionJsonArray) {
positions[i++] = jsonElement.getAsString();
}
user.setPositions(positions);
}

user.setUserId(GsonHelper.getString(o, "userid"));
user.setName(GsonHelper.getString(o, "name"));
user.setPosition(GsonHelper.getString(o, "position"));
Expand Down Expand Up @@ -198,6 +208,15 @@ public JsonElement serialize(WxCpUser user, Type typeOfSrc, JsonSerializationCon
if (user.getPosition() != null) {
o.addProperty("position", user.getPosition());
}

if (user.getPositions() != null) {
JsonArray jsonArray = new JsonArray();
for (String position : user.getPositions()) {
jsonArray.add(new JsonPrimitive(position));
}
o.add("positions", jsonArray);
}

if (user.getMobile() != null) {
o.addProperty("mobile", user.getMobile());
}
Expand Down Expand Up @@ -265,6 +284,8 @@ public JsonElement serialize(WxCpUser user, Type typeOfSrc, JsonSerializationCon
attrsJsonArray.add(attrJson);

if (attr.getType() == null) {
attrJson.addProperty("name", attr.getName());
attrJson.addProperty("value", attr.getTextValue());
continue;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package me.chanjar.weixin.cp.util.json;

import me.chanjar.weixin.cp.bean.WxCpUser;
import org.testng.annotations.Test;

import static org.assertj.core.api.Assertions.assertThat;

/**
* <pre>
* 企业微信(私有化版本getUser兼容测试)
* </pre>
*
* @author 庄壮壮
* @since 2020-06-16 09:36
*/
public class WxCpUserGsonAdapterForPrivatizedVersionTest {

@Test
public void testDeserialize() {
final String userJson = "{\n" +
" \"errcode\": 0,\n" +
" \"errmsg\": \"ok\",\n" +
" \"userid\": \"zhangsan\",\n" +
" \"name\": \"李四\",\n" +
" \"department\": [1, 2],\n" +
" \"order\": [2, 10],\n" +
" \"position\": \"后台工程师1\",\n" +
" \"positions\": [\"后台工程师1\",\"后台工程师2\"],\n" +
" \"mobile\": \"15913215421\",\n" +
" \"hide_mobile\": 0,\n" +
" \"gender\": \"1\",\n" +
" \"email\": \"zhangsan@gzdev.com\",\n" +
" \"is_leader_in_dept\": [1, 0],\n" +
" \"avatar\": \"http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0\",\n" +
" \"telephone\": \"020-123456\",\n" +
" \"english_name\": \"jackzhang\",\n" +
" \"extattr\": {\"attrs\":[{\"name\":\"爱好\",\"value\":\"旅游\"},{\"name\":\"卡号\",\"value\":\"1234567234\"}]},\n" +
" \"status\": 1,\n" +
" \"enable\": 0,\n" +
" \"qr_code\": \"https://wwlocal.qq.com/wework_admin/userQRCode?vcode=vc2140a8b3c6207c74&lvc=vcf6f1acfdc4b45088\"\n" +
"}";

final WxCpUser user = WxCpUser.fromJson(userJson);
assertThat(user).isNotNull();

// test order
assertThat(user.getOrders()).isNotEmpty();
assertThat(user.getOrders().length).isEqualTo(2);
assertThat(user.getOrders()[0]).isEqualTo(2);
assertThat(user.getOrders()[1]).isEqualTo(10);

// test english name
assertThat(user.getEnglishName()).isEqualTo("jackzhang");

// test extattrs
assertThat(user.getExtAttrs()).isNotEmpty();
final WxCpUser.Attr extraAttr1 = user.getExtAttrs().get(0);
assertThat(extraAttr1.getName()).isEqualTo("爱好");
assertThat(extraAttr1.getTextValue()).isEqualTo("旅游");
final WxCpUser.Attr extraAttr2 = user.getExtAttrs().get(1);
assertThat(extraAttr2.getName()).isEqualTo("卡号");
assertThat(extraAttr2.getTextValue()).isEqualTo("1234567234");

// test position
assertThat(user.getPosition()).isEqualTo("后台工程师1");
// test positions
assertThat(user.getPositions()).isNotEmpty();
assertThat(user.getPositions().length).isEqualTo(2);
assertThat(user.getPositions()[0]).isEqualTo("后台工程师1");
assertThat(user.getPositions()[1]).isEqualTo("后台工程师2");
}

@Test
public void testSerialize() {
WxCpUser user = new WxCpUser();
user.setOrders(new Integer[]{1, 2});
user.setPositions(new String[]{"后台工程师1", "后台工程师2"});
user.setEnglishName("jackson");
WxCpUser.Attr attr1 = new WxCpUser.Attr();
attr1.setName("爱好").setTextValue("旅游");
WxCpUser.Attr attr2 = new WxCpUser.Attr();
attr2.setName("卡号").setTextValue("1234567234");

user.addExtAttr(attr1);
user.addExtAttr(attr2);

assertThat(user.toJson()).isEqualTo("{\"order\":[1,2],\"positions\":[\"后台工程师1\",\"后台工程师2\"],\"english_name\":\"jackson\",\"extattr\":{\"attrs\":[{\"name\":\"爱好\",\"value\":\"旅游\"},{\"name\":\"卡号\",\"value\":\"1234567234\"}]},\"external_profile\":{}}");
}
}