diff --git a/job-tracker-ui/src/confirm-flow.test.tsx b/job-tracker-ui/src/confirm-flow.test.tsx
new file mode 100644
index 0000000..7aa407a
--- /dev/null
+++ b/job-tracker-ui/src/confirm-flow.test.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+import '@testing-library/jest-dom';
+import { fireEvent, render, screen } from '@testing-library/react';
+import { ConfirmProvider } from './confirm';
+import { useConfirm } from './confirm';
+
+function DeleteDemo() {
+ const { confirm } = useConfirm();
+ return ;
+}
+
+test('destructive confirm dialog shows warning state', async () => {
+ render(
+
+
+ ,
+ );
+
+ fireEvent.click(screen.getByRole('button', { name: /delete attachment/i }));
+
+ expect(await screen.findByText(/this action may be hard to undo/i)).toBeInTheDocument();
+ expect(screen.getByRole('button', { name: /^delete$/i })).toBeInTheDocument();
+});
diff --git a/job-tracker-ui/src/dialog-flow.test.tsx b/job-tracker-ui/src/dialog-flow.test.tsx
new file mode 100644
index 0000000..827fd5f
--- /dev/null
+++ b/job-tracker-ui/src/dialog-flow.test.tsx
@@ -0,0 +1,30 @@
+import React from 'react';
+import '@testing-library/jest-dom';
+import { render, screen, fireEvent } from '@testing-library/react';
+import { ConfirmProvider } from './confirm';
+import { PromptProvider, usePrompt } from './prompt';
+
+function RenameDemo() {
+ const { prompt } = usePrompt();
+ return (
+
+ );
+}
+
+test('prompt dialog opens with default rename value', async () => {
+ render(
+
+
+
+
+ ,
+ );
+
+ fireEvent.click(screen.getByRole('button', { name: /rename attachment/i }));
+
+ expect(await screen.findByDisplayValue('resume.pdf')).toBeInTheDocument();
+ expect(screen.getByText(/choose a new name/i)).toBeInTheDocument();
+ expect(screen.getByText(/10\/180/i)).toBeInTheDocument();
+});