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', () => {
|
||||
upsertProviderConfig('temp-provider', {
|
||||
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', () => {
|
||||
upsertProviderConfig('temp-provider', {
|
||||
name: 'Temp',
|
||||
|
||||
Reference in New Issue
Block a user