init
This commit is contained in:
commit
0858862cda
17 files changed
+2189
No files matched your search
@@ -0,0 +1,95 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import { test } from 'node:test'
|
||||
|
||||
import { createFacetPolicy } from '../lib/policy.js'
|
||||
|
||||
/** A stand-in for the agent shape the policy reads: session id plus working directory. */
|
||||
const agentAt = (cwd, id = 's1') => ({ session: { id, header: { cwd } } })
|
||||
|
||||
test('the scope is the session directory, and nothing else', () => {
|
||||
const policy = createFacetPolicy({ mode: 'ask' })
|
||||
const scope = policy.scopeFor(agentAt('/w/src/controllers/room'))
|
||||
assert.equal(scope.root, '/w/src/controllers/room')
|
||||
assert.equal(scope.cwd, scope.root)
|
||||
assert.deepEqual(scope.extras, [])
|
||||
})
|
||||
|
||||
test('an agent with no working directory has no facet', () => {
|
||||
const policy = createFacetPolicy({ mode: 'ask' })
|
||||
assert.equal(policy.scopeFor(undefined), undefined)
|
||||
assert.equal(policy.scopeFor({}), undefined)
|
||||
assert.equal(policy.scopeFor({ session: { header: {} } }), undefined)
|
||||
assert.equal(policy.scopeFor({ session: { header: { cwd: ' ' } } }), undefined)
|
||||
assert.equal(policy.scopeFor({ session: { header: { cwd: 7 } } }), undefined)
|
||||
})
|
||||
|
||||
test('a grant widens one session and leaves every other alone', () => {
|
||||
const policy = createFacetPolicy({ mode: 'ask' })
|
||||
policy.grant('s1', ['../shared'], '/w/src/room')
|
||||
|
||||
assert.deepEqual(policy.scopeFor(agentAt('/w/src/room', 's1')).extras, ['/w/src/shared'])
|
||||
assert.deepEqual(policy.scopeFor(agentAt('/w/src/room', 's2')).extras, [])
|
||||
assert.deepEqual(policy.grantsFor('s1'), ['/w/src/shared'])
|
||||
assert.deepEqual(policy.grantsFor('s2'), [])
|
||||
})
|
||||
|
||||
test('grants are absolute, deduplicated and order-preserving', () => {
|
||||
const policy = createFacetPolicy({ mode: 'ask' })
|
||||
// `shared` is relative to the session directory, `/w/src/shared` is not, and
|
||||
// both are kept: they are different places that happen to share a name.
|
||||
policy.grant('s1', ['shared', '/w/src/shared', 'shared', 'other'], '/w/src/room')
|
||||
assert.deepEqual(policy.grantsFor('s1'), ['/w/src/room/shared', '/w/src/shared', '/w/src/room/other'])
|
||||
})
|
||||
|
||||
test('revoke and reset narrow without touching anyone else', () => {
|
||||
const policy = createFacetPolicy({ mode: 'ask' })
|
||||
policy.grant('s1', ['a', 'b'], '/w')
|
||||
policy.grant('s2', ['c'], '/w')
|
||||
|
||||
assert.deepEqual(policy.revoke('s1', ['a'], '/w'), ['/w/b'])
|
||||
assert.deepEqual(policy.revoke('s1', ['b'], '/w'), [])
|
||||
assert.equal(policy.sessions.includes('s1'), false)
|
||||
assert.deepEqual(policy.grantsFor('s2'), ['/w/c'])
|
||||
|
||||
policy.grant('s3', ['d'], '/w')
|
||||
assert.deepEqual(policy.reset('s3'), [])
|
||||
assert.deepEqual(policy.grantsFor('s3'), [])
|
||||
})
|
||||
|
||||
test('a disposed session does not leave its grant behind', () => {
|
||||
const policy = createFacetPolicy({ mode: 'ask' })
|
||||
policy.grant('s1', ['shared'], '/w')
|
||||
assert.deepEqual(policy.sessions, ['s1'])
|
||||
|
||||
policy.forget('s1')
|
||||
assert.deepEqual(policy.sessions, [])
|
||||
// A resumed session id must not inherit a grant nobody remembers making.
|
||||
assert.deepEqual(policy.scopeFor(agentAt('/w', 's1')).extras, [])
|
||||
})
|
||||
|
||||
test('standing grants resolve against each session, not the process', () => {
|
||||
const policy = createFacetPolicy({ mode: 'ask', extraRoots: ['../shared', '/abs/common'] })
|
||||
assert.deepEqual(policy.scopeFor(agentAt('/w/a/one')).extras, ['/w/a/shared', '/abs/common'])
|
||||
assert.deepEqual(policy.scopeFor(agentAt('/w/b/two')).extras, ['/w/b/shared', '/abs/common'])
|
||||
})
|
||||
|
||||
test('junk in the configuration and in a grant is dropped, not thrown', () => {
|
||||
const policy = createFacetPolicy({ mode: 'ask', extraRoots: ['ok', '', ' ', 42, null] })
|
||||
assert.deepEqual(policy.standing, ['ok'])
|
||||
|
||||
policy.grant('s1', ['', ' ', 42, null, 'real'], '/w')
|
||||
assert.deepEqual(policy.grantsFor('s1'), ['/w/real'])
|
||||
})
|
||||
|
||||
test('standing grants and session grants are merged without repetition', () => {
|
||||
const policy = createFacetPolicy({ mode: 'ask', extraRoots: ['shared'] })
|
||||
policy.grant('s1', ['shared', 'other'], '/w')
|
||||
assert.deepEqual(policy.scopeFor(agentAt('/w', 's1')).extras, ['/w/shared', '/w/other'])
|
||||
})
|
||||
|
||||
test('prompt placements are carried, so the preset row needs no config', () => {
|
||||
assert.equal(createFacetPolicy({ mode: 'ask' }).sectionOrder, 100)
|
||||
assert.equal(createFacetPolicy({ mode: 'ask' }).contextOrder, 105)
|
||||
assert.equal(createFacetPolicy({ mode: 'ask', sectionOrder: 7, contextOrder: 8 }).sectionOrder, 7)
|
||||
assert.equal(createFacetPolicy({ mode: 'ask', sectionOrder: 7, contextOrder: 8 }).contextOrder, 8)
|
||||
})
|
||||
Reference in new issue
Block a user