Files
supabase/e2e/studio/utils/test.ts
Pamela Chia 4ae0c08967 feat: tos v3 update banner + publish subprocessor list (#48524)
Terms of Service v3 (effective August 1, 2026, #48482) incorporates the
Data Processing Addendum by reference, and Legal asked for an in-app
notice announcing the change. The subprocessor list page that the new
Terms, DPA, and notice all point at was merged as an intentionally
hidden draft (#48100) and never un-hidden.

**Changed:**

- **Dashboard ToS-update banner**: re-enables `BannerTOSUpdate` with the
v3 copy provided by Legal (DPA incorporation, subprocessor list
location, fees provisions). New expiry (August 29) and a new
localStorage key, since anyone who dismissed the May v2 banner would
otherwise never see this one.
- **Subprocessor list page published**: removes `noindex,nofollow` and
links the page from the Legal Hub index, so the page customers are told
to subscribe on is actually discoverable.
- **Studio e2e fixture updated**: the global Playwright fixture
suppressed the banner via the old localStorage key; with the gate live
again it would have rendered the banner into every e2e run. It now sets
the new key.

## To test

Verified on the Vercel previews :

- [x] Studio: banner renders on dashboard load with the Notice badge and
new copy; Learn more dialog shows the three changes with correct hrefs
(DPA page, subprocessor list, /terms); Understood dismisses and persists
across reload via `terms-of-service-update-2026-08-01`
- [x] www: `/legal` lists Subprocessor List under Customer Legal
Resources; `/legal/customer-resources/subprocessor-list` serves `robots`
meta `index,follow` and renders the download button + subscribe form;
zero console errors on all tested pages

## Linear

- fixes GROWTH-1067


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

## Summary by CodeRabbit

* **New Features**
* Added a publicly accessible Subprocessor List to the legal resources.
* Updated the Terms of Service notice to reflect the August 1, 2026
update, including data processing, subprocessors, fraud prevention, and
consumer provisions.

* **Documentation**
* Made the Subprocessor List discoverable through standard search
indexing and the legal resources page.
* Extended the Terms of Service banner availability through August 29,
2026.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-31 15:49:08 +08:00

61 lines
1.5 KiB
TypeScript

import path from 'path'
import { test as base } from '@playwright/test'
import dotenv from 'dotenv'
import { env } from '../env.config.js'
dotenv.config({
path: path.resolve(import.meta.dirname, '../.env.local'),
override: true,
})
export interface TestOptions {
env: string
ref: string
apiUrl: string
}
export const test = base.extend<TestOptions>({
env: env.STUDIO_URL,
ref: env.PROJECT_REF ?? 'default',
apiUrl: env.API_URL,
page: async ({ page }, use) => {
const ref = env.PROJECT_REF ?? 'default'
await page.addInitScript((ref) => {
localStorage.setItem(
`table-editor-queue-operations-banner-dismissed-${ref}`,
JSON.stringify(true)
)
localStorage.setItem(`terms-of-service-update-2026-08-01`, JSON.stringify(true))
}, ref)
await use(page)
},
})
/**
* A function that returns a disposable object. Calling it with using keyword ensures that the cleanup function
* will be called whether the test succeeded or not.
*
* @example
* await using _ = await withSetupCleanup(
* () => createTableWithRLS('pw_table', 'pw_column'),
* async () => {
* await dropTable('pw_table')
* }
* )
* @param setup The setup function (create tables, etc.)
* @param cleanup The cleanup function (remove tables, etc.)
* @returns A disposable object
*/
export const withSetupCleanup = async (
setup: () => Promise<void>,
cleanup: () => Promise<void>
) => {
await setup()
return {
async [Symbol.asyncDispose]() {
await cleanup()
},
}
}