@@ -16,7 +16,7 @@ limitations under the License.
16
16
17
17
import { render , waitFor } from "@testing-library/react" ;
18
18
import { mocked } from "jest-mock" ;
19
- import { JoinRule , MatrixClient , PendingEventOrdering , Room } from "matrix-js-sdk/src/matrix" ;
19
+ import { JoinRule , MatrixClient , PendingEventOrdering , Room , RoomMember } from "matrix-js-sdk/src/matrix" ;
20
20
import React from "react" ;
21
21
import userEvent from "@testing-library/user-event" ;
22
22
import { TooltipProvider } from "@vector-im/compound-web" ;
@@ -25,9 +25,13 @@ import { MatrixClientPeg } from "../../../../src/MatrixClientPeg";
25
25
import { stubClient } from "../../../test-utils" ;
26
26
import DecoratedRoomAvatar from "../../../../src/components/views/avatars/DecoratedRoomAvatar" ;
27
27
import DMRoomMap from "../../../../src/utils/DMRoomMap" ;
28
+ import { isPresenceEnabled } from "../../../../src/utils/presence" ;
29
+ import { getJoinedNonFunctionalMembers } from "../../../../src/utils/room/getJoinedNonFunctionalMembers" ;
28
30
29
31
describe ( "DecoratedRoomAvatar" , ( ) => {
30
32
const ROOM_ID = "roomId" ;
33
+ const MY_USER_ID = "@alice:foo.bar" ;
34
+ const DM_USER_ID = "@bob:foo.bar" ;
31
35
32
36
let mockClient : MatrixClient ;
33
37
let room : Room ;
@@ -40,8 +44,16 @@ describe("DecoratedRoomAvatar", () => {
40
44
pendingEventOrdering : PendingEventOrdering . Detached ,
41
45
} ) ;
42
46
47
+ jest . fn ( isPresenceEnabled ) . mockReturnValue ( true ) ;
48
+ jest . fn ( getJoinedNonFunctionalMembers ) . mockReturnValue ( [
49
+ new RoomMember ( ROOM_ID , MY_USER_ID ) ,
50
+ new RoomMember ( ROOM_ID , DM_USER_ID ) ,
51
+ ] ) ;
52
+
43
53
const dmRoomMap = {
44
- getUserIdForRoomId : jest . fn ( ) ,
54
+ getUserIdForRoomId : ( ) => {
55
+ return DM_USER_ID ;
56
+ } ,
45
57
} as unknown as DMRoomMap ;
46
58
jest . spyOn ( DMRoomMap , "shared" ) . mockReturnValue ( dmRoomMap ) ;
47
59
} ) ;
@@ -66,4 +78,24 @@ describe("DecoratedRoomAvatar", () => {
66
78
67
79
expect ( asFragment ( ) ) . toMatchSnapshot ( ) ;
68
80
} ) ;
81
+
82
+ it ( "shows the presence indicator in a DM room with functional members" , async ( ) => {
83
+ const { container, asFragment } = render ( < DecoratedRoomAvatar room = { room } size = "32px" /> , {
84
+ wrapper : TooltipProvider ,
85
+ } ) ;
86
+
87
+ const presence = container . querySelector ( ".mx_DecoratedRoomAvatar_icon" ) ! ;
88
+ expect ( presence ) . toBeVisible ( ) ;
89
+ await userEvent . hover ( presence ! ) ;
90
+
91
+ // wait for the tooltip to open
92
+ const tooltip = await waitFor ( ( ) => {
93
+ const tooltip = document . getElementById ( presence . getAttribute ( "aria-describedby" ) ! ) ;
94
+ expect ( tooltip ) . toBeVisible ( ) ;
95
+ return tooltip ;
96
+ } ) ;
97
+ expect ( tooltip ) . toHaveTextContent ( "Offline" ) ;
98
+
99
+ expect ( asFragment ( ) ) . toMatchSnapshot ( ) ;
100
+ } ) ;
69
101
} ) ;
0 commit comments