diff --git a/src/features/instance/config/deployments/components/ActivateStagedRelease.test.tsx b/src/features/instance/config/deployments/components/ActivateStagedRelease.test.tsx index 40fc2a564..ba71e92ac 100644 --- a/src/features/instance/config/deployments/components/ActivateStagedRelease.test.tsx +++ b/src/features/instance/config/deployments/components/ActivateStagedRelease.test.tsx @@ -77,6 +77,9 @@ describe('ActivateStagedRelease', () => { fireEvent.click(screen.getByRole('button', { name: /Activate/ })); expect(state.mutateAsync).not.toHaveBeenCalled(); expect(screen.getByText('Activate this release of web?')).toBeTruthy(); + const description = screen.getByText(/Everything was installed when this release was staged/); + expect(description.textContent).toMatch(/goes live on all nodes, which restart one at a time\./); + expect(description.textContent).toMatch(/so each node just switches to it\.$/); fireEvent.click(screen.getByRole('button', { name: 'Activate' })); expect(state.mutateAsync).toHaveBeenCalledOnce(); @@ -86,6 +89,20 @@ describe('ActivateStagedRelease', () => { }); }); + it('adds, when activating it again, that a node already running it only restarts', () => { + render( + + + , + ); + fireEvent.click(screen.getByRole('button', { name: 'Activate again' })); + expect(screen.getByText('Activate this release of web again?')).toBeTruthy(); + const description = screen.getByText(/Everything was installed when this release was staged/); + expect(description.textContent).toMatch( + /so each node just switches to it\. A node already running it restarts without changing anything\.$/, + ); + }); + it('still reports an activation whose detail was closed before it settled', async () => { let settle: (value: object) => void = () => {}; state.mutateAsync.mockReturnValue(new Promise((resolve) => (settle = resolve))); diff --git a/src/features/instance/config/deployments/components/ActivateStagedRelease.tsx b/src/features/instance/config/deployments/components/ActivateStagedRelease.tsx index 09f2bbe26..8c971844a 100644 --- a/src/features/instance/config/deployments/components/ActivateStagedRelease.tsx +++ b/src/features/instance/config/deployments/components/ActivateStagedRelease.tsx @@ -170,15 +170,15 @@ export function ActivateStagedRelease({ ? ( <> Deployment {deploymentId}{' '} - goes live again on every node, which restart one at a time. Nothing is installed: each node swaps - back the copy it kept when this release was replaced. A node that no longer keeps it refuses. + goes live again on all nodes, which restart one at a time. Each node kept this release installed + when it was replaced, so it just switches back. A node that no longer keeps it refuses. ) : ( <> Deployment {deploymentId}{' '} - goes live on every node, which restart one at a time. Nothing is installed: each node swaps in the - release it staged.{shownIntent === 'again' + goes live on all nodes, which restart one at a time. Everything was installed when this release was + staged, so each node just switches to it.{shownIntent === 'again' && ' A node already running it restarts without changing anything.'} )} diff --git a/src/features/instance/config/deployments/components/StagedReleaseDetail.test.tsx b/src/features/instance/config/deployments/components/StagedReleaseDetail.test.tsx index 27c1a361d..e396456a7 100644 --- a/src/features/instance/config/deployments/components/StagedReleaseDetail.test.tsx +++ b/src/features/instance/config/deployments/components/StagedReleaseDetail.test.tsx @@ -114,7 +114,7 @@ const activationButton = () => screen.queryByRole('button', { name: /Activate|Ro describe('StagedReleaseDetail', () => { it("reads the component's records from the staged one on, wherever they are listed", async () => { renderDetail([staged]); - await screen.findByText(/Staged: built and installed, but not live/); + await screen.findByText('Staged: built and installed, but not live. Activating it just switches each node to it.'); expect(state.post).toHaveBeenCalledWith( '/', expect.objectContaining({ @@ -142,6 +142,9 @@ describe('StagedReleaseDetail', () => { expect(await screen.findByText(/then replaced by/)).toBeTruthy(); fireEvent.click(screen.getByRole('button', { name: /Roll back to this release/ })); expect(screen.getByText('Roll hello back to this release?')).toBeTruthy(); + const description = screen.getByText(/Each node kept this release installed when it was replaced/); + expect(description.textContent).toMatch(/goes live again on all nodes, which restart one at a time\./); + expect(description.textContent).toMatch(/so it just switches back\. A node that no longer keeps it refuses\.$/); fireEvent.click(screen.getByRole('button', { name: 'Roll back to this release' })); expect(state.mutateAsync.mock.calls[0][0]).toMatchObject({ request: { kind: 'activate', project: 'hello', deploymentId: STAGED_ID }, diff --git a/src/features/instance/config/deployments/components/StagedReleaseDetail.tsx b/src/features/instance/config/deployments/components/StagedReleaseDetail.tsx index bf9f0675b..b121356ca 100644 --- a/src/features/instance/config/deployments/components/StagedReleaseDetail.tsx +++ b/src/features/instance/config/deployments/components/StagedReleaseDetail.tsx @@ -41,7 +41,7 @@ export function StagedReleaseDetail({ deployment }: { deployment: Deployment })
{!release && 'Staged. Checking whether it has been activated…'} {release?.kind === 'waiting' - && 'Staged: built and installed, but not live. Activating it makes it live with nothing to install.'} + && 'Staged: built and installed, but not live. Activating it just switches each node to it.'} {release?.kind === 'unknown' && "Staged. Couldn't read the deployments since, so it may already be live: activating a live release restarts every node without changing anything."} {release?.kind === 'activating' && (