import { describe, expect, it } from 'vitest'; import { SAGE_FLAGS, SagePermissions } from '../src/permissions'; describe('SAGE Permissions', () => { it('keeps governance aligned with the on-chain permission bit', () => { expect(SAGE_FLAGS.DO_GOVERNANCE).toBe(1n << 47n); }); it('keeps the dedicated mission-treasury admin tier on bit 48', () => { expect(SAGE_FLAGS.MANAGE_MISSION_TREASURIES).toBe(1n << 48n); }); it('keeps the mission-treasury tier distinct from MANAGE_MISSIONS (bit 44)', () => { expect(SAGE_FLAGS.MANAGE_MISSIONS).toBe(1n << 44n); expect( SAGE_FLAGS.MANAGE_MISSION_TREASURIES & SAGE_FLAGS.MANAGE_MISSIONS, ).toBe(0n); }); it('default permissions are empty', () => { const perms = SagePermissions.default(); const flags = Object.values(SAGE_FLAGS); expect(perms.value).toBe(0n); expect(perms.toArray()).toEqual([0, 0, 0, 0, 0, 0, 0, 0]); flags.forEach((flag) => expect(perms.has(flag)).toBe(false)); }); it('all permissions combine every flag without overflow', () => { const allCombined = Object.values(SAGE_FLAGS).reduce( (acc, flag) => acc | flag, 0n, ); const perms = SagePermissions.all(); const flags = Object.values(SAGE_FLAGS); expect(perms.value).toBe(allCombined); flags.forEach((flag) => expect(perms.has(flag)).toBe(true)); expect(() => perms.toArray()).not.toThrow(); }); });