()
return {
@@ -22,6 +26,16 @@ vi.mock('@/app/components/billing/pricing', () => ({
default: () => billing.plansCommon.mostPopular
,
}))
+vi.mock('@/app/components/header/account-setting', () => ({
+ default: ({ onCancelAction }: { onCancelAction: () => void }) => (
+
+ ),
+}))
+
+vi.mock('@/hooks/use-local-storage', () => ({
+ useSetLocalStorage: () => mockSetEducationVerifying,
+}))
+
const mockUseProviderContext = vi.fn()
vi.mock('@/context/provider-context', () => ({
useProviderContext: () => mockUseProviderContext(),
@@ -61,16 +75,30 @@ const createPlan = (overrides: PlanOverrides = {}): PlanShape => ({
},
})
-const renderProvider = () => renderWithNuqs(
+const renderProvider = (children: React.ReactNode = ) => renderWithNuqs(
-
+ {children}
,
)
+const AccountSettingOpener = () => {
+ const setShowAccountSettingModal = useModalContextSelector(state => state.setShowAccountSettingModal)
+
+ return (
+
+ )
+}
+
describe('ModalContextProvider trigger events limit modal', () => {
beforeEach(() => {
mockUseAppContext.mockReset()
mockUseProviderContext.mockReset()
+ mockSetEducationVerifying.mockReset()
window.localStorage.clear()
mockUseAppContext.mockReturnValue({
currentWorkspace: {
@@ -115,6 +143,24 @@ describe('ModalContextProvider trigger events limit modal', () => {
expect(value).toBe('1')
})
+ it('clears the education verifying flag when account settings are canceled', async () => {
+ mockUseProviderContext.mockReturnValue({
+ plan: createPlan(),
+ isFetchedPlan: true,
+ })
+ const user = userEvent.setup()
+
+ renderProvider()
+
+ await user.click(screen.getByRole('button', { name: 'open account setting' }))
+ await user.click(await screen.findByRole('button', { name: 'cancel account setting' }))
+
+ expect(mockSetEducationVerifying).toHaveBeenCalledWith(expect.any(Function))
+ const updater = mockSetEducationVerifying.mock.calls[0]?.[0] as (educationVerifying: string) => string | null
+ expect(updater('yes')).toBeNull()
+ expect(updater('no')).toBe('no')
+ })
+
it('relies on the in-memory guard when localStorage reads throw', async () => {
const plan = createPlan({
type: Plan.professional,