@@ -26,6 +26,14 @@ import { stubClient } from "../../../test-utils";
26
26
import DecoratedRoomAvatar from "../../../../src/components/views/avatars/DecoratedRoomAvatar" ;
27
27
import DMRoomMap from "../../../../src/utils/DMRoomMap" ;
28
28
29
+ jest . mock ( "../../../../src/utils/presence" , ( ) => ( { isPresenceEnabled : jest . fn ( ) . mockReturnValue ( true ) } ) ) ;
30
+
31
+ jest . mock ( "../../../../src/utils/room/getJoinedNonFunctionalMembers" , ( ) => ( {
32
+ getJoinedNonFunctionalMembers : jest . fn ( ) . mockReturnValue ( [ 0 , 1 ] ) ,
33
+ } ) ) ;
34
+
35
+ jest . spyOn ( DecoratedRoomAvatar . prototype as any , "getPresenceIcon" ) . mockImplementation ( ( ) => "ONLINE" ) ;
36
+
29
37
describe ( "DecoratedRoomAvatar" , ( ) => {
30
38
const ROOM_ID = "roomId" ;
31
39
@@ -39,14 +47,14 @@ describe("DecoratedRoomAvatar", () => {
39
47
room = new Room ( ROOM_ID , mockClient , mockClient . getUserId ( ) ?? "" , {
40
48
pendingEventOrdering : PendingEventOrdering . Detached ,
41
49
} ) ;
50
+ } ) ;
42
51
52
+ it ( "shows an avatar with globe icon and tooltip for public room" , async ( ) => {
43
53
const dmRoomMap = {
44
54
getUserIdForRoomId : jest . fn ( ) ,
45
55
} as unknown as DMRoomMap ;
46
56
jest . spyOn ( DMRoomMap , "shared" ) . mockReturnValue ( dmRoomMap ) ;
47
- } ) ;
48
57
49
- it ( "shows an avatar with globe icon and tooltip for public room" , async ( ) => {
50
58
room . getJoinRule = jest . fn ( ) . mockReturnValue ( JoinRule . Public ) ;
51
59
const { container, asFragment } = render ( < DecoratedRoomAvatar room = { room } size = "32px" /> , {
52
60
wrapper : TooltipProvider ,
@@ -66,4 +74,31 @@ describe("DecoratedRoomAvatar", () => {
66
74
67
75
expect ( asFragment ( ) ) . toMatchSnapshot ( ) ;
68
76
} ) ;
77
+
78
+ it ( "shows the presence indicator in a DM room that also has functional members" , async ( ) => {
79
+ const DM_USER_ID = "@bob:foo.bar" ;
80
+ const dmRoomMap = {
81
+ getUserIdForRoomId : ( ) => {
82
+ return DM_USER_ID ;
83
+ } ,
84
+ } as unknown as DMRoomMap ;
85
+ jest . spyOn ( DMRoomMap , "shared" ) . mockReturnValue ( dmRoomMap ) ;
86
+ const { container, asFragment } = render ( < DecoratedRoomAvatar room = { room } size = "32px" /> , {
87
+ wrapper : TooltipProvider ,
88
+ } ) ;
89
+
90
+ const presence = container . querySelector ( ".mx_DecoratedRoomAvatar_icon" ) ! ;
91
+ expect ( presence ) . toBeVisible ( ) ;
92
+ await userEvent . hover ( presence ! ) ;
93
+
94
+ // wait for the tooltip to open
95
+ const tooltip = await waitFor ( ( ) => {
96
+ const tooltip = document . getElementById ( presence . getAttribute ( "aria-describedby" ) ! ) ;
97
+ expect ( tooltip ) . toBeVisible ( ) ;
98
+ return tooltip ;
99
+ } ) ;
100
+ expect ( tooltip ) . toHaveTextContent ( "Online" ) ;
101
+
102
+ expect ( asFragment ( ) ) . toMatchSnapshot ( ) ;
103
+ } ) ;
69
104
} ) ;
0 commit comments