atagen

malice

public
Star0
Watch0
f604ef6df0c43f046a970036f70a38242168ae57
2
ssh://brewery@pls.lobotomise.me:33/atagen/malice.git
web/test/permissions.test.tsTypescript39 lines1.7 KB
1
import assert from 'node:assert/strict';
2
import { test } from 'node:test';
3
import { allowed, isMuted, levelOf, parsePowerLevels } from '../src/lib/permissions.ts';
4
5
const levels = parsePowerLevels({
6
  ban: 50,
7
  kick: 50,
8
  events_default: 0,
9
  state_default: 50,
10
  users_default: 0,
11
  users: [['@mod:x', 50], ['@admin:x', 100], ['@muted:x', -1]],
12
  events: [['m.room.power_levels', 100]],
13
  creators: ['@creator:x']
14
})!;
15
16
test('levels come from users, the default, or creator rank', () => {
17
  assert.equal(levelOf(levels, '@admin:x'), 100);
18
  assert.equal(levelOf(levels, '@someone:x'), 0);
19
  assert.equal(levelOf(levels, '@creator:x'), Infinity);
20
  assert.equal(isMuted(levels, '@muted:x'), true);
21
  assert.equal(isMuted(levels, '@someone:x'), false);
22
});
23
24
test('you can only act on people below you', () => {
25
  assert.deepEqual(allowed(levels, '@mod:x', '@someone:x'), { kick: true, ban: true, setLevel: false, maxLevel: 50 });
26
  assert.equal(allowed(levels, '@mod:x', '@admin:x').kick, false);
27
  assert.equal(allowed(levels, '@mod:x', '@mod:x').kick, false);
28
  assert.equal(allowed(levels, '@admin:x', '@mod:x').setLevel, true);
29
  assert.equal(allowed(levels, '@admin:x', '@creator:x').ban, false);
30
  assert.equal(allowed(levels, '@creator:x', '@admin:x').setLevel, true);
31
});
32
33
test('anyone can delete their own messages but others need the redact level', async () => {
34
  const { canRedact } = await import('../src/lib/permissions.ts');
35
  assert.equal(canRedact(levels, '@someone:x', '@someone:x'), true);
36
  assert.equal(canRedact(levels, '@someone:x', '@mod:x'), false);
37
  assert.equal(canRedact(levels, '@mod:x', '@someone:x'), true);
38
  assert.equal(canRedact(levels, '@muted:x', '@muted:x'), false);
39
});