From 3caa3dab7d747f47b56e3f33b4020197b910b079 Mon Sep 17 00:00:00 2001 From: viktorstrate Date: Mon, 30 Aug 2021 14:26:00 +0200 Subject: [PATCH] Fix periodic scanner form --- .../SettingsPage/PeriodicScanner.test.tsx | 67 +++++++++++++++++++ ui/src/Pages/SettingsPage/PeriodicScanner.tsx | 28 +++++--- ui/src/Pages/SettingsPage/SettingsPage.tsx | 2 +- 3 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 ui/src/Pages/SettingsPage/PeriodicScanner.test.tsx diff --git a/ui/src/Pages/SettingsPage/PeriodicScanner.test.tsx b/ui/src/Pages/SettingsPage/PeriodicScanner.test.tsx new file mode 100644 index 00000000..b36d64c4 --- /dev/null +++ b/ui/src/Pages/SettingsPage/PeriodicScanner.test.tsx @@ -0,0 +1,67 @@ +import { MockedProvider } from '@apollo/client/testing' +import { fireEvent, render, screen, waitFor } from '@testing-library/react' +import React from 'react' +import PeriodicScanner, { + SCAN_INTERVAL_MUTATION, + SCAN_INTERVAL_QUERY, +} from './PeriodicScanner' + +test('Enable periodic scanner', async () => { + const graphqlMocks = [ + { + request: { + query: SCAN_INTERVAL_QUERY, + }, + result: { + data: { + siteInfo: { periodicScanInterval: 7380, __typename: 'SiteInfo' }, + }, + }, + }, + { + request: { + query: SCAN_INTERVAL_MUTATION, + variables: { interval: 0 }, + }, + result: { data: { setPeriodicScanInterval: 0 } }, + }, + { + request: { + query: SCAN_INTERVAL_MUTATION, + variables: { interval: 123 * 60 }, + }, + result: { data: { setPeriodicScanInterval: 123 * 60 } }, + }, + ] + + render( + + + + ) + + const enableCheckbox = screen.getByLabelText('Enable periodic scanner') + const inputField = screen.getByLabelText('Interval value') + const unitDropdown = screen.getByLabelText('Interval unit') + + expect(inputField).toBeDisabled() + expect(unitDropdown).toBeDisabled() + + fireEvent.click(enableCheckbox) + + expect(inputField).toBeEnabled() + expect(unitDropdown).toBeEnabled() + + fireEvent.change(unitDropdown, { target: { value: 'minute' } }) + fireEvent.change(inputField, { target: { value: '123' } }) + + await waitFor(() => { + expect(screen.queryByText('Loading...')).not.toBeInTheDocument() + }) + + fireEvent.keyUp(inputField, { key: 'Enter' }) + + await waitFor(() => { + expect(screen.queryByText('Loading...')).not.toBeInTheDocument() + }) +}) diff --git a/ui/src/Pages/SettingsPage/PeriodicScanner.tsx b/ui/src/Pages/SettingsPage/PeriodicScanner.tsx index 0d7cba96..68a1b59f 100644 --- a/ui/src/Pages/SettingsPage/PeriodicScanner.tsx +++ b/ui/src/Pages/SettingsPage/PeriodicScanner.tsx @@ -1,7 +1,7 @@ import { gql } from '@apollo/client' import React, { useRef, useState } from 'react' import { useMutation, useQuery } from '@apollo/client' -import { InputLabelDescription } from './SettingsPage' +import { InputLabelDescription, InputLabelTitle } from './SettingsPage' import { useTranslation } from 'react-i18next' import { scanIntervalQuery } from './__generated__/scanIntervalQuery' import { @@ -13,7 +13,7 @@ import { TextField } from '../../primitives/form/Input' import Dropdown, { DropdownItem } from '../../primitives/form/Dropdown' import Loader from '../../primitives/Loader' -const SCAN_INTERVAL_QUERY = gql` +export const SCAN_INTERVAL_QUERY = gql` query scanIntervalQuery { siteInfo { periodicScanInterval @@ -21,7 +21,7 @@ const SCAN_INTERVAL_QUERY = gql` } ` -const SCAN_INTERVAL_MUTATION = gql` +export const SCAN_INTERVAL_MUTATION = gql` mutation changeScanIntervalMutation($interval: Int!) { setPeriodicScanInterval(interval: $interval) } @@ -100,8 +100,8 @@ const PeriodicScanner = () => { const [enablePeriodicScanner, setEnablePeriodicScanner] = useState(false) const [scanInterval, setScanInterval] = useState({ - value: 4, - unit: TimeUnit.Minute, + value: 0, + unit: TimeUnit.Second, }) const scanIntervalServerValue = useRef(null) @@ -148,7 +148,7 @@ const PeriodicScanner = () => { if (scanIntervalServerValue.current != seconds) { setScanIntervalMutation({ variables: { - interval: convertToSeconds(scanInterval), + interval: seconds, }, }) scanIntervalServerValue.current = seconds @@ -198,12 +198,12 @@ const PeriodicScanner = () => {