Files
calendar/packages/features/feature-opt-in/components/FeatureOptInSuccessDialog.tsx
T
Eunjae LeeandGitHub 087fa03513 test: add e2e test for Feature Opt-In banner (#27100)
## What does this PR do?

Adds an end-to-end test for the Feature Opt-In banner flow. This test verifies the complete user journey from seeing the banner to enabling a feature.

Currently `OPT_IN_FEATURES` in `packages/features/feature-opt-in/config.ts` is empty, so this e2e test skips. Once we uncomment the `bookings-v3` item from the config, this e2e test will run and pass. This is a preparation for when we enable the feature.

**Changes:**
- Creates a new e2e test file (`feature-opt-in-banner.e2e.ts`) that tests the complete opt-in flow
- Adds `data-testid` attributes to banner and dialog components for reliable test selectors

## Mandatory Tasks (DO NOT REMOVE)

- [x] I have self-reviewed the code (A decent size PR without self-review might be rejected).
- [x] I have updated the developer docs in /docs if this PR makes changes that would require a [documentation change](https://cal.com/docs). N/A - test only.
- [x] I confirm automated tests are in place that prove my fix is effective or that my feature works.

## How should this be tested?

1. Add the `ready-for-e2e` label to run e2e tests in CI
2. The test should pass when run with `PLAYWRIGHT_HEADLESS=1 yarn e2e feature-opt-in-banner.e2e.ts`

**Test requirements:**
- The `bookings-v3` feature flag must exist in the Features table (the test uses `prisma.feature.upsert` to ensure this)
- The test will skip if `bookings-v3` is not in `OPT_IN_FEATURES`

## Checklist

- [x] I have read the [contributing guide](https://github.com/calcom/cal.com/blob/main/CONTRIBUTING.md)
- [x] My code follows the style guidelines of this project
- [x] I have commented my code, particularly in hard-to-understand areas
- [x] I have checked if my changes generate no new warnings

## Updates since last revision

- Replaced text-based locators (`getByText`, `getByRole`) with `data-testid` selectors for more reliable element targeting
- Added `data-testid` attributes to `FeatureOptInBanner`, `FeatureOptInConfirmDialog`, and `FeatureOptInSuccessDialog` components

## Human Review Checklist

- [ ] Verify the `data-testid` attributes don't conflict with existing test IDs in the codebase
- [ ] Confirm the test correctly skips when `bookings-v3` is not in `OPT_IN_FEATURES`
- [ ] Check that the added `data-testid` attributes follow the project's naming conventions

---
Link to Devin run: https://app.devin.ai/sessions/97158ab1b7414e3988ba803b30d95b3e
Requested by: @eunjae-lee
2026-01-22 12:09:13 +01:00

54 lines
1.5 KiB
TypeScript

"use client";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Button } from "@coss/ui/components/button";
import {
Dialog,
DialogClose,
DialogDescription,
DialogFooter,
DialogHeader,
DialogPopup,
DialogTitle,
} from "@coss/ui/components/dialog";
import type { ReactElement } from "react";
interface FeatureOptInSuccessDialogProps {
isOpen: boolean;
onClose: () => void;
onDismiss: () => void;
onViewSettings: () => void;
}
export function FeatureOptInSuccessDialog({
isOpen,
onClose,
onDismiss,
onViewSettings,
}: FeatureOptInSuccessDialogProps): ReactElement {
const { t } = useLocale();
return (
<Dialog open={isOpen} onOpenChange={onClose}>
<DialogPopup className="sm:max-w-md" data-testid="feature-opt-in-success-dialog">
<DialogHeader>
<DialogTitle data-testid="feature-opt-in-success-dialog-title">
{t("feature_enabled_successfully")}
</DialogTitle>
<DialogDescription>{t("feature_enabled_description")}</DialogDescription>
</DialogHeader>
<DialogFooter>
<DialogClose render={<Button variant="outline" />} onClick={onDismiss}>
{t("dismiss")}
</DialogClose>
<Button data-testid="feature-opt-in-success-dialog-view-settings" onClick={onViewSettings}>
{t("view_settings")}
</Button>
</DialogFooter>
</DialogPopup>
</Dialog>
);
}
export default FeatureOptInSuccessDialog;