test(providers): cover legacy alias migration with several entries
The legacy `providers` block is deleted whole when its last entry migrates to `provider`. Nothing covered the case where other legacy entries remain, so a regression there would silently drop unrelated providers. Adds the case to both the web server and VS Code parity suites.
This commit is contained in:
@@ -284,6 +284,28 @@ describe('custom provider config persistence (VS Code parity)', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('migrating one legacy providers entry keeps the other legacy entries', () => {
|
||||||
|
const configPath = path.join(projectDir, 'opencode.json');
|
||||||
|
writeJson(configPath, {
|
||||||
|
providers: {
|
||||||
|
legacy: { name: 'Legacy provider', options: { baseURL: 'https://old.example.com/v1' }, models: { model: { name: 'Old model' } } },
|
||||||
|
untouched: { name: 'Untouched', options: { baseURL: 'https://other.example.com/v1' }, models: { model: { name: 'Other model' } } },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
upsertProviderConfig('legacy', {
|
||||||
|
name: 'Updated provider',
|
||||||
|
options: { baseURL: 'https://new.example.com/v1' },
|
||||||
|
models: { model: { name: 'Updated model' } },
|
||||||
|
}, projectDir, 'project', { hasStoredAuth: true });
|
||||||
|
|
||||||
|
const written = readJson(configPath);
|
||||||
|
assert.deepEqual(written.providers, {
|
||||||
|
untouched: { name: 'Untouched', options: { baseURL: 'https://other.example.com/v1' }, models: { model: { name: 'Other model' } } },
|
||||||
|
});
|
||||||
|
assert.equal(written.provider.legacy.name, 'Updated provider');
|
||||||
|
});
|
||||||
|
|
||||||
test('upsert then remove restores absence', () => {
|
test('upsert then remove restores absence', () => {
|
||||||
upsertProviderConfig('temp-provider', {
|
upsertProviderConfig('temp-provider', {
|
||||||
name: 'Temp',
|
name: 'Temp',
|
||||||
|
|||||||
@@ -267,6 +267,28 @@ describe('custom provider config persistence', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('migrating one legacy providers entry keeps the other legacy entries', () => {
|
||||||
|
const configPath = path.join(projectDir, 'opencode.json');
|
||||||
|
writeJson(configPath, {
|
||||||
|
providers: {
|
||||||
|
legacy: { name: 'Legacy provider', options: { baseURL: 'https://old.example.com/v1' }, models: { model: { name: 'Old model' } } },
|
||||||
|
untouched: { name: 'Untouched', options: { baseURL: 'https://other.example.com/v1' }, models: { model: { name: 'Other model' } } },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
upsertProviderConfig('legacy', {
|
||||||
|
name: 'Updated provider',
|
||||||
|
options: { baseURL: 'https://new.example.com/v1' },
|
||||||
|
models: { model: { name: 'Updated model' } },
|
||||||
|
}, projectDir, 'project', { hasStoredAuth: true });
|
||||||
|
|
||||||
|
const written = readJson(configPath);
|
||||||
|
expect(written.providers).toEqual({
|
||||||
|
untouched: { name: 'Untouched', options: { baseURL: 'https://other.example.com/v1' }, models: { model: { name: 'Other model' } } },
|
||||||
|
});
|
||||||
|
expect(written.provider.legacy.name).toBe('Updated provider');
|
||||||
|
});
|
||||||
|
|
||||||
test('upsert then remove restores absence', () => {
|
test('upsert then remove restores absence', () => {
|
||||||
upsertProviderConfig('temp-provider', {
|
upsertProviderConfig('temp-provider', {
|
||||||
name: 'Temp',
|
name: 'Temp',
|
||||||
|
|||||||
Reference in New Issue
Block a user