Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
|
||||
import { applyConnectionConfigAtomically } from './connection-config-apply'
|
||||
|
||||
describe('applyConnectionConfigAtomically', () => {
|
||||
it('commits legacy and registry state before activation', async () => {
|
||||
const events: string[] = []
|
||||
|
||||
await applyConnectionConfigAtomically({
|
||||
previousConfig: 'old-config',
|
||||
previousRegistry: 'old-registry',
|
||||
nextConfig: 'remote-config',
|
||||
nextRegistry: 'remote-registry',
|
||||
writeConfig: value => events.push(`config:${value}`),
|
||||
writeRegistry: value => events.push(`registry:${value}`),
|
||||
apply: async () => {
|
||||
events.push('activate')
|
||||
}
|
||||
})
|
||||
|
||||
expect(events).toEqual(['config:remote-config', 'registry:remote-registry', 'activate'])
|
||||
})
|
||||
|
||||
it('rolls both stores back when activation fails', async () => {
|
||||
const writeConfig = vi.fn()
|
||||
const writeRegistry = vi.fn()
|
||||
|
||||
await expect(
|
||||
applyConnectionConfigAtomically({
|
||||
previousConfig: 'local-config',
|
||||
previousRegistry: 'local-registry',
|
||||
nextConfig: 'remote-config',
|
||||
nextRegistry: 'remote-registry',
|
||||
writeConfig,
|
||||
writeRegistry,
|
||||
apply: async () => {
|
||||
throw new Error('activation failed')
|
||||
}
|
||||
})
|
||||
).rejects.toThrow('activation failed')
|
||||
|
||||
expect(writeConfig.mock.calls).toEqual([['remote-config'], ['local-config']])
|
||||
expect(writeRegistry.mock.calls).toEqual([['remote-registry'], ['local-registry']])
|
||||
})
|
||||
|
||||
it('rolls legacy state back when the registry write fails', async () => {
|
||||
const writes: string[] = []
|
||||
let registryWrites = 0
|
||||
|
||||
await expect(
|
||||
applyConnectionConfigAtomically({
|
||||
previousConfig: 'local-config',
|
||||
previousRegistry: 'local-registry',
|
||||
nextConfig: 'remote-config',
|
||||
nextRegistry: 'remote-registry',
|
||||
writeConfig: value => writes.push(`config:${value}`),
|
||||
writeRegistry: value => {
|
||||
registryWrites += 1
|
||||
|
||||
if (registryWrites === 1) {
|
||||
throw new Error('disk full')
|
||||
}
|
||||
|
||||
writes.push(`registry:${value}`)
|
||||
},
|
||||
apply: vi.fn()
|
||||
})
|
||||
).rejects.toThrow('disk full')
|
||||
|
||||
expect(writes).toEqual(['config:remote-config', 'config:local-config', 'registry:local-registry'])
|
||||
})
|
||||
|
||||
it('preflights before writing either store', async () => {
|
||||
const events: string[] = []
|
||||
|
||||
await applyConnectionConfigAtomically({
|
||||
previousConfig: 'local-config',
|
||||
previousRegistry: 'local-registry',
|
||||
nextConfig: 'remote-config',
|
||||
nextRegistry: 'remote-registry',
|
||||
preflight: async () => {
|
||||
events.push('preflight')
|
||||
},
|
||||
writeConfig: value => events.push(`config:${value}`),
|
||||
writeRegistry: value => events.push(`registry:${value}`),
|
||||
apply: async () => {
|
||||
events.push('activate')
|
||||
}
|
||||
})
|
||||
|
||||
expect(events).toEqual(['preflight', 'config:remote-config', 'registry:remote-registry', 'activate'])
|
||||
})
|
||||
|
||||
it('leaves both stores untouched when the preflight rejects', async () => {
|
||||
const writeConfig = vi.fn()
|
||||
const writeRegistry = vi.fn()
|
||||
const apply = vi.fn()
|
||||
|
||||
await expect(
|
||||
applyConnectionConfigAtomically({
|
||||
previousConfig: 'local-config',
|
||||
previousRegistry: 'local-registry',
|
||||
nextConfig: 'remote-config',
|
||||
nextRegistry: 'remote-registry',
|
||||
preflight: async () => {
|
||||
throw new Error('gateway unreachable')
|
||||
},
|
||||
writeConfig,
|
||||
writeRegistry,
|
||||
apply
|
||||
})
|
||||
).rejects.toThrow('gateway unreachable')
|
||||
|
||||
expect(writeConfig).not.toHaveBeenCalled()
|
||||
expect(writeRegistry).not.toHaveBeenCalled()
|
||||
expect(apply).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user