From b2a7131ef9f454d9021bdbd63721dac373174316 Mon Sep 17 00:00:00 2001 From: Hana Xu Date: Thu, 14 Aug 2025 11:47:36 -0400 Subject: [PATCH 1/5] use empty string as fallback for delete dialog titles instead of unknown --- packages/manager/src/features/Domains/DeleteDomain.tsx | 4 ++-- packages/manager/src/features/Domains/DisableDomainDialog.tsx | 2 +- packages/manager/src/features/Domains/DomainsLanding.tsx | 4 ++-- packages/manager/src/features/Managed/Contacts/Contacts.tsx | 2 +- .../src/features/Managed/Credentials/CredentialList.tsx | 2 +- .../manager/src/features/Managed/Monitors/MonitorTable.tsx | 2 +- .../src/features/NodeBalancers/NodeBalancerDeleteDialog.tsx | 2 +- .../features/PlacementGroups/PlacementGroupsDeleteModal.tsx | 2 +- .../StackScriptLanding/StackScriptDeleteDialog.tsx | 2 +- .../manager/src/features/VPCs/VPCLanding/VPCDeleteDialog.tsx | 2 +- .../src/features/Volumes/Dialogs/DeleteVolumeDialog.tsx | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/manager/src/features/Domains/DeleteDomain.tsx b/packages/manager/src/features/Domains/DeleteDomain.tsx index 2493a975d34..0b13aa5de03 100644 --- a/packages/manager/src/features/Domains/DeleteDomain.tsx +++ b/packages/manager/src/features/Domains/DeleteDomain.tsx @@ -47,7 +47,7 @@ export const DeleteDomain = (props: DeleteDomainProps) => { entity={{ action: 'deletion', error: domainError, - name: domainLabel ?? 'Unknown', + name: domainLabel, primaryBtnText: 'Delete Domain', type: 'Domain', }} @@ -57,7 +57,7 @@ export const DeleteDomain = (props: DeleteDomainProps) => { onClick={onDelete} onClose={() => setOpen(false)} open={open} - title={`Delete Domain ${domainLabel ?? 'Unknown'}?`} + title={`Delete Domain ${domainLabel}?`} > diff --git a/packages/manager/src/features/Domains/DisableDomainDialog.tsx b/packages/manager/src/features/Domains/DisableDomainDialog.tsx index ad6c75708ff..1062bd48400 100644 --- a/packages/manager/src/features/Domains/DisableDomainDialog.tsx +++ b/packages/manager/src/features/Domains/DisableDomainDialog.tsx @@ -62,7 +62,7 @@ export const DisableDomainDialog = React.memo( isFetching={isFetching} onClose={onClose} open={open} - title={`Disable Domain ${domain?.domain ?? 'Unknown'}?`} + title={`Disable Domain${domain ? ` ${domain.domain}` : ''}?`} > Are you sure you want to disable this DNS zone? diff --git a/packages/manager/src/features/Domains/DomainsLanding.tsx b/packages/manager/src/features/Domains/DomainsLanding.tsx index 9cf137664c8..4ee5fc33290 100644 --- a/packages/manager/src/features/Domains/DomainsLanding.tsx +++ b/packages/manager/src/features/Domains/DomainsLanding.tsx @@ -368,7 +368,7 @@ export const DomainsLanding = (props: DomainsLandingProps) => { entity={{ action: 'deletion', error: domainError, - name: selectedDomain?.domain ?? 'Unknown', + name: selectedDomain?.domain ?? '', primaryBtnText: 'Delete Domain', type: 'Domain', }} @@ -379,7 +379,7 @@ export const DomainsLanding = (props: DomainsLandingProps) => { onClick={removeDomain} onClose={navigateToDomains} open={params.action === 'delete'} - title={`Delete Domain ${selectedDomain?.domain ?? 'Unknown'}?`} + title={`Delete Domain${selectedDomain ? ` ${selectedDomain.domain}` : ''}?`} > diff --git a/packages/manager/src/features/Managed/Contacts/Contacts.tsx b/packages/manager/src/features/Managed/Contacts/Contacts.tsx index 20ff1fa714d..214d4b8f047 100644 --- a/packages/manager/src/features/Managed/Contacts/Contacts.tsx +++ b/packages/manager/src/features/Managed/Contacts/Contacts.tsx @@ -225,7 +225,7 @@ export const Contacts = () => { }); }} open={isDeleteContactDialogOpen} - title={`Delete Contact ${selectedContact?.name || 'Unknown'}?`} + title={`Delete Contact${selectedContact ? ` ${selectedContact.name}` : ''}?`} > diff --git a/packages/manager/src/features/Managed/Credentials/CredentialList.tsx b/packages/manager/src/features/Managed/Credentials/CredentialList.tsx index 45d2d27ff1a..eb87c8072b4 100644 --- a/packages/manager/src/features/Managed/Credentials/CredentialList.tsx +++ b/packages/manager/src/features/Managed/Credentials/CredentialList.tsx @@ -252,7 +252,7 @@ export const CredentialList = () => { onClick={handleDelete} onClose={() => navigate({ to: '/managed/credentials' })} open={isDeleteDialogOpen} - title={`Delete Credential ${selectedCredential?.label || 'Unknown'}?`} + title={`Delete Credential${selectedCredential ? ` ${selectedCredential.label}` : ''}?`} > diff --git a/packages/manager/src/features/Managed/Monitors/MonitorTable.tsx b/packages/manager/src/features/Managed/Monitors/MonitorTable.tsx index ab573f5296a..7c4fed329dd 100644 --- a/packages/manager/src/features/Managed/Monitors/MonitorTable.tsx +++ b/packages/manager/src/features/Managed/Monitors/MonitorTable.tsx @@ -228,7 +228,7 @@ export const MonitorTable = () => { onClick={handleDelete} onClose={() => navigate({ to: '/managed/monitors' })} open={isDeleteDialogOpen} - title={`Delete Monitor ${selectedMonitor?.label || 'Unknown'}?`} + title={`Delete Monitor${selectedMonitor ? ` ${selectedMonitor.label}` : ''}?`} > diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerDeleteDialog.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerDeleteDialog.tsx index fb3a7fcb6a3..f2b81b3076a 100644 --- a/packages/manager/src/features/NodeBalancers/NodeBalancerDeleteDialog.tsx +++ b/packages/manager/src/features/NodeBalancers/NodeBalancerDeleteDialog.tsx @@ -59,7 +59,7 @@ export const NodeBalancerDeleteDialog = ({ : () => navigate({ to: '/nodebalancers' }) } open={open} - title={`Delete ${label ?? 'Unknown'}?`} + title={`Delete${label ? ` ${label}` : ''}?`} typographyStyle={{ marginTop: '20px' }} > diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx index a860060f2aa..5e74c6f1206 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx @@ -116,7 +116,7 @@ export const PlacementGroupsDeleteModal = (props: Props) => { onClick={onDelete} onClose={handleClose} open={open} - title={`Delete Placement Group ${selectedPlacementGroup?.label ?? 'Unknown'}`} + title={`Delete Placement Group${selectedPlacementGroup ? ` ${selectedPlacementGroup.label}` : ''}`} > {error && ( { isFetching={isFetching} onClose={onClose} open={open} - title={`Delete StackScript ${stackscript?.label ?? 'Unknown'}?`} + title={`Delete StackScript${stackscript ? ` ${stackscript.label}` : ''}?`} > Are you sure you want to delete this StackScript? diff --git a/packages/manager/src/features/VPCs/VPCLanding/VPCDeleteDialog.tsx b/packages/manager/src/features/VPCs/VPCLanding/VPCDeleteDialog.tsx index 5b644c3c20d..8ee083a6ea4 100644 --- a/packages/manager/src/features/VPCs/VPCLanding/VPCDeleteDialog.tsx +++ b/packages/manager/src/features/VPCs/VPCLanding/VPCDeleteDialog.tsx @@ -62,7 +62,7 @@ export const VPCDeleteDialog = (props: Props) => { onClick={onDeleteVPC} onClose={onClose} open={open} - title={`Delete VPC ${vpc?.label ?? 'Unknown'}`} + title={`Delete VPC${vpc ? ` ${vpc.label}` : ''}`} /> ); }; diff --git a/packages/manager/src/features/Volumes/Dialogs/DeleteVolumeDialog.tsx b/packages/manager/src/features/Volumes/Dialogs/DeleteVolumeDialog.tsx index 86d0a548be8..13c4a5b65e4 100644 --- a/packages/manager/src/features/Volumes/Dialogs/DeleteVolumeDialog.tsx +++ b/packages/manager/src/features/Volumes/Dialogs/DeleteVolumeDialog.tsx @@ -49,7 +49,7 @@ export const DeleteVolumeDialog = (props: Props) => { onClick={onDelete} onClose={onClose} open={open} - title={`Delete Volume ${volume?.label ?? 'Unknown'}?`} + title={`Delete Volume${volume ? ` ${volume.label}` : ''}?`} typographyStyle={{ marginTop: '10px' }} /> ); From 70bc38cc3d292cda6f310fa635bdff492a6e75cf Mon Sep 17 00:00:00 2001 From: Hana Xu Date: Thu, 14 Aug 2025 11:54:30 -0400 Subject: [PATCH 2/5] Added changeset: Use empty string instead of unknown for delete dialog titles --- packages/manager/.changeset/pr-12701-fixed-1755186870164.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/manager/.changeset/pr-12701-fixed-1755186870164.md diff --git a/packages/manager/.changeset/pr-12701-fixed-1755186870164.md b/packages/manager/.changeset/pr-12701-fixed-1755186870164.md new file mode 100644 index 00000000000..058c72424eb --- /dev/null +++ b/packages/manager/.changeset/pr-12701-fixed-1755186870164.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Fixed +--- + +Use empty string instead of unknown for delete dialog titles ([#12701](https://github.com/linode/manager/pull/12701)) From 0c96c215955c948a7b8897121224af81ba968fbf Mon Sep 17 00:00:00 2001 From: Hana Xu Date: Thu, 14 Aug 2025 18:14:22 -0400 Subject: [PATCH 3/5] address feedback pt 1 --- .../features/Domains/DeleteDomain.test.tsx | 44 ----------- .../src/features/Domains/DeleteDomain.tsx | 76 ------------------- .../features/Domains/DeleteDomainDialog.tsx | 68 +++++++++++++++++ .../Domains/DomainDetail/DomainDetail.tsx | 23 +++++- .../src/features/Domains/DomainsLanding.tsx | 52 +++---------- .../PlacementGroupsDeleteModal.tsx | 2 +- 6 files changed, 99 insertions(+), 166 deletions(-) delete mode 100644 packages/manager/src/features/Domains/DeleteDomain.test.tsx delete mode 100644 packages/manager/src/features/Domains/DeleteDomain.tsx create mode 100644 packages/manager/src/features/Domains/DeleteDomainDialog.tsx diff --git a/packages/manager/src/features/Domains/DeleteDomain.test.tsx b/packages/manager/src/features/Domains/DeleteDomain.test.tsx deleted file mode 100644 index 673c00feda5..00000000000 --- a/packages/manager/src/features/Domains/DeleteDomain.test.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { fireEvent, render, waitFor } from '@testing-library/react'; -import * as React from 'react'; - -import { wrapWithTheme } from 'src/utilities/testHelpers'; - -import { DeleteDomain } from './DeleteDomain'; - -import type { DeleteDomainProps } from './DeleteDomain'; - -const domainId = 1; -const domainLabel = 'example.com'; - -const props: DeleteDomainProps = { - domainError: null, - domainId, - domainLabel, -}; - -describe('DeleteDomain', () => { - it('includes a button to delete the domain', () => { - const { getByText } = render(wrapWithTheme()); - getByText('Delete Domain'); - }); - - it('displays the modal when the button is clicked', async () => { - const { findByText, getByText } = render( - wrapWithTheme() - ); - fireEvent.click(getByText('Delete Domain')); - await findByText('Delete Domain example.com?'); - expect(getByText('Delete Domain example.com?')).toBeInTheDocument(); - }); - - it('closes the modal when the "Cancel" button is clicked', async () => { - const { getByText, queryByText } = render( - wrapWithTheme() - ); - fireEvent.click(getByText('Delete Domain')); - fireEvent.click(getByText('Cancel')); - await waitFor(() => - expect(queryByText(/Are you sure you want to delete/)).toBeNull() - ); - }); -}); diff --git a/packages/manager/src/features/Domains/DeleteDomain.tsx b/packages/manager/src/features/Domains/DeleteDomain.tsx deleted file mode 100644 index 0b13aa5de03..00000000000 --- a/packages/manager/src/features/Domains/DeleteDomain.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { useDeleteDomainMutation } from '@linode/queries'; -import { Button, Notice, Typography } from '@linode/ui'; -import { styled } from '@mui/material/styles'; -import { useSnackbar } from 'notistack'; -import * as React from 'react'; - -import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog'; - -import type { APIError } from '@linode/api-v4'; -export interface DeleteDomainProps { - domainError: APIError[] | null; - domainId: number; - domainLabel: string; - // Function that is invoked after Domain has been successfully deleted. - onSuccess?: () => void; -} - -export const DeleteDomain = (props: DeleteDomainProps) => { - const { domainError, domainId, domainLabel } = props; - const { enqueueSnackbar } = useSnackbar(); - - const { - error, - isPending, - mutateAsync: deleteDomain, - } = useDeleteDomainMutation(domainId); - - const [open, setOpen] = React.useState(false); - - const onDelete = () => { - deleteDomain().then(() => { - enqueueSnackbar('Domain deleted successfully.', { - variant: 'success', - }); - if (props.onSuccess) { - props.onSuccess(); - } - }); - }; - - return ( - <> - setOpen(true)}> - Delete Domain - - setOpen(false)} - open={open} - title={`Delete Domain ${domainLabel}?`} - > - - - Warning: Deleting this domain is permanent and can’t be undone. - - - - - ); -}; - -const StyledButton = styled(Button, { label: 'StyledButton' })(({ theme }) => ({ - [theme.breakpoints.down('lg')]: { - marginRight: theme.spacing(), - }, -})); diff --git a/packages/manager/src/features/Domains/DeleteDomainDialog.tsx b/packages/manager/src/features/Domains/DeleteDomainDialog.tsx new file mode 100644 index 00000000000..4555c6a7823 --- /dev/null +++ b/packages/manager/src/features/Domains/DeleteDomainDialog.tsx @@ -0,0 +1,68 @@ +import { useDeleteDomainMutation } from '@linode/queries'; +import { Notice, Typography } from '@linode/ui'; +import { useSnackbar } from 'notistack'; +import * as React from 'react'; + +import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog'; + +import type { APIError } from '@linode/api-v4'; +export interface DeleteDomainProps { + domainError: APIError[] | null; + domainId?: number; + domainLabel?: string; + isFetching: boolean; + onClose?: () => void; + // Function that is invoked after Domain has been successfully deleted. + onSuccess?: () => void; + open: boolean; +} + +export const DeleteDomainDialog = (props: DeleteDomainProps) => { + const { domainError, domainId, domainLabel, open, onClose, isFetching } = + props; + const { enqueueSnackbar } = useSnackbar(); + + const { + error, + isPending, + mutateAsync: deleteDomain, + } = useDeleteDomainMutation(domainId ?? 0); + + const onDelete = () => { + deleteDomain().then(() => { + enqueueSnackbar('Domain deleted successfully.', { + variant: 'success', + }); + if (props.onSuccess) { + props.onSuccess(); + } + }); + }; + + return ( + + + + Warning: Deleting this domain is permanent and can’t + be undone.{' '} + + + + ); +}; diff --git a/packages/manager/src/features/Domains/DomainDetail/DomainDetail.tsx b/packages/manager/src/features/Domains/DomainDetail/DomainDetail.tsx index 9b838db064c..27d2eaf56a1 100644 --- a/packages/manager/src/features/Domains/DomainDetail/DomainDetail.tsx +++ b/packages/manager/src/features/Domains/DomainDetail/DomainDetail.tsx @@ -4,6 +4,7 @@ import { useUpdateDomainMutation, } from '@linode/queries'; import { + Button, CircleProgress, ErrorState, Notice, @@ -20,7 +21,7 @@ import { LandingHeader } from 'src/components/LandingHeader'; import { TagCell } from 'src/components/TagCell/TagCell'; import { useIsResourceRestricted } from 'src/hooks/useIsResourceRestricted'; -import { DeleteDomain } from '../DeleteDomain'; +import { DeleteDomainDialog } from '../DeleteDomainDialog'; import { DownloadDNSZoneFileButton } from '../DownloadDNSZoneFileButton'; import { DomainRecords } from './DomainRecords/DomainRecords'; @@ -35,6 +36,7 @@ export const DomainDetail = () => { const { data: domain, error, + isFetching: isFetchingDomain, isLoading, } = useDomainQuery(domainId, !!domainId); const { mutateAsync: updateDomain } = useUpdateDomainMutation(); @@ -52,6 +54,8 @@ export const DomainDetail = () => { }); const [updateError, setUpdateError] = React.useState(); + const [isDeleteDomainDialogOpen, setDeleteDomainDialogOpen] = + React.useState(false); const handleLabelChange = (label: string) => { setUpdateError(undefined); @@ -146,11 +150,20 @@ export const DomainDetail = () => { /> - setDeleteDomainDialogOpen(true)} + > + Delete Domain + + setDeleteDomainDialogOpen(false)} onSuccess={() => navigate({ to: '/domains' })} + open={isDeleteDomainDialogOpen} /> @@ -209,3 +222,9 @@ const StyledDiv = styled('div', { label: 'StyledDiv' })(({ theme }) => ({ marginLeft: theme.spacing(), }, })); + +const StyledButton = styled(Button, { label: 'StyledButton' })(({ theme }) => ({ + [theme.breakpoints.down('lg')]: { + marginRight: theme.spacing(), + }, +})); diff --git a/packages/manager/src/features/Domains/DomainsLanding.tsx b/packages/manager/src/features/Domains/DomainsLanding.tsx index 4ee5fc33290..1467e60bb71 100644 --- a/packages/manager/src/features/Domains/DomainsLanding.tsx +++ b/packages/manager/src/features/Domains/DomainsLanding.tsx @@ -1,18 +1,11 @@ import { - useDeleteDomainMutation, useDomainQuery, useDomainsQuery, useLinodesQuery, useProfile, useUpdateDomainMutation, } from '@linode/queries'; -import { - Button, - CircleProgress, - ErrorState, - Notice, - Typography, -} from '@linode/ui'; +import { Button, CircleProgress, ErrorState, Notice } from '@linode/ui'; import { Hidden } from '@linode/ui'; import { styled } from '@mui/material/styles'; import { @@ -33,7 +26,6 @@ import { TableCell } from 'src/components/TableCell'; import { TableHead } from 'src/components/TableHead'; import { TableRow } from 'src/components/TableRow'; import { TableSortCell } from 'src/components/TableSortCell'; -import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog'; import { useOrderV2 } from 'src/hooks/useOrderV2'; import { usePaginationV2 } from 'src/hooks/usePaginationV2'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; @@ -44,6 +36,7 @@ import { DOMAINS_TABLE_DEFAULT_ORDER_BY, DOMAINS_TABLE_PREFERENCE_KEY, } from './constants'; +import { DeleteDomainDialog } from './DeleteDomainDialog'; import { DisableDomainDialog } from './DisableDomainDialog'; import { DomainBanner } from './DomainBanner'; import { DomainsEmptyLandingState } from './DomainsEmptyLandingPage'; @@ -122,12 +115,6 @@ export const DomainsLanding = (props: DomainsLandingProps) => { error: domainError, } = useDomainQuery(params.domainId ?? -1, !!params.domainId); - const { - error: deleteError, - isPending: isDeleting, - mutateAsync: deleteDomain, - } = useDeleteDomainMutation(selectedDomain?.id ?? 0); - const { mutateAsync: updateDomain } = useUpdateDomainMutation(); const navigateToDomains = () => { @@ -181,12 +168,6 @@ export const DomainsLanding = (props: DomainsLandingProps) => { }); }; - const removeDomain = () => { - deleteDomain().then(() => { - navigateToDomains(); - }); - }; - const handleDisableOrEnable = ( action: 'disable' | 'enable', domain: Domain @@ -364,35 +345,20 @@ export const DomainsLanding = (props: DomainsLandingProps) => { onClose={navigateToDomains} open={params.action === 'edit'} /> - navigateToDomains()} open={params.action === 'delete'} - title={`Delete Domain${selectedDomain ? ` ${selectedDomain.domain}` : ''}?`} - > - - - Warning: Deleting this domain is permanent and - can’t be undone. - - - + /> ); }; const StyledButon = styled(Button, { label: 'StyledButton' })(({ theme }) => ({ - marginLeft: `-${theme.spacing()}`, + marginLeft: `-${theme.spacingFunction()}`, whiteSpace: 'nowrap', })); diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx index 5e74c6f1206..be46a8fdb59 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx @@ -116,7 +116,7 @@ export const PlacementGroupsDeleteModal = (props: Props) => { onClick={onDelete} onClose={handleClose} open={open} - title={`Delete Placement Group${selectedPlacementGroup ? ` ${selectedPlacementGroup.label}` : ''}`} + title={`Delete Placement Group${selectedPlacementGroup ? ` ${selectedPlacementGroup.label}` : ''}?`} > {error && ( Date: Fri, 15 Aug 2025 12:16:49 -0400 Subject: [PATCH 4/5] fix test failures --- .../delete-placement-groups.spec.ts | 28 +++++++++---------- .../PlacementGroupsDeleteModal.test.tsx | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/manager/cypress/e2e/core/placementGroups/delete-placement-groups.spec.ts b/packages/manager/cypress/e2e/core/placementGroups/delete-placement-groups.spec.ts index 1d7911d1280..ad69ded675f 100644 --- a/packages/manager/cypress/e2e/core/placementGroups/delete-placement-groups.spec.ts +++ b/packages/manager/cypress/e2e/core/placementGroups/delete-placement-groups.spec.ts @@ -84,7 +84,7 @@ describe('Placement Group deletion', () => { ).as('deletePlacementGroupError'); ui.dialog - .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`) + .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}?`) .should('be.visible') .within(() => { cy.findByLabelText('Placement Group').type(mockPlacementGroup.label); @@ -106,7 +106,7 @@ describe('Placement Group deletion', () => { // Confirm deletion warning appears, complete Type-to-Confirm, and submit confirmation. ui.dialog - .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`) + .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}?`) .should('be.visible') .within(() => { cy.findByText(deletionWarning).should('be.visible'); @@ -197,7 +197,7 @@ describe('Placement Group deletion', () => { ).as('UnassignPlacementGroupError'); ui.dialog - .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`) + .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}?`) .should('be.visible') .within(() => { cy.get('[data-qa-selection-list]').within(() => { @@ -223,7 +223,7 @@ describe('Placement Group deletion', () => { // Confirm deletion warning appears and that form cannot be submitted // while Linodes are assigned. ui.dialog - .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`) + .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}?`) .should('be.visible') .within(() => { cy.findByText(deletionWarning).should('be.visible'); @@ -346,7 +346,7 @@ describe('Placement Group deletion', () => { // The dialog can be closed after an unexpect error show up ui.dialog - .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`) + .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}?`) .should('be.visible') .within(() => { cy.findByLabelText('Placement Group').type(mockPlacementGroup.label); @@ -366,9 +366,9 @@ describe('Placement Group deletion', () => { .should('be.enabled') .click(); }); - cy.findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`).should( - 'not.exist' - ); + cy.findByTitle( + `Delete Placement Group ${mockPlacementGroup.label}?` + ).should('not.exist'); // Click "Delete" button next to the mock Placement Group, // mock a successful response and confirm that Cloud @@ -389,7 +389,7 @@ describe('Placement Group deletion', () => { // Confirm deletion warning appears, complete Type-to-Confirm, and submit confirmation. ui.dialog - .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`) + .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}?`) .should('be.visible') .within(() => { // ensure error message not exist when reopening the dialog @@ -472,7 +472,7 @@ describe('Placement Group deletion', () => { ).as('UnassignPlacementGroupError'); ui.dialog - .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`) + .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}?`) .should('be.visible') .within(() => { cy.get('[data-qa-selection-list]').within(() => { @@ -501,9 +501,9 @@ describe('Placement Group deletion', () => { .click(); }); - cy.findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`).should( - 'not.exist' - ); + cy.findByTitle( + `Delete Placement Group ${mockPlacementGroup.label}?` + ).should('not.exist'); // Click "Delete" button next to the mock Placement Group to reopen the dialog. cy.findByText(mockPlacementGroup.label) @@ -519,7 +519,7 @@ describe('Placement Group deletion', () => { // Confirm that the error message from the previous attempt is no longer present. ui.dialog - .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}`) + .findByTitle(`Delete Placement Group ${mockPlacementGroup.label}?`) .should('be.visible') .within(() => { cy.findByText(PlacementGroupErrorMessage).should('not.exist'); diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx index ff8f60faa1a..7cfdd722f38 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx @@ -74,7 +74,7 @@ describe('PlacementGroupsDeleteModal', () => { expect( getByRole('heading', { - name: 'Delete Placement Group PG-to-delete', + name: 'Delete Placement Group PG-to-delete?', }) ).toBeInTheDocument(); expect( From 41a491ef8aeabdaac8b6961fbef78df4dab1414c Mon Sep 17 00:00:00 2001 From: Hana Xu Date: Fri, 15 Aug 2025 13:16:37 -0400 Subject: [PATCH 5/5] remove space --- packages/manager/src/features/Domains/DeleteDomainDialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/manager/src/features/Domains/DeleteDomainDialog.tsx b/packages/manager/src/features/Domains/DeleteDomainDialog.tsx index 4555c6a7823..3120797bdcb 100644 --- a/packages/manager/src/features/Domains/DeleteDomainDialog.tsx +++ b/packages/manager/src/features/Domains/DeleteDomainDialog.tsx @@ -60,7 +60,7 @@ export const DeleteDomainDialog = (props: DeleteDomainProps) => { Warning: Deleting this domain is permanent and can’t - be undone.{' '} + be undone.