-
-
Notifications
You must be signed in to change notification settings - Fork 771
/
settings.js
91 lines (69 loc) · 3.9 KB
/
settings.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*global mock */
describe("The \"settings\" API", function () {
it("has methods 'get' and 'set' to set configuration settings",
mock.initConverse(null, {'play_sounds': true}, (_converse) => {
const { api } = _converse;
expect(Object.keys(api.settings)).toEqual(["extend", "update", "get", "set", "listen"]);
expect(api.settings.get("play_sounds")).toBe(true);
api.settings.set("play_sounds", false);
expect(api.settings.get("play_sounds")).toBe(false);
api.settings.set({"play_sounds": true});
expect(api.settings.get("play_sounds")).toBe(true);
// Only whitelisted settings allowed.
expect(typeof api.settings.get("non_existing")).toBe("undefined");
api.settings.set("non_existing", true);
expect(typeof api.settings.get("non_existing")).toBe("undefined");
}));
it("extended via settings.extend don't override settings passed in via converse.initialize",
mock.initConverse([], {'emoji_categories': {"travel": ":rocket:"}}, (_converse) => {
expect(_converse.api.settings.get('emoji_categories')?.travel).toBe(':rocket:');
// Test that the extend command doesn't override user-provided site
// settings (i.e. settings passed in via converse.initialize).
_converse.api.settings.extend({'emoji_categories': {"travel": ":motorcycle:", "food": ":burger:"}});
expect(_converse.api.settings.get('emoji_categories')?.travel).toBe(':rocket:');
expect(_converse.api.settings.get('emoji_categories')?.food).toBe(undefined);
}));
it("only overrides the passed in properties",
mock.initConverse([],
{
'root': document.createElement('div').attachShadow({ 'mode': 'open' }),
'emoji_categories': { 'travel': ':rocket:' },
},
(_converse) => {
expect(_converse.api.settings.get('emoji_categories')?.travel).toBe(':rocket:');
// Test that the extend command doesn't override user-provided site
// settings (i.e. settings passed in via converse.initialize).
_converse.api.settings.extend({
'emoji_categories': { 'travel': ':motorcycle:', 'food': ':burger:' },
});
expect(_converse.api.settings.get('emoji_categories').travel).toBe(':rocket:');
expect(_converse.api.settings.get('emoji_categories').food).toBe(undefined);
}
)
);
});
describe("Configuration settings", function () {
describe("when set", function () {
it("will trigger a change event for which listeners can be registered",
mock.initConverse([], {}, function (_converse) {
const { api } = _converse;
let changed;
const callback = (o) => {
changed = o;
}
api.settings.listen.on('change', callback);
api.settings.set('allowed_image_domains', ['conversejs.org']);
expect(changed).toEqual({'allowed_image_domains': ['conversejs.org']});
api.settings.set('allowed_image_domains', ['conversejs.org', 'opkode.com']);
expect(changed).toEqual({'allowed_image_domains': ['conversejs.org', 'opkode.com']});
api.settings.listen.not('change', callback);
api.settings.set('allowed_image_domains', ['conversejs.org', 'opkode.com', 'inverse.chat']);
expect(changed).toEqual({'allowed_image_domains': ['conversejs.org', 'opkode.com']});
api.settings.listen.on('change:allowed_image_domains', callback);
api.settings.set('allowed_video_domains', ['inverse.chat']);
expect(changed).toEqual({'allowed_image_domains': ['conversejs.org', 'opkode.com']});
api.settings.set('allowed_image_domains', ['inverse.chat']);
expect(changed).toEqual(['inverse.chat']);
}));
});
});