@@ -5,9 +5,12 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
55Please see LICENSE files in the repository root for full details.
66*/
77
8+ import type { Capabilities } from "matrix-js-sdk/src/matrix" ;
89import RequiresSettingsController from "../../../../src/settings/controllers/RequiresSettingsController" ;
910import { SettingLevel } from "../../../../src/settings/SettingLevel" ;
1011import SettingsStore from "../../../../src/settings/SettingsStore" ;
12+ import MatrixClientBackedController from "../../../../src/settings/controllers/MatrixClientBackedController" ;
13+ import { getMockClientWithEventEmitter , mockClientMethodsServer } from "../../../test-utils" ;
1114
1215describe ( "RequiresSettingsController" , ( ) => {
1316 afterEach ( ( ) => {
@@ -30,4 +33,100 @@ describe("RequiresSettingsController", () => {
3033 expect ( controller . settingDisabled ) . toEqual ( false ) ;
3134 expect ( controller . getValueOverride ( ) ) . toEqual ( null ) ;
3235 } ) ;
36+
37+ describe ( "with capabilites" , ( ) => {
38+ let caps : Capabilities ;
39+ let client : ReturnType < typeof getMockClientWithEventEmitter > ;
40+ beforeEach ( ( ) => {
41+ client = getMockClientWithEventEmitter ( {
42+ ...mockClientMethodsServer ( ) ,
43+ getCachedCapabilities : jest . fn ( ) . mockImplementation ( ( ) => caps ! ) ,
44+ getCapabilities : jest . fn ( ) ,
45+ } ) ;
46+ MatrixClientBackedController [ "_matrixClient" ] = client ;
47+ } ) ;
48+
49+ it ( "will disable setting if capability check is true" , async ( ) => {
50+ caps = {
51+ "m.change_password" : {
52+ enabled : false ,
53+ } ,
54+ } ;
55+ const controller = new RequiresSettingsController ( [ ] , false , ( c : Capabilities ) => {
56+ expect ( c ) . toEqual ( caps ) ;
57+ return ! c [ "m.change_password" ] ?. enabled ;
58+ } ) ;
59+
60+ // Test that we fetch caps
61+ controller [ "initMatrixClient" ] ( ) ;
62+ expect ( client . getCapabilities ) . toHaveBeenCalled ( ) ;
63+
64+ // Test that we check caps.
65+ expect ( controller . settingDisabled ) . toEqual ( true ) ;
66+ expect ( controller . getValueOverride ( ) ) . toEqual ( false ) ;
67+ expect ( client . getCachedCapabilities ) . toHaveBeenCalled ( ) ;
68+ } ) ;
69+
70+ it ( "will not disable setting if capability check is false" , async ( ) => {
71+ caps = {
72+ "m.change_password" : {
73+ enabled : true ,
74+ } ,
75+ } ;
76+ const controller = new RequiresSettingsController ( [ ] , false , ( c : Capabilities ) => {
77+ expect ( c ) . toEqual ( caps ) ;
78+ return ! c [ "m.change_password" ] ?. enabled ;
79+ } ) ;
80+
81+ // Test that we fetch caps
82+ controller [ "initMatrixClient" ] ( ) ;
83+ expect ( client . getCapabilities ) . toHaveBeenCalled ( ) ;
84+
85+ // Test that we check caps.
86+ expect ( controller . settingDisabled ) . toEqual ( false ) ;
87+ expect ( controller . getValueOverride ( ) ) . toEqual ( null ) ;
88+ expect ( client . getCachedCapabilities ) . toHaveBeenCalled ( ) ;
89+ } ) ;
90+
91+ it ( "will check dependency settings before checking capabilites" , async ( ) => {
92+ caps = {
93+ "m.change_password" : {
94+ enabled : false ,
95+ } ,
96+ } ;
97+ await SettingsStore . setValue ( "useCompactLayout" , null , SettingLevel . DEVICE , false ) ;
98+ const controller = new RequiresSettingsController ( [ "useCompactLayout" ] , false , ( c : Capabilities ) => false ) ;
99+
100+ // Test that we fetch caps
101+ controller [ "initMatrixClient" ] ( ) ;
102+ expect ( client . getCapabilities ) . toHaveBeenCalled ( ) ;
103+
104+ // Test that we check caps.
105+ expect ( controller . settingDisabled ) . toEqual ( true ) ;
106+ expect ( controller . getValueOverride ( ) ) . toEqual ( false ) ;
107+ expect ( client . getCachedCapabilities ) . not . toHaveBeenCalled ( ) ;
108+ } ) ;
109+
110+ it ( "will disable setting if capability check is true and dependency settings are true" , async ( ) => {
111+ caps = {
112+ "m.change_password" : {
113+ enabled : false ,
114+ } ,
115+ } ;
116+ await SettingsStore . setValue ( "useCompactLayout" , null , SettingLevel . DEVICE , true ) ;
117+ const controller = new RequiresSettingsController ( [ "useCompactLayout" ] , false , ( c : Capabilities ) => {
118+ expect ( c ) . toEqual ( caps ) ;
119+ return ! c [ "m.change_password" ] ?. enabled ;
120+ } ) ;
121+
122+ // Test that we fetch caps
123+ controller [ "initMatrixClient" ] ( ) ;
124+ expect ( client . getCapabilities ) . toHaveBeenCalled ( ) ;
125+
126+ // Test that we check caps.
127+ expect ( controller . settingDisabled ) . toEqual ( true ) ;
128+ expect ( controller . getValueOverride ( ) ) . toEqual ( false ) ;
129+ expect ( client . getCachedCapabilities ) . toHaveBeenCalled ( ) ;
130+ } ) ;
131+ } ) ;
33132} ) ;
0 commit comments