Add hasAdminCapabilities function to ExpressLocals

This will be available in pug to allow admin capabilities to be used.

GitOrigin-RevId: 6bc4e38385b421aa44ee9385e28f3c59b09e3ade
This commit is contained in:
Andrew Rumble
2025-07-28 16:41:33 +01:00
committed by Copybot
parent a9d642776a
commit 192aacbecd
3 changed files with 105 additions and 0 deletions
@@ -0,0 +1,60 @@
const { expect } = require('chai')
const SandboxedModule = require('sandboxed-module')
const sinon = require('sinon')
const modulePath =
'../../../../app/src/Features/Helpers/AdminAuthorizationHelper'
describe('AdminAuthorizationHelper', function () {
beforeEach(function () {
this.fireHook = sinon.stub().resolves([])
this.AdminAuthorizationHelper = SandboxedModule.require(modulePath, {
requires: {
'@overleaf/settings': {
adminPrivilegeAvailable: true,
adminUrl: 'https://admin.overleaf.com',
},
'../../infrastructure/Modules': {
promises: {
hooks: {
fire: this.fireHook,
},
},
},
},
})
})
describe('getAdminCapabilities', function () {
describe('when modules return capabilities', function () {
let result
const module1Capabilities = ['capability1', 'capability2']
const module2Capabilities = ['capability2', 'capability3']
beforeEach(async function () {
this.fireHook.resolves([module1Capabilities, module2Capabilities])
result = await this.AdminAuthorizationHelper.getAdminCapabilities({})
})
it('returns true for adminCapabilitiesAvailable', async function () {
expect(result.adminCapabilitiesAvailable).to.be.true
})
it('returns a flattened array of the returned capabilities', function () {
expect(result.adminCapabilities)
.to.be.an('array')
.that.includes(...module1Capabilities, ...module2Capabilities)
})
})
describe('when no module returns capabilities', function () {
let result
beforeEach(async function () {
result = await this.AdminAuthorizationHelper.getAdminCapabilities({})
})
it('returns false for adminCapabilitiesAvailable', function () {
expect(result.adminCapabilitiesAvailable).to.be.false
})
it('returns an empty adminCapabilities array', function () {
expect(result.adminCapabilities).to.be.an('array').that.is.empty
})
})
})
})