Files
supabase/apps/studio/components/interfaces/MCP/InterstitialTerminalScreen.test.tsx
kemal.earthandAli Waseem 4aa34f556a feat(studio): mcp secrets interstitial polish (#50351)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

- We made the Next step copy a bit more generic so it doesn't read like
it's pointing you back to Inspector UI.
- Added CTA on key stored screen to send you to Edge Function Secrets
directly.
- Tidies up footer area to always be centrally aligned across all
states.

### 1. Enable the feature flag

### 2. Preview states via URL

Mock mode is enabled automatically in local/staging. Navigate to
`/mcp/secrets` with a `state` query param:

http://localhost:8082/mcp/secrets?state=<state>

States that need no other params:

| `state` value    | What it shows                          |
| ----------------- | --------------------------------------- |
| `loading`          | Loading skeleton                        |
| `expired`          | Link expired                            |
| `cancelled`        | Request cancelled                       |
| `paused`           | Storing keys paused                     |
| `wrong-account`    | Signed in as the wrong account          |
| `error`            | Generic failure                         |

States that need a real project —ame=<KEY_NAME>`:

| `state` value      | What it sh           |
| -------------------- | ---------------------- |
| `form`                | The "st              |
| `stored`              | Success              |
| `stored-timeout`      | Successopped waiting |
| `already-stored` | Key was already stored, nothing to do |

Example:

http://localhost:8082/mcp/secretsJECT_REF&name=OPENAI_API_KEY

### 3. What to check

- [ ] `stored` / `already-stored`tions secrets"** button linking to
`/project/<ref>/functions/secrets
- [ ] States without a project re `paused`, `error`) don't show that
button
- [ ] Footer text is centered on
- [ ] `wrong-account` → **Switch its footer is centered
- [ ] The provider-dashboard link` state, use a `name`
like`OPENAI_API_KEY` or `RESEND_API_Khint) is centered too


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added a project-specific link to Edge Functions secrets from the MCP
setup screen when a project is available.
* Added a separator to distinguish the secrets link from the remaining
setup guidance.

* **Improvements**
* Updated completion guidance to tell users to return to their agent and
confirm the setup is finished.
* Standardized interstitial footer content with centered guidance and
consistent provider dashboard instructions.

* **Tests**
* Added coverage for displaying the project-specific secrets link and
hiding it when no project is associated.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Ali Waseem <waseema393@gmail.com>
2026-09-14 17:44:42 +01:00

33 lines
1.1 KiB
TypeScript

import { screen } from '@testing-library/react'
import { describe, expect, it } from 'vitest'
import { InterstitialTerminalScreen } from './InterstitialTerminalScreen'
import { customRender } from '@/tests/lib/custom-render'
const baseCopy = {
title: 'Key stored',
subtitle: 'RESEND_API_KEY is saved for billing-staging.',
calloutTitle: 'Next step',
calloutBody: 'Head back to your agent and let it know you finished.',
footer: 'You can close this tab.',
}
describe('InterstitialTerminalScreen', () => {
it('links to the project Edge Functions secrets page when a project ref is given', () => {
customRender(<InterstitialTerminalScreen {...baseCopy} projectRef="abcdefghijklmnopqrst" />)
expect(screen.getByRole('link', { name: 'Go to Edge Functions secrets' })).toHaveAttribute(
'href',
'/project/abcdefghijklmnopqrst/functions/secrets'
)
})
it('omits the Edge Functions secrets link when there is no project to point at', () => {
customRender(<InterstitialTerminalScreen {...baseCopy} />)
expect(
screen.queryByRole('link', { name: 'Go to Edge Functions secrets' })
).not.toBeInTheDocument()
})
})