Merge pull request #10927 from kialam/feature-10853-control-node-read-only

Disable checkbox for instances with node type control.
This commit is contained in:
kialam 2021-09-01 09:30:37 -04:00 committed by GitHub
commit ef36d7c87f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 63 additions and 9 deletions

View File

@ -89,9 +89,14 @@ function InstanceList() {
useCallback(
() =>
Promise.all(
selected.map((instance) =>
InstanceGroupsAPI.disassociateInstance(instanceGroupId, instance.id)
)
selected
.filter((s) => s.node_type !== 'control')
.map((instance) =>
InstanceGroupsAPI.disassociateInstance(
instanceGroupId,
instance.id
)
)
),
[instanceGroupId, selected]
),
@ -106,9 +111,11 @@ function InstanceList() {
useCallback(
async (instancesToAssociate) => {
await Promise.all(
instancesToAssociate.map((instance) =>
InstanceGroupsAPI.associateInstance(instanceGroupId, instance.id)
)
instancesToAssociate
.filter((i) => i.node_type !== 'control')
.map((instance) =>
InstanceGroupsAPI.associateInstance(instanceGroupId, instance.id)
)
);
fetchInstances();
},
@ -186,7 +193,9 @@ function InstanceList() {
verifyCannotDisassociate={false}
key="disassociate"
onDisassociate={handleDisassociate}
itemsToDisassociate={selected}
itemsToDisassociate={selected.filter(
(s) => s.node_type !== 'control'
)}
modalTitle={t`Disassociate instance from instance group?`}
/>,
]}

View File

@ -106,9 +106,9 @@ function InstanceListItem({
<Td
select={{
rowIndex,
isSelected,
isSelected: isSelected && instance.node_type !== 'control',
onSelect,
disable: false,
disable: instance.node_type === 'control',
}}
dataLabel={t`Selected`}
/>

View File

@ -38,6 +38,33 @@ const instance = [
managed_by_policy: true,
node_type: 'hybrid',
},
{
id: 2,
type: 'instance',
url: '/api/v2/instances/1/',
related: {
jobs: '/api/v2/instances/1/jobs/',
instance_groups: '/api/v2/instances/1/instance_groups/',
},
uuid: '00000000-0000-0000-0000-000000000001',
hostname: 'awx-control',
created: '2020-07-14T19:03:49.000054Z',
modified: '2020-08-12T20:08:02.836748Z',
capacity_adjustment: '0.40',
version: '13.0.0',
capacity: 10,
consumed_capacity: 0,
percent_capacity_remaining: 60.0,
jobs_running: 0,
jobs_total: 68,
cpu: 6,
memory: 2087469056,
cpu_capacity: 24,
mem_capacity: 1,
enabled: true,
managed_by_policy: true,
node_type: 'control',
},
];
describe('<InstanceListItem/>', () => {
@ -167,6 +194,24 @@ describe('<InstanceListItem/>', () => {
);
});
test('should disable checkbox', async () => {
const onSelect = jest.fn();
await act(async () => {
wrapper = mountWithContexts(
<table>
<tbody>
<InstanceListItem
instance={instance[1]}
onSelect={onSelect}
fetchInstances={() => {}}
/>
</tbody>
</table>
);
});
expect(wrapper.find('Td').first().prop('select').disable).toEqual(true);
});
test('should display instance toggle', () => {
expect(wrapper.find('InstanceToggle').length).toBe(1);
});