//@ts-check const { describe, test } = require('node:test'); const { PermissionsBitField } = require('../lib/structures/extra/Permissions'); const assert = require('node:assert/strict'); const { PermissionFlagsBits } = require('../lib/types'); const { BitField } = require('../lib/structures/extra/BitField'); describe('PermissionsBitField', () => { test('constructor', () => { const p = new PermissionsBitField(['CreateEvents']); assert.equal(p.bits, PermissionFlagsBits.CreateEvents); }); test('add', () => { const p = new PermissionsBitField(['CreateEvents']); p.add(['AttachFiles']); p.add('ChangeNickname'); assert.equal( p.bits, PermissionFlagsBits.CreateEvents | PermissionFlagsBits.AttachFiles | PermissionFlagsBits.ChangeNickname, ); }); test('remove', () => { const p = new PermissionsBitField(['CreateEvents']); p.remove('CreateEvents'); assert.equal(p.bits, BitField.None); }); test('keys', () => { const p = new PermissionsBitField(['CreateEvents', 'Administrator']); p.add(['AttachFiles']); p.add('ChangeNickname'); const keys = ['CreateEvents', 'Administrator', 'AttachFiles', 'ChangeNickname']; assert.equal( true, p.keys().every(x => keys.includes(x)), ); assert.equal(p.keys().length, 4); }); test('values', () => { const p = new PermissionsBitField(['CreateEvents']); p.add('Administrator'); p.add(['ChangeNickname']); assert.deepEqual(p.values(), [ PermissionFlagsBits.Administrator, PermissionFlagsBits.ChangeNickname, PermissionFlagsBits.CreateEvents, ]); }); test('missings', () => { const p = new PermissionsBitField(['CreateEvents']); p.add('Administrator'); p.add(['ChangeNickname']); assert.deepEqual(p.missings('Connect'), [PermissionFlagsBits.Connect]); }); test('equals', () => { const p = new PermissionsBitField(['CreateEvents']); p.add(['ChangeNickname']); assert.deepEqual(p.equals(['ChangeNickname', 'CreateEvents']), true); assert.deepEqual(p.equals('Connect'), false); }); });