From 59cdef867f15699af4b1fd09855880ee96f2dd55 Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Fri, 6 Dec 2024 16:12:34 -0600 Subject: [PATCH] Submit the form immediately --- .../MonthlyGoalAccordion.test.tsx | 77 +++++++++++++------ .../MonthlyGoalAccordion.tsx | 6 +- 2 files changed, 59 insertions(+), 24 deletions(-) diff --git a/src/components/Settings/preferences/accordions/MonthlyGoalAccordion/MonthlyGoalAccordion.test.tsx b/src/components/Settings/preferences/accordions/MonthlyGoalAccordion/MonthlyGoalAccordion.test.tsx index ca38c227d..1467728d8 100644 --- a/src/components/Settings/preferences/accordions/MonthlyGoalAccordion/MonthlyGoalAccordion.test.tsx +++ b/src/components/Settings/preferences/accordions/MonthlyGoalAccordion/MonthlyGoalAccordion.test.tsx @@ -149,29 +149,60 @@ describe('MonthlyGoalAccordion', () => { }); }); - it('resets goal to calculated goal', async () => { - const { getByRole, findByText } = render( - , - ); - const input = getByRole('spinbutton', { name: label }); - - expect( - await findByText( - 'Based on the past year, NetSuite estimates that you need at least $1,500 of monthly support. You can use this amount or choose your own target monthly goal.', - ), - ).toBeInTheDocument(); - - const resetButton = getByRole('button', { name: /Reset/ }); - userEvent.click(resetButton); - expect(input).toHaveValue(1500); - expect(resetButton).not.toBeInTheDocument(); + describe('calculated goal', () => { + it('resets goal to calculated goal', async () => { + const { getByRole, findByText } = render( + , + ); + const input = getByRole('spinbutton', { name: label }); + + expect( + await findByText( + 'Based on the past year, NetSuite estimates that you need at least $1,500 of monthly support. You can use this amount or choose your own target monthly goal.', + ), + ).toBeInTheDocument(); + + const resetButton = getByRole('button', { name: /Reset/ }); + userEvent.click(resetButton); + expect(input).toHaveValue(1500); + expect(resetButton).not.toBeInTheDocument(); + + await waitFor(() => + expect(mutationSpy).toHaveGraphqlOperation('UpdateAccountPreferences', { + input: { + id: accountListId, + attributes: { + settings: { + monthlyGoal: 1500, + }, + }, + }, + }), + ); + }); - userEvent.clear(input); - userEvent.type(input, '500'); - expect(getByRole('button', { name: /Reset/ })).toBeInTheDocument(); + it('hides reset button if goal matches calculated goal', async () => { + const { getByRole, findByText, queryByRole } = render( + , + ); + + expect( + await findByText( + 'Based on the past year, NetSuite estimates that you need at least $1,000 of monthly support. You can use this amount or choose your own target monthly goal.', + ), + ).toBeInTheDocument(); + expect(queryByRole('button', { name: /Reset/ })).not.toBeInTheDocument(); + + userEvent.type(getByRole('spinbutton', { name: label }), '0'); + expect(getByRole('button', { name: /Reset/ })).toBeInTheDocument(); + }); }); }); diff --git a/src/components/Settings/preferences/accordions/MonthlyGoalAccordion/MonthlyGoalAccordion.tsx b/src/components/Settings/preferences/accordions/MonthlyGoalAccordion/MonthlyGoalAccordion.tsx index d0f5a9a43..64af8114c 100644 --- a/src/components/Settings/preferences/accordions/MonthlyGoalAccordion/MonthlyGoalAccordion.tsx +++ b/src/components/Settings/preferences/accordions/MonthlyGoalAccordion/MonthlyGoalAccordion.tsx @@ -135,6 +135,7 @@ export const MonthlyGoalAccordion: React.FC = ({ values: { monthlyGoal }, errors, handleSubmit, + submitForm, isSubmitting, isValid, handleChange, @@ -180,7 +181,10 @@ export const MonthlyGoalAccordion: React.FC = ({