-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmodExempt.test.js
More file actions
127 lines (106 loc) · 4.86 KB
/
modExempt.test.js
File metadata and controls
127 lines (106 loc) · 4.86 KB
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import { describe, expect, it, vi } from 'vitest';
vi.mock('discord.js', () => ({
PermissionFlagsBits: { Administrator: 8n },
}));
import { isExempt } from '../../src/utils/modExempt.js';
/**
* Build a minimal fake message with configurable member properties.
*/
function makeMessage({ hasMember = true, isAdmin = false, roleIds = [], roleNames = [] } = {}) {
if (!hasMember) return { member: null };
const roles = new Map([
...roleIds.map((id) => [id, { id, name: `role-${id}` }]),
...roleNames.map((name) => [`id-${name}`, { id: `id-${name}`, name }]),
]);
return {
member: {
permissions: {
has: vi.fn().mockReturnValue(isAdmin),
},
roles: {
cache: {
has: vi.fn((id) => roles.has(id)),
some: vi.fn((fn) => [...roles.values()].some(fn)),
},
},
},
};
}
describe('isExempt', () => {
it('should return false when member is null', () => {
const msg = makeMessage({ hasMember: false });
expect(isExempt(msg, {})).toBe(false);
});
it('should return true when member has ADMINISTRATOR permission', () => {
const msg = makeMessage({ isAdmin: true });
expect(isExempt(msg, {})).toBe(true);
});
it('should return false when member has no roles and no perms', () => {
const msg = makeMessage({ isAdmin: false });
expect(isExempt(msg, {})).toBe(false);
});
it('should return true when member has a role in adminRoleIds array', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['admin-role-id'] });
const config = { permissions: { adminRoleIds: ['admin-role-id'] } };
expect(isExempt(msg, config)).toBe(true);
});
it('should return true when member has any of multiple adminRoleIds', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['admin-role-2'] });
const config = { permissions: { adminRoleIds: ['admin-role-1', 'admin-role-2'] } };
expect(isExempt(msg, config)).toBe(true);
});
it('should return false when adminRoleIds is set but member does not have any', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['other-role'] });
const config = { permissions: { adminRoleIds: ['admin-role-id'] } };
expect(isExempt(msg, config)).toBe(false);
});
it('should return true when member has a role in moderatorRoleIds array', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['mod-role-id'] });
const config = { permissions: { moderatorRoleIds: ['mod-role-id'] } };
expect(isExempt(msg, config)).toBe(true);
});
it('should return true when member has any of multiple moderatorRoleIds', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['mod-role-2'] });
const config = { permissions: { moderatorRoleIds: ['mod-role-1', 'mod-role-2'] } };
expect(isExempt(msg, config)).toBe(true);
});
it('should return false when moderatorRoleIds is set but member does not have any', () => {
const msg = makeMessage({ isAdmin: false, roleIds: [] });
const config = { permissions: { moderatorRoleIds: ['mod-role-id'] } };
expect(isExempt(msg, config)).toBe(false);
});
it('should support backward compat: singular adminRoleId still grants exemption', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['admin-role-id'] });
const config = { permissions: { adminRoleId: 'admin-role-id' } };
expect(isExempt(msg, config)).toBe(true);
});
it('should support backward compat: singular moderatorRoleId still grants exemption', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['mod-role-id'] });
const config = { permissions: { moderatorRoleId: 'mod-role-id' } };
expect(isExempt(msg, config)).toBe(true);
});
it('should return true when member has a role ID in modRoles array', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['custom-mod'] });
const config = { permissions: { modRoles: ['custom-mod'] } };
expect(isExempt(msg, config)).toBe(true);
});
it('should return true when member has a role NAME in modRoles array', () => {
const msg = makeMessage({ isAdmin: false, roleNames: ['Moderator'] });
const config = { permissions: { modRoles: ['Moderator'] } };
expect(isExempt(msg, config)).toBe(true);
});
it('should return false when modRoles is empty array', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['some-role'] });
const config = { permissions: { modRoles: [] } };
expect(isExempt(msg, config)).toBe(false);
});
it('should return false when member has no matching role in modRoles', () => {
const msg = makeMessage({ isAdmin: false, roleIds: ['other-role'] });
const config = { permissions: { modRoles: ['custom-mod', 'Moderator'] } };
expect(isExempt(msg, config)).toBe(false);
});
it('should return false when config has no permissions key', () => {
const msg = makeMessage({ isAdmin: false });
expect(isExempt(msg, {})).toBe(false);
});
});