From 4c10fc90f6e14f293ff1e38b821e0f3dd4f7da19 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Wed, 9 Dec 2020 14:56:45 +0300 Subject: [PATCH] Fixed test, improved code --- .../src/components/task-page/user-selector.tsx | 17 ++++++++++++++--- .../issue_2440_value_must_be_a_user_instance.js | 4 ++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/cvat-ui/src/components/task-page/user-selector.tsx b/cvat-ui/src/components/task-page/user-selector.tsx index 4f54e023..39ee2110 100644 --- a/cvat-ui/src/components/task-page/user-selector.tsx +++ b/cvat-ui/src/components/task-page/user-selector.tsx @@ -61,18 +61,29 @@ export default function UserSelector(props: Props): JSX.Element { setUsers(initialUsers); }, [initialUsers]); - const handleSearch = (searchValue: string): void => { - if (searchValue) { - searchUsers(searchValue, setUsers); + useEffect(() => { + if (searchPhrase) { + searchUsers(searchPhrase, setUsers); } else { setUsers(initialUsers); } + }, [searchPhrase]); + + const handleSearch = (searchValue: string): void => { setSearchPhrase(searchValue); }; const onBlur = (): void => { if (!searchPhrase && value) { onSelect(null); + } else if (searchPhrase) { + const potentialUsers = users.filter((_user) => _user.username.includes(searchPhrase)); + if (potentialUsers.length === 1) { + setSearchPhrase(potentialUsers[0].username); + onSelect(potentialUsers[0]); + } else { + setSearchPhrase(value?.username || ''); + } } }; diff --git a/tests/cypress/integration/actions_users/issue_2440_value_must_be_a_user_instance.js b/tests/cypress/integration/actions_users/issue_2440_value_must_be_a_user_instance.js index 1fb53919..70b8c304 100644 --- a/tests/cypress/integration/actions_users/issue_2440_value_must_be_a_user_instance.js +++ b/tests/cypress/integration/actions_users/issue_2440_value_must_be_a_user_instance.js @@ -37,10 +37,10 @@ context('Value must be a user instance.', () => { // Before fix: // The following error originated from your application code, not from Cypress. // > Value must be a user instance - cy.get('.cvat-spinner').should('exist'); + cy.get('.cvat-spinner', { timeout: 500 }).should('not.exist'); // Remove the user's assignment for next tests. cy.get('.cvat-task-details-user-block').within(() => { - cy.get('[type="text"]').click().clear().type('{Enter}'); + cy.get('[type="search"]').click().clear().type('{Enter}'); }); }); });