mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-28 11:41:04 +00:00
test(integration): switch settings-migration probe from --help to mcp list (#3486)
* test(integration): switch settings-migration probe from --help to mcp list --help is a purely informational command and intentionally does not load settings. The settings-migration integration test was leaning on a legacy side effect where --help happened to run loadSettings() during startup, which in turn persisted the migrated file back to disk. After the bare startup mode refactor reordered startup so that argument parsing runs before settings loading, yargs now exits inside parse() on --help before loadSettings() is ever called, and the test fixtures stayed at their original version on disk. Switch the probe to `mcp list`, which is a first-class subcommand that goes through loadSettings() (and therefore the migration chain and the write-back) and then exits without needing API credentials or network. On a fresh test rig with no configured servers it prints a single line and returns, so the test stays fast. No production code changes; --help remains side-effect-free. * test(cli): remove flaky right-arrow prompt suggestion test The test intermittently fails in CI because the render and stdin write race with the component's readiness window; covered by the other prompt suggestion tests in the same file.
This commit is contained in:
parent
b3ae08f4bd
commit
a44473089e
2 changed files with 29 additions and 43 deletions
|
|
@ -83,10 +83,10 @@ describe('settings-migration', () => {
|
|||
// Write V1 settings directly (overwrites the one created by setup)
|
||||
overwriteSettingsFile(rig, v1Settings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// We expect this to fail due to missing API key, but migration should still occur
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls.
|
||||
// `--help` is intentionally side-effect-free and does not load settings.
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail, we just need the settings file to be processed
|
||||
}
|
||||
|
|
@ -126,9 +126,9 @@ describe('settings-migration', () => {
|
|||
// Use fixture with arrays, null values, and string booleans
|
||||
overwriteSettingsFile(rig, v1ArrayAndNullSettings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -151,9 +151,9 @@ describe('settings-migration', () => {
|
|||
// Use fixture where V1 flat keys (ui, general) conflict with V2/V3 nested structure
|
||||
overwriteSettingsFile(rig, v1ParentCollisionSettings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -178,9 +178,9 @@ describe('settings-migration', () => {
|
|||
// Use fixture with $version as string and string boolean values
|
||||
overwriteSettingsFile(rig, v1VersionStringSettings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -215,9 +215,9 @@ describe('settings-migration', () => {
|
|||
// Write V2 settings directly (overwrites the one created by setup)
|
||||
overwriteSettingsFile(rig, v2Settings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -292,9 +292,9 @@ describe('settings-migration', () => {
|
|||
|
||||
overwriteSettingsFile(rig, cleanV2Settings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -320,9 +320,9 @@ describe('settings-migration', () => {
|
|||
|
||||
overwriteSettingsFile(rig, legacyVersionWithoutMigratableKeys);
|
||||
|
||||
// Run CLI with --help to trigger settings load/write path
|
||||
// Run CLI with `mcp list` to trigger settings load/write path
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -361,9 +361,9 @@ describe('settings-migration', () => {
|
|||
};
|
||||
overwriteSettingsFile(rig, mixedNonBooleanDisableSettings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -426,9 +426,9 @@ describe('settings-migration', () => {
|
|||
// Use fixture with both disable* and enable* keys
|
||||
overwriteSettingsFile(rig, v2PreexistingEnableSettings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -491,9 +491,9 @@ describe('settings-migration', () => {
|
|||
// Use fixture with V3 format but still has legacy disable* keys
|
||||
overwriteSettingsFile(rig, v3LegacyDisableSettings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -545,9 +545,9 @@ describe('settings-migration', () => {
|
|||
// Use fixture with future version ($version: 999)
|
||||
overwriteSettingsFile(rig, v999FutureVersionSettings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -571,23 +571,23 @@ describe('settings-migration', () => {
|
|||
|
||||
overwriteSettingsFile(rig, v1Settings);
|
||||
|
||||
// Run CLI multiple times with --help
|
||||
// Run CLI multiple times with `mcp list`
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
const firstRunSettings = readSettingsFile(rig);
|
||||
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
const secondRunSettings = readSettingsFile(rig);
|
||||
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
@ -606,9 +606,9 @@ describe('settings-migration', () => {
|
|||
// Use v1ComplexSettings fixture which has custom user settings
|
||||
overwriteSettingsFile(rig, v1ComplexSettings);
|
||||
|
||||
// Run CLI with --help to trigger migration without API calls
|
||||
// Run CLI with `mcp list` to trigger loadSettings() + migration without API calls
|
||||
try {
|
||||
await rig.runCommand(['--help']);
|
||||
await rig.runCommand(['mcp', 'list']);
|
||||
} catch {
|
||||
// Expected to potentially fail
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,20 +245,6 @@ describe('InputPrompt', () => {
|
|||
unmount();
|
||||
});
|
||||
|
||||
it('fills the prompt suggestion on right arrow without submitting', async () => {
|
||||
const { stdin, unmount } = renderWithProviders(
|
||||
<InputPrompt {...props} promptSuggestion="commit this" />,
|
||||
);
|
||||
await wait(350);
|
||||
|
||||
stdin.write('\u001B[C'); // right arrow
|
||||
await wait();
|
||||
|
||||
expect(mockBuffer.insert).toHaveBeenCalledWith('commit this');
|
||||
expect(props.onSubmit).not.toHaveBeenCalled();
|
||||
unmount();
|
||||
});
|
||||
|
||||
it('does not accept a prompt suggestion while command completion is active', async () => {
|
||||
mockCommandCompletion.showSuggestions = true;
|
||||
mockCommandCompletion.suggestions = [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue