mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-08-18 22:36:19 +00:00
feat: add confirmed Take down stack action with optional volume removal (#1599)
* feat: add confirmed Take down stack action with optional volume removal Expose Take down in the stack header and sidebar with a confirmation dialog that runs compose down while keeping the stack definition on disk. Optional volume removal is gated by node capability and stack:deploy permission, with remote gateway preflight before proxying removeVolumes requests. Closes #1582 * fix: reset take-down volume checkbox when dialog closes * test: align getStackMenuVisibility assertions with showTakeDown key getStackMenuVisibility now returns a fifth lifecycle flag, showTakeDown, but three exhaustive toEqual assertions still listed only the prior four keys and failed. Add the expected showTakeDown value to each: true for the partial and exited running-stack cases, false for the self stack. * test: cover Take down visibility for running non-self stacks The getStackMenuVisibility assertions exercised the partial and exited branches and the self-stack guard, but not the raw === 'running' literal that drives showTakeDown for a normal running stack. Add a case so a regression dropping 'running' from that check is caught. * fix: drop Take down from header overflow and wire activity shortcut Remove duplicate Take down from More actions. Keep inline button when running, sidebar menu, and Cmd+ArrowDown. Record stack_taken_down in activity on successful POST /down.
This commit is contained in:
@@ -868,14 +868,21 @@ describe('useStackActions.getStackMenuVisibility', () => {
|
||||
it('gives a partial stack the running-stack lifecycle actions', () => {
|
||||
const { result } = setup({ stackList: { stackStatuses: { 'web.yml': 'partial' } as never } });
|
||||
expect(result.current.getStackMenuVisibility('web.yml')).toEqual({
|
||||
showDeploy: false, showStop: true, showRestart: true, showUpdate: true,
|
||||
showDeploy: false, showStop: true, showRestart: true, showUpdate: true, showTakeDown: true,
|
||||
});
|
||||
});
|
||||
|
||||
it('offers Take down for a running non-self stack', () => {
|
||||
const { result } = setup({ stackList: { stackStatuses: { 'web.yml': 'running' } as never } });
|
||||
expect(result.current.getStackMenuVisibility('web.yml')).toEqual({
|
||||
showDeploy: false, showStop: true, showRestart: true, showUpdate: true, showTakeDown: true,
|
||||
});
|
||||
});
|
||||
|
||||
it('shows deploy (not stop/restart/update) for an exited stack', () => {
|
||||
const { result } = setup({ stackList: { stackStatuses: { 'web.yml': 'exited' } as never } });
|
||||
expect(result.current.getStackMenuVisibility('web.yml')).toEqual({
|
||||
showDeploy: true, showStop: false, showRestart: false, showUpdate: false,
|
||||
showDeploy: true, showStop: false, showRestart: false, showUpdate: false, showTakeDown: true,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -887,7 +894,7 @@ describe('useStackActions.getStackMenuVisibility', () => {
|
||||
},
|
||||
});
|
||||
expect(result.current.getStackMenuVisibility('sencho.yml')).toEqual({
|
||||
showDeploy: false, showStop: false, showRestart: true, showUpdate: false,
|
||||
showDeploy: false, showStop: false, showRestart: true, showUpdate: false, showTakeDown: false,
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user