Skip to content
Draft
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
38 changes: 33 additions & 5 deletions shortcuts/vc/vc_meeting_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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"
}
}

Expand Down Expand Up @@ -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 "因未知原因离开了会议"
}
}

Expand Down
82 changes: 80 additions & 2 deletions shortcuts/vc/vc_meeting_events_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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
Expand Down Expand Up @@ -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",
Expand All @@ -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",
Expand All @@ -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)
}
}
Expand Down
Loading