import { shallow } from 'enzyme'; import React from 'react'; import type { Application } from '@spinnaker/core'; import { ApplicationModelBuilder } from '@spinnaker/core'; import { mockLaunchTemplate, mockServerGroup } from '@spinnaker/mocks'; import type { IAmazonMixedInstancesPolicy, IAmazonServerGroupView, IScalingPolicy } from '../../../domain'; import { InstancesDistributionDetailsSection } from '../../../index'; describe('InstancesDistribution', () => { let app: Application; beforeEach(() => { app = ApplicationModelBuilder.createApplicationForTests('testapp'); }); const serverGroupWithMip = { ...mockServerGroup, mixedInstancesPolicy: { instancesDistribution: { onDemandAllocationStrategy: 'prioritized', onDemandBaseCapacity: 1, onDemandPercentageAboveBaseCapacity: 50, spotAllocationStrategy: 'capacity-optimized', spotMaxPrice: '1.5', }, launchTemplates: [mockLaunchTemplate], } as IAmazonMixedInstancesPolicy, scalingPolicies: [] as IScalingPolicy[], } as IAmazonServerGroupView; it('should NOT render for server group without mixed instances policy ', () => { const serverGroupWithLt = { ...mockServerGroup, launchTemplate: mockLaunchTemplate, } as IAmazonServerGroupView; const wrapper = shallow(); expect(wrapper.isEmptyRender()).toEqual(true); }); it('should render for server group with mixed instances policy', () => { const wrapper = shallow(); expect(wrapper.isEmptyRender()).toEqual(false); const actualLabeledValues = wrapper.find('LabeledValue'); expect(actualLabeledValues.length).toEqual(5); const expectedLabels = new Map([ ['On-Demand Allocation Strategy', 'prioritized'], ['On-Demand Base Capacity', 1], ['On-Demand Percentage Above Base Capacity', 50], ['Spot Allocation Strategy', 'capacity-optimized'], ]); let index = 0; expectedLabels.forEach((value, key) => { const labeledValue = actualLabeledValues.at(index++); expect(labeledValue.prop('label')).toEqual(key); expect(labeledValue.prop('value')).toEqual(value); }); }); it('should render for spotInstancePools conditionally', () => { const newServerGroup = { ...serverGroupWithMip, }; newServerGroup.mixedInstancesPolicy.instancesDistribution.spotAllocationStrategy = 'lowest-price'; newServerGroup.mixedInstancesPolicy.instancesDistribution.spotInstancePools = 5; const wrapper = shallow(); expect(wrapper.isEmptyRender()).toEqual(false); const actualLabeledValues = wrapper.find('LabeledValue'); expect(actualLabeledValues.length).toEqual(6); const expectedLabels = new Map([ ['On-Demand Allocation Strategy', 'prioritized'], ['On-Demand Base Capacity', 1], ['On-Demand Percentage Above Base Capacity', 50], ['Spot Allocation Strategy', 'lowest-price'], ['Spot Instance Pools', 5], ]); let index = 0; expectedLabels.forEach((value, key) => { const labeledValue = actualLabeledValues.at(index++); expect(labeledValue.prop('label')).toEqual(key); expect(labeledValue.prop('value')).toEqual(value); }); }); });