Compare commits

...

1 Commits

Author SHA1 Message Date
renaocheng
5689a2638d chore: sync F-meeting-event-enum-alignment 2026-07-16 17:00:19 +08:00
2 changed files with 113 additions and 7 deletions

View File

@@ -365,10 +365,10 @@ func meetingEventsIdentityFromParticipant(participant map[string]interface{}, se
}
}
if identity.ParticipantType == "" {
identity.ParticipantType = "human"
identity.ParticipantType = "unknown"
}
if identity.Role == "" {
identity.Role = "participant"
identity.Role = "unknown"
}
identity.Label = identityLabel(identity)
return identity
@@ -407,8 +407,32 @@ func meetingEventsParticipantTypeFromUserType(raw string) string {
switch raw {
case "1", "user", "human":
return "human"
case "2", "10", "bot", "app":
case "2", "room":
return "room"
case "3", "doc_user":
return "doc_user"
case "4", "neo_user":
return "neo_user"
case "5", "neo_guest_user":
return "neo_guest_user"
case "6", "pstn":
return "pstn"
case "7", "sip":
return "sip"
case "8", "share_box_user":
return "share_box_user"
case "9", "open_platform_app":
return "app"
case "10", "bot", "app":
return "bot"
case "100", "auto_detect":
return "auto_detect"
case "101", "room_detect":
return "room_detect"
case "102", "sid_detect":
return "human"
case "103", "webinar_attendee":
return "webinar_attendee"
case "":
return ""
default:
@@ -441,12 +465,14 @@ func meetingEventsRoleFromEventUserRole(raw string) string {
return "participant"
case "2", "host":
return "host"
case "3", "co_host", "cohost":
return "co_host"
case "4", "bot", "app":
return "bot"
case "", "0":
return ""
default:
return raw
return "unknown"
}
}
@@ -1139,12 +1165,14 @@ func needsColon(description string) bool {
func leaveAction(item map[string]interface{}) string {
switch int(common.GetFloat(item, "leave_reason")) {
case leaveReasonUserLeft:
return "离开了会议"
case leaveReasonMeetingEnded:
return "因会议结束离开了会议"
case leaveReasonKicked:
return "被移出了会议"
default:
return "离开了会议"
return "因未知原因离开了会议"
}
}

View File

@@ -1327,9 +1327,11 @@ func TestLeaveAction(t *testing.T) {
item map[string]interface{}
want string
}{
{name: "user left", item: map[string]interface{}{"leave_reason": leaveReasonUserLeft}, want: "离开了会议"},
{name: "meeting ended", item: map[string]interface{}{"leave_reason": leaveReasonMeetingEnded}, want: "因会议结束离开了会议"},
{name: "kicked", item: map[string]interface{}{"leave_reason": leaveReasonKicked}, want: "被移出了会议"},
{name: "default", item: map[string]interface{}{"leave_reason": leaveReasonUserLeft}, want: "离开了会议"},
{name: "unknown", item: map[string]interface{}{"leave_reason": 0}, want: "因未知原因离开了会议"},
{name: "future", item: map[string]interface{}{"leave_reason": 99}, want: "因未知原因离开了会议"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@@ -1340,6 +1342,27 @@ func TestLeaveAction(t *testing.T) {
}
}
func TestMeetingEventsEndSignalOnlyAcceptsMeetingEndedReason(t *testing.T) {
for _, tt := range []struct {
name string
leaveReason int
wantEnded bool
}{
{name: "unknown", leaveReason: 0, wantEnded: false},
{name: "user left", leaveReason: leaveReasonUserLeft, wantEnded: false},
{name: "meeting ended", leaveReason: leaveReasonMeetingEnded, wantEnded: true},
{name: "kicked", leaveReason: leaveReasonKicked, wantEnded: false},
{name: "future", leaveReason: 99, wantEnded: false},
} {
t.Run(tt.name, func(t *testing.T) {
got := meetingEventsEndSignalFromEvents([]interface{}{participantLeftEventWithReason(tt.leaveReason)})
if got.Ended != tt.wantEnded {
t.Fatalf("meetingEventsEndSignalFromEvents().Ended = %t, want %t", got.Ended, tt.wantEnded)
}
})
}
}
func TestMeetingEventUserWithID(t *testing.T) {
tests := []struct {
name string
@@ -1387,6 +1410,27 @@ func TestMeetingEventsIdentityFromParticipant_UserRoleParticipant(t *testing.T)
}
}
func TestMeetingEventsIdentityFromParticipant_CoHostAndUnknownRole(t *testing.T) {
tests := []struct {
name string
role interface{}
want string
}{
{name: "co host", role: 3, want: "co_host"},
{name: "future", role: 99, want: "unknown"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := meetingEventsIdentityFromParticipant(map[string]interface{}{
"id": "u1", "user_name": "Alice", "user_type": 1, "user_role": tt.role,
}, meetingEventsIdentity{})
if got.Role != tt.want {
t.Fatalf("identity = %#v, want role=%q", got, tt.want)
}
})
}
}
func TestMeetingEventsIdentityFromParticipant_UserTypeApp(t *testing.T) {
got := meetingEventsIdentityFromParticipant(map[string]interface{}{
"id": "ou_app",
@@ -1400,6 +1444,40 @@ func TestMeetingEventsIdentityFromParticipant_UserTypeApp(t *testing.T) {
}
}
func TestMeetingEventsIdentityFromParticipant_KnownUserTypes(t *testing.T) {
tests := []struct {
name string
userType int
want string
}{
{name: "human", userType: 1, want: "human"},
{name: "room", userType: 2, want: "room"},
{name: "doc user", userType: 3, want: "doc_user"},
{name: "neo user", userType: 4, want: "neo_user"},
{name: "neo guest", userType: 5, want: "neo_guest_user"},
{name: "pstn", userType: 6, want: "pstn"},
{name: "sip", userType: 7, want: "sip"},
{name: "share box", userType: 8, want: "share_box_user"},
{name: "open platform app", userType: 9, want: "app"},
{name: "meeting bot", userType: 10, want: "bot"},
{name: "auto detect", userType: 100, want: "auto_detect"},
{name: "room detect", userType: 101, want: "room_detect"},
{name: "sid detect", userType: 102, want: "human"},
{name: "webinar attendee", userType: 103, want: "webinar_attendee"},
{name: "future", userType: 999, want: "unknown"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := meetingEventsIdentityFromParticipant(map[string]interface{}{
"id": "u1", "user_name": "Alice", "user_type": tt.userType, "user_role": 1,
}, meetingEventsIdentity{})
if got.ParticipantType != tt.want {
t.Fatalf("identity = %#v, want participant_type=%q", got, tt.want)
}
})
}
}
func TestMeetingEventsIdentityFromParticipant_UnknownUserType(t *testing.T) {
got := meetingEventsIdentityFromParticipant(map[string]interface{}{
"id": "u_unknown",
@@ -1420,7 +1498,7 @@ func TestMeetingEventsIdentityFromParticipant_IgnoresGenericTypeField(t *testing
"type": "bot",
}, meetingEventsIdentity{})
if got.ParticipantType != "human" {
if got.ParticipantType != "unknown" {
t.Fatalf("identity = %#v, generic type field should not drive participant_type", got)
}
}