fix knownhosts issue

This commit is contained in:
seavor 2026-04-20 00:03:29 -05:00
parent 5f28d43dff
commit e045f498a8
3 changed files with 42 additions and 4 deletions

View file

@ -86,8 +86,6 @@ const KnownHosts = (props: any) => {
webClient.request.authentication.testConnection({ ...getHostPort(host) });
};
// Mirror the store's selectedHost into the form field. Also kick off a
// connection test so the user sees the green/red indicator on mount.
useEffect(() => {
if (!selectedHost) {
return;

View file

@ -1,4 +1,4 @@
import { act, waitFor } from '@testing-library/react';
import { act, fireEvent, waitFor } from '@testing-library/react';
import { renderWithProviders, createMockWebClient, disconnectedState } from '../../__test-utils__';
@ -166,6 +166,26 @@ describe('Login — logout cycle (same JS session)', () => {
await flushEffects();
expect(hoisted.mockWebClient.request.authentication.login).not.toHaveBeenCalled();
});
test('submits with the restored host after a logout→remount without Required error', async () => {
const first = renderWithProviders(<Login />, { preloadedState: disconnectedState });
await flushEffects();
first.unmount();
const { getByRole, queryByText } = renderWithProviders(<Login />, {
preloadedState: disconnectedState,
});
await flushEffects();
fireEvent.click(getByRole('button', { name: /LoginForm\.label\.login/ }));
await flushEffects();
expect(queryByText(/required/i)).toBeNull();
expect(hoisted.mockWebClient.request.authentication.login).toHaveBeenCalledTimes(1);
expect(hoisted.mockWebClient.request.authentication.login.mock.calls[0][0]).toMatchObject({
userName: 'alice',
});
});
});
describe('Login — refresh cycle', () => {

View file

@ -174,6 +174,8 @@ const LoginFormBody = ({
const LoginForm = (props: LoginFormProps) => {
const { t } = useTranslation();
const knownHosts = useKnownHosts();
const settings = useSettings();
const validate = (values: any) => {
const errors: any = {};
@ -193,8 +195,26 @@ const LoginForm = (props: LoginFormProps) => {
props.onSubmit({ userName, ...values });
};
if (knownHosts.status !== LoadingState.READY || settings.status !== LoadingState.READY) {
return null;
}
const selectedHost = knownHosts.value?.selectedHost;
const initialValues = {
selectedHost,
userName: selectedHost?.userName ?? '',
remember: Boolean(selectedHost?.remember),
autoConnect: Boolean(settings.value?.autoConnect),
password: '',
};
return (
<Form onSubmit={handleOnSubmit} validate={validate}>
<Form
onSubmit={handleOnSubmit}
validate={validate}
initialValues={initialValues}
keepDirtyOnReinitialize
>
{({ handleSubmit, form }) => (
<LoginFormBody {...props} form={form} handleSubmit={handleSubmit} />
)}