diff --git a/frontend/src/lib/shared/discussion/MentionDropdown.svelte.test.ts b/frontend/src/lib/shared/discussion/MentionDropdown.svelte.test.ts
index 8fed26d2..c261a9d3 100644
--- a/frontend/src/lib/shared/discussion/MentionDropdown.svelte.test.ts
+++ b/frontend/src/lib/shared/discussion/MentionDropdown.svelte.test.ts
@@ -2,6 +2,7 @@ import { describe, it, expect, vi, afterEach } from 'vitest';
import { cleanup, render } from 'vitest-browser-svelte';
import { page, userEvent } from 'vitest/browser';
import MentionDropdown from './MentionDropdown.svelte';
+import MentionDropdownHost from './MentionDropdown.test-host.svelte';
import { m } from '$lib/paraglide/messages.js';
import type { components } from '$lib/generated/api';
@@ -195,4 +196,25 @@ describe('MentionDropdown — search input', () => {
expect(onSearch).toHaveBeenLastCalledWith('Walter');
});
});
+
+ it('keeps the user-edited search value when editorQuery changes after the takeover (Felix on PR #629)', async () => {
+ let setEditorQuery!: (q: string) => void;
+ render(MentionDropdownHost, {
+ model: baseModel(),
+ initialEditorQuery: 'WdG',
+ onReady: (s: (q: string) => void) => {
+ setEditorQuery = s;
+ }
+ });
+
+ await expect.element(page.getByRole('searchbox')).toHaveValue('WdG');
+
+ await page.getByRole('searchbox').fill('Walter');
+ await expect.element(page.getByRole('searchbox')).toHaveValue('Walter');
+
+ setEditorQuery('WdGruyter');
+ await new Promise((r) => setTimeout(r, 50));
+
+ await expect.element(page.getByRole('searchbox')).toHaveValue('Walter');
+ });
});
diff --git a/frontend/src/lib/shared/discussion/MentionDropdown.test-host.svelte b/frontend/src/lib/shared/discussion/MentionDropdown.test-host.svelte
new file mode 100644
index 00000000..4a69d9e5
--- /dev/null
+++ b/frontend/src/lib/shared/discussion/MentionDropdown.test-host.svelte
@@ -0,0 +1,32 @@
+
+
+