add LaunchButton test to cover disabled launch button behavior

This commit is contained in:
Keith J. Grant 2021-04-19 09:29:40 -07:00
parent 5e228c4d98
commit dff43e973e
2 changed files with 45 additions and 0 deletions

View File

@ -99,6 +99,7 @@ function LaunchButton({ resource, i18n, children, history }) {
history.push(`/jobs/${job.id}/output`);
} catch (launchError) {
setError(launchError);
} finally {
setIsLaunching(false);
}
};
@ -151,6 +152,7 @@ function LaunchButton({ resource, i18n, children, history }) {
}
} catch (err) {
setError(err);
} finally {
setIsLaunching(false);
}
};

View File

@ -114,6 +114,49 @@ describe('LaunchButton', () => {
expect(history.location.pathname).toEqual('/jobs/9000/output');
});
test('should disable button to prevent duplicate clicks', async () => {
WorkflowJobTemplatesAPI.readLaunch.mockResolvedValue({
data: {
can_start_without_user_input: true,
},
});
const history = createMemoryHistory({
initialEntries: ['/jobs/9000'],
});
WorkflowJobTemplatesAPI.launch.mockImplementation(async () => {
// return asynchronously so isLaunching isn't set back to false in the
// same tick
await sleep(10);
return {
data: {
id: 9000,
},
};
});
const wrapper = mountWithContexts(
<LaunchButton
resource={{
id: 1,
type: 'workflow_job_template',
}}
>
{({ handleLaunch, isLaunching }) => (
<button type="submit" onClick={handleLaunch} disabled={isLaunching} />
)}
</LaunchButton>,
{
context: {
router: { history },
},
}
);
const button = wrapper.find('button');
await act(() => button.prop('onClick')());
wrapper.update();
expect(wrapper.find('button').prop('disabled')).toEqual(true);
});
test('should relaunch job correctly', async () => {
JobsAPI.readRelaunch.mockResolvedValue({
data: {