@spinnaker/google 2026.3.1 → 2026.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/autoscalingPolicy/GceAutoScalingFieldLayout.d.ts +2 -2
- package/dist/domain/loadBalancer.d.ts +6 -3
- package/dist/image/ImageSelect.d.ts +1 -1
- package/dist/index.js +159 -1
- package/dist/index.js.map +1 -1
- package/dist/loadBalancer/configure/common/gceLoadBalancerModels.d.ts +13 -2
- package/dist/loadBalancer/configure/http/GceHttpLoadBalancerEditor.d.ts +3 -0
- package/dist/loadBalancer/configure/http/GceHttpLoadBalancerModal.d.ts +1 -1
- package/dist/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerEditor.d.ts +30 -0
- package/dist/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerModal.d.ts +53 -0
- package/dist/loadBalancer/httpLoadBalancerUtils.service.d.ts +3 -1
- package/dist/serverGroup/configure/wizard/GceCloneServerGroupModal.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/GceServerGroupWizard.types.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/customInstance/CustomInstanceConfigurer.d.ts +1 -1
- package/dist/serverGroup/configure/wizard/customInstance/GceCustomInstanceBuilder.d.ts +2 -2
- package/dist/serverGroup/configure/wizard/pages/AdvancedSettings.d.ts +3 -0
- package/dist/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/pages/Policies.d.ts +21 -3
- package/dist/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/pages/ServerGroupCapacity.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/pages/ServerGroupImageSettings.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/pages/ServerGroupInstanceType.d.ts +1 -0
- package/dist/serverGroup/configure/wizard/zones/GceInstanceFlexibilityConfigurer.d.ts +2 -2
- package/dist/serverGroup/details/GceInstanceFlexibilityPolicyDetails.d.ts +2 -2
- package/dist/serverGroup/details/stateful/MarkDiskStatefulButton.d.ts +2 -2
- package/dist/serverGroup/details/stateful/UpdateBootImageButton.d.ts +2 -2
- package/package.json +5 -5
- package/src/autoHealingPolicy/GceAutoHealingPolicyEditor.spec.tsx +68 -52
- package/src/autoscalingPolicy/GceAutoscalingPolicyEditor.spec.tsx +43 -50
- package/src/autoscalingPolicy/GceAutoscalingPolicyEditor.tsx +1 -1
- package/src/autoscalingPolicy/GceAutoscalingPolicyWriter.spec.ts +1 -1
- package/src/domain/loadBalancer.ts +6 -3
- package/src/gce.module.spec.ts +132 -153
- package/src/instance/details/GceInstanceDetails.spec.tsx +86 -83
- package/src/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.spec.tsx +162 -121
- package/src/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.tsx +13 -1
- package/src/loadBalancer/configure/common/GceProxyLoadBalancerEditor.spec.tsx +47 -30
- package/src/loadBalancer/configure/common/GceProxyLoadBalancerEditor.tsx +2 -1
- package/src/loadBalancer/configure/common/GceProxyLoadBalancerModal.spec.tsx +85 -57
- package/src/loadBalancer/configure/common/gceLoadBalancerData.spec.ts +17 -16
- package/src/loadBalancer/configure/common/gceLoadBalancerModels.spec.ts +230 -5
- package/src/loadBalancer/configure/common/gceLoadBalancerModels.ts +186 -22
- package/src/loadBalancer/configure/common/gceLoadBalancerSubmission.spec.ts +298 -2
- package/src/loadBalancer/configure/common/gceLoadBalancerSubmission.ts +35 -5
- package/src/loadBalancer/configure/common/useGceLoadBalancerData.spec.tsx +37 -46
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerEditor.spec.tsx +399 -58
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerEditor.tsx +148 -41
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerListenerEditor.spec.tsx +169 -36
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerListenerEditor.tsx +80 -12
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerModal.spec.tsx +224 -124
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerModal.tsx +8 -2
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerResourceEditors.spec.tsx +57 -22
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerResourceEditors.tsx +21 -0
- package/src/loadBalancer/configure/http/GceHttpLoadBalancerRoutingEditor.spec.tsx +24 -20
- package/src/loadBalancer/configure/network/GceNetworkLoadBalancerEditor.spec.tsx +41 -32
- package/src/loadBalancer/configure/network/GceNetworkLoadBalancerModal.spec.tsx +35 -30
- package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerEditor.spec.tsx +443 -0
- package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerEditor.tsx +401 -0
- package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerModal.spec.tsx +330 -0
- package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerModal.tsx +348 -0
- package/src/loadBalancer/details/gceLoadBalancerDetails.spec.tsx +439 -35
- package/src/loadBalancer/details/gceLoadBalancerDetails.tsx +104 -21
- package/src/loadBalancer/httpLoadBalancerUtils.service.spec.ts +126 -0
- package/src/loadBalancer/httpLoadBalancerUtils.service.ts +27 -11
- package/src/loadBalancer/loadBalancer.setTransformer.spec.ts +165 -0
- package/src/loadBalancer/loadBalancer.setTransformer.ts +15 -2
- package/src/pipeline/stages/googleStageConfig.spec.js +22 -16
- package/src/securityGroup/configure/GceSecurityGroupModal.spec.tsx +177 -193
- package/src/securityGroup/configure/GceSecurityGroupModal.tsx +14 -2
- package/src/securityGroup/details/GceSecurityGroupDetails.spec.tsx +69 -78
- package/src/serverGroup/configure/serverGroupCommandBuilder.service.spec.js +35 -15
- package/src/serverGroup/configure/serverGroupConfiguration.service.js +7 -1
- package/src/serverGroup/configure/serverGroupConfiguration.service.spec.js +74 -4
- package/src/serverGroup/configure/wizard/GceCloneServerGroupModal.spec.tsx +593 -855
- package/src/serverGroup/configure/wizard/GceCloneServerGroupModal.tsx +120 -38
- package/src/serverGroup/configure/wizard/GceServerGroupWizard.types.ts +1 -0
- package/src/serverGroup/configure/wizard/GceServerGroupWizardPage.spec.tsx +53 -50
- package/src/serverGroup/configure/wizard/customInstance/GceCustomInstanceBuilder.spec.tsx +65 -49
- package/src/serverGroup/configure/wizard/hiddenMetadataKeys.value.js +1 -0
- package/src/serverGroup/configure/wizard/pages/AdvancedSettings.spec.tsx +101 -108
- package/src/serverGroup/configure/wizard/pages/AdvancedSettings.tsx +32 -28
- package/src/serverGroup/configure/wizard/pages/GceServerGroupFirewalls.spec.tsx +60 -59
- package/src/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.spec.tsx +240 -114
- package/src/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.tsx +152 -63
- package/src/serverGroup/configure/wizard/pages/Policies.spec.tsx +93 -48
- package/src/serverGroup/configure/wizard/pages/Policies.tsx +80 -55
- package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.spec.tsx +123 -94
- package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.tsx +24 -18
- package/src/serverGroup/configure/wizard/pages/ServerGroupCapacity.spec.tsx +152 -133
- package/src/serverGroup/configure/wizard/pages/ServerGroupCapacity.tsx +40 -37
- package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.spec.tsx +66 -60
- package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.tsx +8 -2
- package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.spec.tsx +131 -101
- package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.tsx +29 -28
- package/src/serverGroup/configure/wizard/zones/GceInstanceFlexibilityConfigurer.spec.tsx +104 -81
- package/src/serverGroup/details/GceInstanceFlexibilityPolicyDetails.spec.tsx +10 -11
- package/src/serverGroup/details/autoHealingPolicy/GceAutoHealingPolicyDetails.spec.tsx +51 -59
- package/src/serverGroup/details/autoHealingPolicy/modal/GceUpsertAutoHealingPolicyModal.spec.tsx +3 -3
- package/src/serverGroup/details/autoscalingPolicy/GceAutoscalingPolicyDetails.spec.tsx +49 -58
- package/src/serverGroup/details/autoscalingPolicy/modal/GceUpsertAutoscalingPolicyModal.spec.tsx +3 -3
- package/src/serverGroup/details/gceServerGroupDetails.spec.tsx +162 -141
- package/src/serverGroup/details/resize/GceResizeServerGroupModal.spec.tsx +102 -86
- package/src/serverGroup/details/resize/GceResizeServerGroupModal.tsx +4 -0
- package/src/serverGroup/details/rollback/GceRollbackServerGroupModal.spec.tsx +40 -31
- package/src/serverGroup/serverGroup.transformer.js +1 -0
- package/src/serverGroup/serverGroup.transformer.spec.js +48 -0
- package/src/validation/ApplicationNameValidator.spec.ts +1 -1
- /package/dist/{gce.logo2ae85d8704b1d6b8.png → gce.logoChI3w_A5.png} +0 -0
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { act, fireEvent, render, screen, waitFor, within } from '@testing-library/react';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
|
|
4
|
-
import type { Action } from '@spinnaker/core';
|
|
5
4
|
import {
|
|
6
5
|
AccountService,
|
|
7
6
|
ConfirmationModalService,
|
|
8
7
|
Details,
|
|
9
|
-
InstanceActions,
|
|
10
8
|
InstanceReader,
|
|
11
9
|
InstanceWriter,
|
|
12
10
|
RecentHistoryService,
|
|
13
11
|
} from '@spinnaker/core';
|
|
14
12
|
|
|
15
|
-
import { GceInstanceDetailsComponent as GceInstanceDetails } from './GceInstanceDetails';
|
|
13
|
+
import { GceInstanceActionsComponent, GceInstanceDetailsComponent as GceInstanceDetails } from './GceInstanceDetails';
|
|
16
14
|
|
|
17
15
|
describe('GceInstanceDetails', () => {
|
|
18
16
|
function application(loadBalancers: any[] = []) {
|
|
@@ -57,35 +55,32 @@ describe('GceInstanceDetails', () => {
|
|
|
57
55
|
};
|
|
58
56
|
}
|
|
59
57
|
|
|
60
|
-
function
|
|
58
|
+
function renderActionsFor(
|
|
61
59
|
loadedInstance: any,
|
|
62
60
|
app = application([networkLoadBalancer()]),
|
|
63
|
-
stateService = { go:
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
<
|
|
61
|
+
stateService = { go: vi.fn(), includes: () => false },
|
|
62
|
+
) {
|
|
63
|
+
return render(
|
|
64
|
+
<GceInstanceActionsComponent
|
|
67
65
|
app={app}
|
|
68
|
-
|
|
66
|
+
instance={loadedInstance}
|
|
69
67
|
router={{} as any}
|
|
70
68
|
stateParams={{}}
|
|
71
69
|
stateService={stateService as any}
|
|
72
70
|
/>,
|
|
73
71
|
);
|
|
74
|
-
const renderedActions = shallow(wrapper.find(Details.Header).prop('actions') as React.ReactElement);
|
|
75
|
-
const actionMenu = renderedActions.is(InstanceActions) ? renderedActions : renderedActions.find(InstanceActions);
|
|
76
|
-
const actions = actionMenu.exists() ? actionMenu.prop('actions') : [];
|
|
77
|
-
renderedActions.unmount();
|
|
78
|
-
wrapper.unmount();
|
|
79
|
-
return actions;
|
|
80
72
|
}
|
|
81
73
|
|
|
82
74
|
function labelsFor(loadedInstance: any, app?: any): string[] {
|
|
83
|
-
|
|
75
|
+
const rendered = renderActionsFor(loadedInstance, app);
|
|
76
|
+
const labels = Array.from(rendered.container.querySelectorAll('li a')).map((action) => action.textContent || '');
|
|
77
|
+
rendered.unmount();
|
|
78
|
+
return labels;
|
|
84
79
|
}
|
|
85
80
|
|
|
86
81
|
it('finds instances through disabled server groups attached to load balancers', () => {
|
|
87
|
-
spyOn(RecentHistoryService, 'addExtraDataToLatest');
|
|
88
|
-
spyOn(InstanceReader, 'getInstanceDetails').
|
|
82
|
+
vi.spyOn(RecentHistoryService, 'addExtraDataToLatest').mockReturnValue(undefined);
|
|
83
|
+
vi.spyOn(InstanceReader, 'getInstanceDetails').mockReturnValue(
|
|
89
84
|
Promise.resolve(
|
|
90
85
|
instance({
|
|
91
86
|
networkInterfaces: [{ networkIP: '10.0.0.1' }],
|
|
@@ -108,7 +103,7 @@ describe('GceInstanceDetails', () => {
|
|
|
108
103
|
}),
|
|
109
104
|
]);
|
|
110
105
|
|
|
111
|
-
const
|
|
106
|
+
const rendered = render(
|
|
112
107
|
<GceInstanceDetails
|
|
113
108
|
app={app}
|
|
114
109
|
instance={{ account: 'route-account', instanceId: 'instance-1', region: 'route-region' }}
|
|
@@ -119,21 +114,21 @@ describe('GceInstanceDetails', () => {
|
|
|
119
114
|
);
|
|
120
115
|
|
|
121
116
|
expect(InstanceReader.getInstanceDetails).toHaveBeenCalledWith('test-account', 'us-central1', 'instance-1');
|
|
122
|
-
|
|
117
|
+
rendered.unmount();
|
|
123
118
|
});
|
|
124
119
|
|
|
125
120
|
it('clears actions on instance identity changes and ignores stale responses', async () => {
|
|
126
|
-
spyOn(AccountService, 'challengeDestructiveActions').
|
|
121
|
+
vi.spyOn(AccountService, 'challengeDestructiveActions').mockReturnValue(Promise.resolve(false));
|
|
127
122
|
const oldRequest = deferred<any>();
|
|
128
123
|
const newRequest = deferred<any>();
|
|
129
|
-
spyOn(RecentHistoryService, 'addExtraDataToLatest');
|
|
130
|
-
spyOn(Details, 'Header').
|
|
124
|
+
vi.spyOn(RecentHistoryService, 'addExtraDataToLatest').mockReturnValue(undefined);
|
|
125
|
+
vi.spyOn(Details, 'Header').mockImplementation(({ actions, name }: any) => (
|
|
131
126
|
<div className="test-instance-header">
|
|
132
127
|
{name}
|
|
133
128
|
{actions}
|
|
134
129
|
</div>
|
|
135
130
|
));
|
|
136
|
-
spyOn(InstanceReader, 'getInstanceDetails').
|
|
131
|
+
vi.spyOn(InstanceReader, 'getInstanceDetails').mockImplementation(
|
|
137
132
|
(_account: string, _region: string, instanceId: string) => {
|
|
138
133
|
if (instanceId === 'instance-1') {
|
|
139
134
|
return Promise.resolve(instance());
|
|
@@ -152,39 +147,39 @@ describe('GceInstanceDetails', () => {
|
|
|
152
147
|
stateService={{} as any}
|
|
153
148
|
/>
|
|
154
149
|
);
|
|
155
|
-
const
|
|
150
|
+
const rendered = render(
|
|
156
151
|
<RoutedDetails routedInstance={{ account: 'test-account', instanceId: 'instance-1', region: 'us-central1' }} />,
|
|
157
152
|
);
|
|
158
|
-
await
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
expect(
|
|
153
|
+
await waitFor(() =>
|
|
154
|
+
expect(rendered.container.querySelector('.test-instance-header')).toHaveTextContent('instance-1'),
|
|
155
|
+
);
|
|
156
|
+
expect(within(rendered.container).getByText('Instance Actions')).toBeInTheDocument();
|
|
162
157
|
|
|
163
|
-
|
|
164
|
-
routedInstance
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
expect(
|
|
168
|
-
expect(wrapper.find(InstanceActions).exists()).toBe(false);
|
|
158
|
+
rendered.rerender(
|
|
159
|
+
<RoutedDetails routedInstance={{ account: 'test-account', instanceId: 'instance-2', region: 'us-central1' }} />,
|
|
160
|
+
);
|
|
161
|
+
expect(rendered.container.querySelector('.test-instance-header')).not.toBeInTheDocument();
|
|
162
|
+
expect(within(rendered.container).queryByText('Instance Actions')).not.toBeInTheDocument();
|
|
169
163
|
|
|
170
|
-
|
|
171
|
-
routedInstance
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
expect(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
expect(
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
164
|
+
rendered.rerender(
|
|
165
|
+
<RoutedDetails routedInstance={{ account: 'test-account', instanceId: 'instance-3', region: 'us-central1' }} />,
|
|
166
|
+
);
|
|
167
|
+
expect(rendered.container.querySelector('.test-instance-header')).not.toBeInTheDocument();
|
|
168
|
+
expect(within(rendered.container).queryByText('Instance Actions')).not.toBeInTheDocument();
|
|
169
|
+
|
|
170
|
+
await act(async () =>
|
|
171
|
+
oldRequest.resolve(instance({ id: 'instance-2', instanceId: 'instance-2', name: 'instance-2' })),
|
|
172
|
+
);
|
|
173
|
+
expect(rendered.container.querySelector('.test-instance-header')).not.toBeInTheDocument();
|
|
174
|
+
expect(within(rendered.container).queryByText('Instance Actions')).not.toBeInTheDocument();
|
|
175
|
+
|
|
176
|
+
await act(async () =>
|
|
177
|
+
newRequest.resolve(instance({ id: 'instance-3', instanceId: 'instance-3', name: 'instance-3' })),
|
|
178
|
+
);
|
|
179
|
+
await waitFor(() =>
|
|
180
|
+
expect(rendered.container.querySelector('.test-instance-header')).toHaveTextContent('instance-3'),
|
|
181
|
+
);
|
|
182
|
+
rendered.unmount();
|
|
188
183
|
});
|
|
189
184
|
|
|
190
185
|
it('shows discovery actions only for their historical health states', () => {
|
|
@@ -233,13 +228,13 @@ describe('GceInstanceDetails', () => {
|
|
|
233
228
|
});
|
|
234
229
|
|
|
235
230
|
it('passes only eligible network load balancer names to registration writers', () => {
|
|
236
|
-
const confirmation = spyOn(ConfirmationModalService, 'confirm');
|
|
237
|
-
const register =
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
const deregister =
|
|
241
|
-
|
|
242
|
-
|
|
231
|
+
const confirmation = vi.spyOn(ConfirmationModalService, 'confirm').mockReturnValue(undefined);
|
|
232
|
+
const register = vi
|
|
233
|
+
.spyOn(InstanceWriter, 'registerInstanceWithLoadBalancer')
|
|
234
|
+
.mockReturnValue(Promise.resolve({} as any));
|
|
235
|
+
const deregister = vi
|
|
236
|
+
.spyOn(InstanceWriter, 'deregisterInstanceFromLoadBalancer')
|
|
237
|
+
.mockReturnValue(Promise.resolve({} as any));
|
|
243
238
|
const app = application([
|
|
244
239
|
networkLoadBalancer(),
|
|
245
240
|
networkLoadBalancer({ loadBalancerType: 'HTTP', name: 'http-lb' }),
|
|
@@ -250,11 +245,17 @@ describe('GceInstanceDetails', () => {
|
|
|
250
245
|
loadBalancers: ['network-lb', 'http-lb', 'other-network-lb'],
|
|
251
246
|
});
|
|
252
247
|
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
|
|
248
|
+
const rendered = renderActionsFor(loadedInstance, app);
|
|
249
|
+
fireEvent.click(within(rendered.container).getByText('Register with Load Balancer'));
|
|
250
|
+
fireEvent.click(within(rendered.container).getByText('Deregister from Load Balancer'));
|
|
256
251
|
const reason = { reason: 'operator requested' };
|
|
257
|
-
confirmation.calls
|
|
252
|
+
confirmation.mock.calls
|
|
253
|
+
.map((args, __i) => ({
|
|
254
|
+
args,
|
|
255
|
+
returnValue: confirmation.mock.results[__i].value,
|
|
256
|
+
invocationOrder: confirmation.mock.invocationCallOrder[__i],
|
|
257
|
+
}))
|
|
258
|
+
.forEach(({ args }) => args[0].submitMethod(reason));
|
|
258
259
|
|
|
259
260
|
const eligibleInstance = { ...loadedInstance, loadBalancers: ['network-lb'] };
|
|
260
261
|
expect(register).toHaveBeenCalledWith(eligibleInstance, app, reason);
|
|
@@ -271,15 +272,15 @@ describe('GceInstanceDetails', () => {
|
|
|
271
272
|
});
|
|
272
273
|
|
|
273
274
|
it('uses confirmation, account verification, task monitors, and exact GCE writer contracts', () => {
|
|
274
|
-
const confirmation = spyOn(ConfirmationModalService, 'confirm');
|
|
275
|
-
spyOn(InstanceWriter, 'terminateInstance').
|
|
276
|
-
spyOn(InstanceWriter, 'terminateInstanceAndShrinkServerGroup').
|
|
277
|
-
spyOn(InstanceWriter, 'rebootInstance').
|
|
278
|
-
spyOn(InstanceWriter, 'registerInstanceWithLoadBalancer').
|
|
279
|
-
spyOn(InstanceWriter, 'deregisterInstanceFromLoadBalancer').
|
|
280
|
-
spyOn(InstanceWriter, 'enableInstanceInDiscovery').
|
|
281
|
-
spyOn(InstanceWriter, 'disableInstanceInDiscovery').
|
|
282
|
-
const $state = { go:
|
|
275
|
+
const confirmation = vi.spyOn(ConfirmationModalService, 'confirm').mockReturnValue(undefined);
|
|
276
|
+
vi.spyOn(InstanceWriter, 'terminateInstance').mockReturnValue(Promise.resolve({} as any));
|
|
277
|
+
vi.spyOn(InstanceWriter, 'terminateInstanceAndShrinkServerGroup').mockReturnValue(Promise.resolve({} as any));
|
|
278
|
+
vi.spyOn(InstanceWriter, 'rebootInstance').mockReturnValue(Promise.resolve({} as any));
|
|
279
|
+
vi.spyOn(InstanceWriter, 'registerInstanceWithLoadBalancer').mockReturnValue(Promise.resolve({} as any));
|
|
280
|
+
vi.spyOn(InstanceWriter, 'deregisterInstanceFromLoadBalancer').mockReturnValue(Promise.resolve({} as any));
|
|
281
|
+
vi.spyOn(InstanceWriter, 'enableInstanceInDiscovery').mockReturnValue(Promise.resolve({} as any));
|
|
282
|
+
vi.spyOn(InstanceWriter, 'disableInstanceInDiscovery').mockReturnValue(Promise.resolve({} as any));
|
|
283
|
+
const $state = { go: vi.fn(), includes: vi.fn().mockReturnValue(true) };
|
|
283
284
|
const app = application([networkLoadBalancer()]);
|
|
284
285
|
const loadedInstance = instance({
|
|
285
286
|
health: [
|
|
@@ -289,15 +290,19 @@ describe('GceInstanceDetails', () => {
|
|
|
289
290
|
],
|
|
290
291
|
});
|
|
291
292
|
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
}
|
|
297
|
-
actions.forEach(({ triggerAction }) => triggerAction());
|
|
293
|
+
const rendered = renderActionsFor(loadedInstance, app, $state);
|
|
294
|
+
const actions = Array.from(rendered.container.querySelectorAll('li a'));
|
|
295
|
+
expect(actions).toHaveLength(7);
|
|
296
|
+
actions.forEach((action) => fireEvent.click(action));
|
|
298
297
|
|
|
299
298
|
expect(confirmation).toHaveBeenCalledTimes(7);
|
|
300
|
-
const confirmations = confirmation.calls
|
|
299
|
+
const confirmations = confirmation.mock.calls
|
|
300
|
+
.map((args, __i) => ({
|
|
301
|
+
args,
|
|
302
|
+
returnValue: confirmation.mock.results[__i].value,
|
|
303
|
+
invocationOrder: confirmation.mock.invocationCallOrder[__i],
|
|
304
|
+
}))
|
|
305
|
+
.map(({ args }) => args[0]);
|
|
301
306
|
confirmations.forEach((params) => {
|
|
302
307
|
expect(params.account).toBe('test-account');
|
|
303
308
|
expect(params.askForReason).toBe(true);
|
|
@@ -341,8 +346,6 @@ describe('GceInstanceDetails', () => {
|
|
|
341
346
|
});
|
|
342
347
|
});
|
|
343
348
|
|
|
344
|
-
const settle = () => new Promise((resolve) => setTimeout(resolve));
|
|
345
|
-
|
|
346
349
|
function deferred<T>() {
|
|
347
350
|
let resolve!: (value: T | PromiseLike<T>) => void;
|
|
348
351
|
let reject!: (reason?: any) => void;
|