mirror of
https://github.com/supabase/supabase.git
synced 2026-10-09 03:15:06 +03:00
Hides the "Multigres" term from user-facing surfaces — it's the tech powering High Availability projects, but "High Availability" is the only term users should see for now (per Slack discussion with Saxon/Ivan). **Changed:** - High Availability badge hover card (project overview) no longer says "Driven by Multigres" - Project creation HA toggle description drops the Multigres name + multigres.com link, keeps the informational copy - All schema dropdowns now hide the `multigres` schema on HA projects, by wiring in the previously-unused `filterSchemasForHighAvailability` helper: - `SchemaSelector` (shared — Table Editor, Functions, Indexes, Triggers, Schema Visualizer, etc.) - `ExposedSchemaSelector` (API settings → exposed schemas) - `EnableExtensionModal`, `CreateIndexSidePanel`, `ForeignKeySelector`, `WrapperTableEditor`, Integrations install sheet `AdvancedSettings` - SQL editor schema autocomplete (`useAddDefinitions`) - Schema list computations in the touched components are now memoized (incl. stabilizing `SchemaSelector`'s `excludedSchemas` default so the memo actually holds) **Added:** - Unit tests for `filterSchemasForHighAvailability` / `resolveHighAvailability` - MSW component test for `SchemaSelector` asserting `multigres` is hidden on HA projects and still shown on non-HA projects The filter is HA-gated on purpose: a self-hosted/non-HA user with their own schema named `multigres` still sees it. The flag-gated Multigres option in Logs is intentionally untouched — that exposure is kept for the Multigres team's debugging (separate track). ## To test - On an HA project (`high_availability: true`): hover the High Availability badge on project overview — no "Multigres" mention; open schema dropdowns in Table Editor / Database pages / SQL editor autocomplete — no `multigres` schema - Project creation with HA entitlement: toggle description has no Multigres wording/link - On a non-HA project: schema dropdowns behave as before <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Improvements** * Made schema dropdowns and related selectors high-availability aware across extensions, indexes, integrations, SQL editing, API exposed schemas, and relationship editors. * Updated project high-availability UI text and badge hover description to remove outdated branding and clarify horizontally scalable Postgres architecture. * **Tests** * Added coverage to ensure the schema “multigres” option is hidden/shown correctly based on high availability, and validated high-availability value handling. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
70 lines
2.2 KiB
TypeScript
70 lines
2.2 KiB
TypeScript
import { screen } from '@testing-library/react'
|
|
import userEvent from '@testing-library/user-event'
|
|
import { mockAnimationsApi } from 'jsdom-testing-mocks'
|
|
import { HttpResponse } from 'msw'
|
|
import { describe, expect, it, vi } from 'vitest'
|
|
|
|
import { SchemaSelector } from './SchemaSelector'
|
|
import { customRender } from '@/tests/lib/custom-render'
|
|
import { addAPIMock } from '@/tests/lib/msw'
|
|
|
|
mockAnimationsApi()
|
|
|
|
const mockProjectAndSchemas = ({ highAvailability }: { highAvailability: boolean }) => {
|
|
// useSelectedProjectQuery
|
|
addAPIMock({
|
|
method: 'get',
|
|
path: '/platform/projects/:ref',
|
|
// @ts-expect-error partial project response
|
|
response: {
|
|
cloud_provider: 'localhost',
|
|
id: 1,
|
|
inserted_at: '2021-08-02T06:40:40.646Z',
|
|
name: 'Default Project',
|
|
organization_id: 1,
|
|
ref: 'default',
|
|
region: 'local',
|
|
status: 'ACTIVE_HEALTHY',
|
|
high_availability: highAvailability,
|
|
},
|
|
})
|
|
// useSchemasQuery (schemas list SQL via pg-meta)
|
|
addAPIMock({
|
|
method: 'post',
|
|
path: '/platform/pg-meta/:ref/query',
|
|
response: () =>
|
|
HttpResponse.json([
|
|
{ id: 1, name: 'public' },
|
|
{ id: 2, name: 'multigres' },
|
|
{ id: 3, name: 'other' },
|
|
]),
|
|
})
|
|
}
|
|
|
|
const renderAndOpenSelector = async () => {
|
|
customRender(<SchemaSelector selectedSchemaName="public" onSelectSchema={vi.fn()} />)
|
|
|
|
await userEvent.click(await screen.findByTestId('schema-selector'))
|
|
// Wait for the list to be populated before asserting absence
|
|
await screen.findByRole('option', { name: 'public' })
|
|
}
|
|
|
|
describe('SchemaSelector', () => {
|
|
it('hides the multigres schema on high availability projects', async () => {
|
|
mockProjectAndSchemas({ highAvailability: true })
|
|
|
|
await renderAndOpenSelector()
|
|
|
|
expect(screen.getByRole('option', { name: 'other' })).toBeInTheDocument()
|
|
expect(screen.queryByRole('option', { name: 'multigres' })).not.toBeInTheDocument()
|
|
})
|
|
|
|
it('shows the multigres schema on non high availability projects', async () => {
|
|
mockProjectAndSchemas({ highAvailability: false })
|
|
|
|
await renderAndOpenSelector()
|
|
|
|
expect(screen.getByRole('option', { name: 'multigres' })).toBeInTheDocument()
|
|
})
|
|
})
|