import { describe, expect, it } from 'vitest'import type { DiscoveredInterpreter, EnvProvenance, RuntimeEnablement } from './notebook-runtime'import { isEnvEnabled, packageToolFor } from './notebook-runtime'const env = (provenance: EnvProvenance, envId = '/env'): DiscoveredInterpreter => ({ language: 'python', provenance, envId, interpreterPath: envId, label: envId, runnable: true})describe('isEnvEnabled', () => { it('defaults app-managed and agent-created ON, only user-own OFF, with no explicit override', () => { // App-managed + agent-created are app-controlled and default enabled (the agent must be able to // bind an env it just created); only the user's OWN interpreters require an explicit opt-in. expect(isEnvEnabled(env('app-managed'))).toBe(true) expect(isEnvEnabled(env('agent-created'))).toBe(true) expect(isEnvEnabled(env('user-own'))).toBe(false) }) it('applies the provenance default when the enablement map has no entry for the env', () => { const enablement: RuntimeEnablement = { enabled: { '/other': true }, installAuthorized: {} } expect(isEnvEnabled(env('app-managed', '/env'), enablement)).toBe(true) expect(isEnvEnabled(env('user-own', '/env'), enablement)).toBe(false) }) it('lets an explicit override win over the provenance default in both directions', () => { const disableManaged: RuntimeEnablement = { enabled: { '/env': false }, installAuthorized: {} } const enableUserOwn: RuntimeEnablement = { enabled: { '/env': true }, installAuthorized: {} } expect(isEnvEnabled(env('app-managed', '/env'), disableManaged)).toBe(false) expect(isEnvEnabled(env('user-own', '/env'), enableUserOwn)).toBe(true) })})describe('packageToolFor', () => { it('routes app-owned envs (any language) to micromamba', () => { expect(packageToolFor('python', true)).toBe('micromamba') expect(packageToolFor('r', true)).toBe('micromamba') }) it("routes the user's own envs to their own pip / R library, never micromamba", () => { expect(packageToolFor('python', false)).toBe('pip') expect(packageToolFor('r', false)).toBe('r-library') })})
import { describe, expect, it } from 'vitest'
import type { DiscoveredInterpreter, EnvProvenance, RuntimeEnablement } from './notebook-runtime'
import { isEnvEnabled, packageToolFor } from './notebook-runtime'
const env = (provenance: EnvProvenance, envId = '/env'): DiscoveredInterpreter => ({
language: 'python',
provenance,
envId,
interpreterPath: envId,
label: envId,
runnable: true
})
describe('isEnvEnabled', () => {
it('defaults app-managed and agent-created ON, only user-own OFF, with no explicit override', () => {
// App-managed + agent-created are app-controlled and default enabled (the agent must be able to
// bind an env it just created); only the user's OWN interpreters require an explicit opt-in.
expect(isEnvEnabled(env('app-managed'))).toBe(true)
expect(isEnvEnabled(env('agent-created'))).toBe(true)
expect(isEnvEnabled(env('user-own'))).toBe(false)
})
it('applies the provenance default when the enablement map has no entry for the env', () => {
const enablement: RuntimeEnablement = { enabled: { '/other': true }, installAuthorized: {} }
expect(isEnvEnabled(env('app-managed', '/env'), enablement)).toBe(true)
expect(isEnvEnabled(env('user-own', '/env'), enablement)).toBe(false)
})
it('lets an explicit override win over the provenance default in both directions', () => {
const disableManaged: RuntimeEnablement = { enabled: { '/env': false }, installAuthorized: {} }
const enableUserOwn: RuntimeEnablement = { enabled: { '/env': true }, installAuthorized: {} }
expect(isEnvEnabled(env('app-managed', '/env'), disableManaged)).toBe(false)
expect(isEnvEnabled(env('user-own', '/env'), enableUserOwn)).toBe(true)
})
})
describe('packageToolFor', () => {
it('routes app-owned envs (any language) to micromamba', () => {
expect(packageToolFor('python', true)).toBe('micromamba')
expect(packageToolFor('r', true)).toBe('micromamba')
})
it("routes the user's own envs to their own pip / R library, never micromamba", () => {
expect(packageToolFor('python', false)).toBe('pip')
expect(packageToolFor('r', false)).toBe('r-library')
})
})