import React from 'react'; import { render, screen, waitFor, fireEvent, cleanup, act } from '@testing-library/react'; import App from '../App'; describe('Bulk-delete-all button render gating', () => { const orig = process.env.REACT_APP_DEV_TOOLS; afterEach(() => { cleanup(); if (orig === undefined) delete process.env.REACT_APP_DEV_TOOLS; else process.env.REACT_APP_DEV_TOOLS = orig; }); async function renderAndCreateCampaign() { window.history.replaceState({}, '', '/'); global.alert = jest.fn(); global.window.open = jest.fn(); render(); await waitFor(() => screen.getByRole('button', { name: /Create Campaign/i })); await act(async () => { fireEvent.click(screen.getByRole('button', { name: /Create Campaign/i })); }); await waitFor(() => screen.getByLabelText(/Campaign Name/i)); await act(async () => { fireEvent.change(screen.getByLabelText(/Campaign Name/i), { target: { value: 'Gate Render Test' } }); fireEvent.click(screen.getByRole('button', { name: /^Create$/i })); await new Promise(r => setTimeout(r, 200)); }); } test('prod safety: button absent when DEV_TOOLS unset', async () => { delete process.env.REACT_APP_DEV_TOOLS; await renderAndCreateCampaign(); expect(screen.queryByText(/Delete All Campaigns/i)).not.toBeInTheDocument(); }); });