Gradle Test Run :app:testDevDebugUnitTest

RoomViewModelTest

summary

202

tests

0

failures

0

skipped

30.118s

duration

100%

successful

Child Tests Failures Skipped Duration Success rate
acceptApprovedRequest - already seated dismisses notification without re-seating 1 0 0 0.025s 100%
acceptApprovedRequest - falls back to next available seat when original is occupied 1 0 0 0.115s 100%
acceptApprovedRequest - no seats available shows error 1 0 0 0.021s 100%
acceptApprovedRequest - sees Success status 1 0 0 0.022s 100%
acceptApprovedRequest calls takeSeat 1 0 0 0.034s 100%
acceptInvite - all seats occupied is no-op 1 0 0 0.040s 100%
acceptInvite - finds first empty non-owner seat 1 0 0 0.021s 100%
acceptInvite - no pending invite is no-op 1 0 0 0.069s 100%
addHost - attendee cannot add a host 1 0 0 0.026s 100%
addHost - does not send system message 1 0 0 0.056s 100%
addHost - non-owner cannot add a host 1 0 0 0.037s 100%
addHost - owner can add a host 1 0 0 0.026s 100%
allKnownUsers accumulates and retains departed users 1 0 0 0.061s 100%
alreadyInRoom path sets isSeated but does not auto-enable mic on permission grant 1 0 0 0.018s 100%
alreadyInRoom path without seat does not enable mic 1 0 0 0.073s 100%
approved request does NOT show notification if user is already seated 1 0 0 0.046s 100%
approved request removes queued invite 1 0 0 0.021s 100%
approved request shows RequestApproved notification to requester 1 0 0 0.036s 100%
approveRequestFromNotification after 5s does NOT call takeSeat 1 0 0 0.128s 100%
approveRequestFromNotification within 5s calls takeSeat 1 0 0 0.026s 100%
attendee joining room also joins voice as audience 1 0 0 0.038s 100%
becoming seated enables mic when has audio permission 1 0 0 0.042s 100%
blockUser - error sets error message 1 0 0 0.024s 100%
blockUser - success adds to blocked set 1 0 0 0.028s 100%
cancelEditMessage clears edit state 1 0 0 0.022s 100%
cancelJoin sets shouldNavigateBack 1 0 0 0.032s 100%
checkBlockConflicts - banned user sees Banned warning with reason 1 0 0 0.019s 100%
checkBlockConflicts - banned user without kickInfo sees null reason 1 0 0 0.036s 100%
clearError clears error 1 0 0 0.043s 100%
clearError uses atomic update 1 0 0 0.041s 100%
clearReportSubmitted clears reportSubmitted and reportError 1 0 0 0.048s 100%
closeRoom - does not send system message 1 0 0 0.022s 100%
confirmJoinDespiteBlock - clears warning and joins room 1 0 0 0.047s 100%
declineApprovedRequest calls cancelApprovedRequest 1 0 0 0.048s 100%
declineInvite calls roomRepository cancelInvite 1 0 0 0.034s 100%
denyRequestFromNotification calls denyRequest 1 0 0 0.053s 100%
disconnectedUserIds - does not include owner during OWNER_AWAY 1 0 0 0.049s 100%
disconnectedUserIds - propagated from ActiveRoomManager 1 0 0 0.024s 100%
dismissCurrentNotification clears active notification 1 0 0 0.018s 100%
dismissExpiryUpsellDialog clears the flag 1 0 0 0.019s 100%
editMessage success calls messageRepository 1 0 0 0.061s 100%
editMessage with blank text is a no-op 1 0 0 0.021s 100%
editMessage without editingMessageId is a no-op 1 0 0 0.059s 100%
effectiveSeatCount - normal user gets normalSeatCount from config 1 0 0 0.051s 100%
effectiveSeatCount - Super Shy owner gets MAX_SEATS 1 0 0 0.034s 100%
expiry upsell - does NOT show for Super Shy owner 1 0 0 0.020s 100%
expiry upsell - shows dialog when countdown starts for non-SuperShy owner 1 0 0 0.076s 100%
expiry upsell - shows only once per session 1 0 0 0.040s 100%
forceMuteUser - attendee cannot force mute 1 0 0 0.100s 100%
forceMuteUser - cannot mute owner 1 0 0 0.057s 100%
forceMuteUser - host cannot mute other host 1 0 0 0.123s 100%
forceMuteUser - owner can force-mute a host 1 0 0 0.105s 100%
forceMuteUser - owner mutes attendee toggles mute 1 0 0 0.055s 100%
forceMuteUser - skips when user is already muted 1 0 0 0.032s 100%
gift event - enqueues fresh event into animation queue 1 0 0 0.020s 100%
gift event - null lastGiftEvent is ignored 1 0 0 0.017s 100%
gift event - respects minGiftAnimationValue filter 1 0 0 0.042s 100%
gift event - skips duplicate timestamp 1 0 0 0.018s 100%
gift event - skips old event on first observation 1 0 0 0.053s 100%
handleFirstJoin - joinRoom is called with correct roomId and userId 1 0 0 0.029s 100%
handleFirstJoin - non-owner calls joinRoom before recordFirstJoinTimestamp 1 0 0 0.036s 100%
handleRoomClosed batch-loads host users 1 0 0 0.045s 100%
invite suppressed when approved request is already active 1 0 0 0.054s 100%
inviteFromMessage delegates to inviteUser 1 0 0 0.067s 100%
inviteUser - already pending invite is rejected 1 0 0 0.078s 100%
inviteUser - already seated user is rejected 1 0 0 0.020s 100%
inviteUser - attendee cannot invite 1 0 0 0.038s 100%
inviteUser - does not send system message 1 0 0 0.029s 100%
inviteUser - host cannot invite when requireApproval ON 1 0 0 0.055s 100%
inviteUser - host invites when requireApproval OFF succeeds 1 0 0 0.049s 100%
inviteUser - owner invites regardless of requireApproval 1 0 0 0.045s 100%
inviteUser - user who left room shows error 1 0 0 0.058s 100%
joinRoom - always starts muted even with isMuted false 1 0 0 0.049s 100%
joinRoom - owner already seated with isMuted true disables mic 1 0 0 0.047s 100%
joinRoom joins voice and disables mic when no audio permission 1 0 0 0.049s 100%
kicked user sees kicker name and reason in UI state 1 0 0 0.053s 100%
kicked user without kickInfo sees default reason 1 0 0 0.017s 100%
kickUser - attendee cannot kick 1 0 0 0.057s 100%
kickUser - blank reason defaults to No reason given 1 0 0 0.038s 100%
kickUser - cannot kick owner 1 0 0 0.051s 100%
kickUser - host cannot kick other host 1 0 0 0.056s 100%
kickUser - owner can kick a host 1 0 0 0.047s 100%
kickUser - owner kicks attendee succeeds 1 0 0 0.028s 100%
kickUser - reason is passed to repository 1 0 0 0.037s 100%
kickUser - system message does not expose reason to room 1 0 0 0.021s 100%
kickUser - unseated user can be kicked 1 0 0 0.051s 100%
kickUser sets error state on failure 1 0 0 0.058s 100%
leaveRoom - leaves voice and removes presence 1 0 0 0.032s 100%
leaveRoom - non-owner clears seat and leaves 1 0 0 0.040s 100%
leaveRoom - non-owner clears seat on explicit leave 1 0 0 0.034s 100%
leaveRoom - owner alone closes room 1 0 0 0.065s 100%
leaveRoom - owner stays in participants during OWNER_AWAY 1 0 0 0.030s 100%
leaveRoom - owner with others on mic sets owner away 1 0 0 0.038s 100%
leaveRoom still calls leaveChannel 1 0 0 0.045s 100%
leaveSeat - non-owner can leave their seat 1 0 0 0.043s 100%
leaveSeat - owner cannot leave seat 0 1 0 0 0.054s 100%
leaveSeat - sees Loading then Success status 1 0 0 0.047s 100%
leaveSeat sets error state on failure 1 0 0 0.080s 100%
leaving seat disables mic instead of leaving channel 1 0 0 0.036s 100%
loadMessageSenderUsers - loads users for JOIN message senders 1 0 0 0.028s 100%
loadSeatUsers calls batch getUsers instead of individual getUser 1 0 0 0.058s 100%
message filtering - only updates state when messages actually change 1 0 0 0.017s 100%
moveSeat - attendee cannot move 1 0 0 0.056s 100%
moveSeat - cannot move from owner seat 1 0 0 0.045s 100%
moveSeat - cannot move to owner seat 1 0 0 0.068s 100%
moveSeat - destination occupied triggers swap 1 0 0 0.048s 100%
moveSeat - host cannot move other host 1 0 0 0.028s 100%
moveSeat - owner moves attendee succeeds 1 0 0 0.039s 100%
moveSeat - swap cannot target owner seat 1 0 0 0.038s 100%
new invite enqueues InviteReceived notification 1 0 0 0.030s 100%
null room emission sets roomClosed 1 0 0 0.039s 100%
null voice error does not overwrite uiState error 1 0 0 0.040s 100%
onAudioPermissionResult granted when not seated does not enable mic 1 0 0 0.019s 100%
onAudioPermissionResult granted when seated enables mic 1 0 0 0.019s 100%
owner already seated with permission joins voice with mic enabled 1 0 0 0.018s 100%
owner already seated without permission joins but does not auto-enable mic on permission grant 1 0 0 0.052s 100%
owner-away countdown - owner entering OWNER_AWAY room triggers immediate return 1 0 0 0.053s 100%
owner-away countdown - re-emitting same state does not restart job 1 0 0 0.058s 100%
ownerReturn - always re-establishes presence even when already in room 1 0 0 0.046s 100%
ownerReturn - enables mic when already joined 1 0 0 0.046s 100%
ownerReturn - non-owner cannot return 1 0 0 0.030s 100%
ownerReturn - re-establishes presence when not in room 1 0 0 0.052s 100%
ownerReturn - rejoins voice when not joined 1 0 0 0.020s 100%
pending request does NOT enqueue notification for attendee 1 0 0 0.021s 100%
pending request enqueues SeatRequestReceived notification for host 1 0 0 0.022s 100%
pending request enqueues SeatRequestReceived notification for owner 1 0 0 0.038s 100%
pending requests update panel state 1 0 0 0.084s 100%
pendingRequests - filters out requests where user is already seated 1 0 0 0.022s 100%
pendingRequests - filters out requests where user left the room 1 0 0 0.032s 100%
pendingRequests - keeps valid requests and filters stale ones 1 0 0 0.074s 100%
pendingRequests - locally approved request is immediately hidden 1 0 0 0.040s 100%
re-entry skips block check when user already in participantIds 1 0 0 0.046s 100%
removeAlias error sets error state 1 0 0 0.019s 100%
removeAlias success removes from state 1 0 0 0.019s 100%
removeFromSeat - attendee cannot remove anyone 1 0 0 0.083s 100%
removeFromSeat - cannot remove from owner seat 1 0 0 0.060s 100%
removeFromSeat - empty seat is rejected 1 0 0 0.037s 100%
removeFromSeat - host cannot remove other host 1 0 0 0.038s 100%
removeFromSeat - host cannot remove owner 1 0 0 0.036s 100%
removeFromSeat - owner removes attendee succeeds 1 0 0 0.024s 100%
removeHost - does not send system message 1 0 0 0.045s 100%
removeHost - non-owner cannot remove a host 1 0 0 0.025s 100%
removeHost - owner can remove a host 1 0 0 1.513s 100%
reportUser - error when target user not found 1 0 0 0.063s 100%
reportUser - evidence upload failure sets error 1 0 0 0.020s 100%
reportUser - submission failure sets error 1 0 0 0.048s 100%
reportUser - success calls storageRepo and reportRepo 1 0 0 0.022s 100%
requestSeat sets error state on failure 1 0 0 0.026s 100%
room closing sets roomClosed in state 1 0 0 0.036s 100%
room expiry - countdown not started when room has plenty of time 1 0 0 0.018s 100%
room expiry - does not send system message 1 0 0 10.051s 100%
room expiry - non-owner does not close room when time expires 1 0 0 0.057s 100%
room expiry - owner closes room when time expires 1 0 0 0.072s 100%
room expiry - shows countdown when under 5 minutes 1 0 0 10.050s 100%
room expiry - Super Shy owner gets extended duration 1 0 0 0.044s 100%
room expiry - uses economy config duration 1 0 0 0.040s 100%
room expiry countdown - does not start before 5min threshold 1 0 0 0.122s 100%
room expiry countdown - starts within 5min threshold 1 0 0 0.018s 100%
seatActionStatus resets to Idle after 1500ms 1 0 0 0.037s 100%
sendMessage - blank text is ignored 1 0 0 0.037s 100%
sendMessage - flood protection triggers on rapid messages 1 0 0 0.050s 100%
sendMessage - non-blank text sends message 1 0 0 0.096s 100%
setAlias error sets error state 1 0 0 0.055s 100%
setAlias success updates aliases in state 1 0 0 0.024s 100%
setRoomScreenVisible delegates to roomLifecycleManager 1 0 0 0.024s 100%
startEditMessage sets edit state 1 0 0 0.029s 100%
superShyDurationHours returns default when no config 1 0 0 0.044s 100%
superShyDurationHours uses economy config value 1 0 0 0.038s 100%
takeSeat - attendee blocked with error when requireApproval ON 1 0 0 0.050s 100%
takeSeat - attendee cannot take owner seat 1 0 0 0.045s 100%
takeSeat - attendee creates seat request when requireApproval OFF 1 0 0 0.025s 100%
takeSeat - attendee request sees Loading then Success status 1 0 0 0.038s 100%
takeSeat - host blocked when requireApproval is ON 1 0 0 0.057s 100%
takeSeat - host takes seat when requireApproval is OFF 1 0 0 0.023s 100%
takeSeat - owner cannot take non-owner seat 1 0 0 0.030s 100%
takeSeat - owner sees Loading then Success status 1 0 0 0.038s 100%
takeSeat - owner takes seat 0 succeeds 1 0 0 0.096s 100%
takeSeat - rejects index beyond effectiveSeatCount 1 0 0 0.043s 100%
takeSeat - repo error sets error and returns to Idle 1 0 0 0.039s 100%
takeSeat - seat already occupied is rejected 1 0 0 0.040s 100%
toggleSelfMute - allows mute when voice disconnected 1 0 0 0.052s 100%
toggleSelfMute - does not call voiceService on repo error 1 0 0 0.040s 100%
toggleSelfMute - only works on own seat 1 0 0 0.056s 100%
toggleSelfMute - rejects unmute when voice not connected 1 0 0 0.028s 100%
toggleSelfMute - sees Loading then Success status 1 0 0 0.026s 100%
toggleSelfMute - toggles on own seat 1 0 0 0.059s 100%
toggleSelfMute - unmute shows Unmuted message 1 0 0 0.017s 100%
unblockUser - error sets error message 1 0 0 0.023s 100%
unblockUser - success removes from blocked set 1 0 0 0.024s 100%
unmute blocked when voice unavailable - shows correct error 1 0 0 0.016s 100%
updateFilteredMessages - system messages are included 1 0 0 0.052s 100%
updateFilteredMessages - system messages not filtered after firstJoinTimestamp set 1 0 0 0.030s 100%
updateRoomName - host cannot update room name 1 0 0 0.041s 100%
updateRoomName - no room does nothing 1 0 0 0.040s 100%
updateRoomName - non-owner cannot update room name 1 0 0 0.054s 100%
updateRoomName - owner can update room name 1 0 0 0.023s 100%
validation rejections do not show loading status 1 0 0 0.018s 100%
voice disconnects mid-session - isVoiceUnavailable becomes true 1 0 0 0.051s 100%
voice error - room unblocks immediately when voice error arrives 1 0 0 0.016s 100%
voice error from voice service surfaces in uiState 1 0 0 0.037s 100%
voice reconnects - isVoiceUnavailable clears on CONNECTED 1 0 0 0.021s 100%
voice timeout - room unblocks after 10s when voice never connects 1 0 0 0.022s 100%