Files
orca/src/shared/task-providers.test.ts
T

120 lines
3.2 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
filterAvailableTaskProviders,
normalizeTaskProviderSettings,
normalizeVisibleTaskProviders,
restoreAvailableDefaultTaskProvider,
resolveVisibleTaskProvider
} from './task-providers'
describe('task providers', () => {
it('normalizes provider lists while preserving supported order', () => {
expect(normalizeVisibleTaskProviders(['gitlab', 'unknown', 'gitlab', 'linear'])).toEqual([
'gitlab',
'linear'
])
})
it('falls back to all providers when none are visible', () => {
expect(normalizeVisibleTaskProviders([])).toEqual(['github', 'gitlab', 'linear', 'jira'])
})
it('restores a valid saved default when provider settings drifted', () => {
expect(
normalizeTaskProviderSettings({
visibleTaskProviders: ['linear'],
defaultTaskSource: 'github'
})
).toEqual({
defaultTaskSource: 'github',
visibleTaskProviders: ['github', 'linear']
})
})
it('normalizes invalid saved defaults to the first visible provider', () => {
expect(
normalizeTaskProviderSettings({
visibleTaskProviders: ['gitlab'],
defaultTaskSource: 'bitbucket'
})
).toEqual({
defaultTaskSource: 'gitlab',
visibleTaskProviders: ['gitlab']
})
})
it('resolves hidden preferred providers to the first visible provider', () => {
expect(resolveVisibleTaskProvider('github', ['linear'])).toBe('linear')
})
it('filters runtime-unavailable providers without changing preference normalization', () => {
expect(
filterAvailableTaskProviders(['github', 'gitlab', 'linear'], {
gitlabInstalled: false,
linearConnected: true
})
).toEqual(['github', 'linear'])
})
it('keeps an available saved default visible when provider visibility drifted', () => {
expect(
restoreAvailableDefaultTaskProvider(
['linear'],
{
gitlabInstalled: false,
linearConnected: true
},
'github'
)
).toEqual(['github', 'linear'])
})
it('preserves intentionally narrowed providers when the saved default matches them', () => {
expect(
restoreAvailableDefaultTaskProvider(
['linear'],
{
gitlabInstalled: false,
linearConnected: true
},
'linear'
)
).toEqual(['linear'])
})
it('does not restore an unavailable saved default', () => {
expect(
restoreAvailableDefaultTaskProvider(
['linear'],
{
gitlabInstalled: false,
linearConnected: true
},
'gitlab'
)
).toEqual(['linear'])
})
it('ignores invalid saved defaults while restoring visible providers', () => {
expect(
restoreAvailableDefaultTaskProvider(
['gitlab'],
{
gitlabInstalled: false,
linearConnected: true
},
'bitbucket'
)
).toEqual(['github'])
})
it('falls back to GitHub when every preferred provider is unavailable', () => {
expect(
filterAvailableTaskProviders(['gitlab', 'linear'], {
gitlabInstalled: false,
linearConnected: false
})
).toEqual(['github'])
})
})