open-nomad/ui/tests/unit/utils/generate-exec-url-test.js
Buck Doyle 7f0177548d
Add specificity to exec allocation URL generation (#8463)
Thanks to @notnoop for this UX improvement suggestion.
The allocation’s task group is always known, so it
might as well be preselected in the sidebar when the
exec window opens. Also, if the task group only has
one task, might as well preselect it too.
2020-07-20 16:07:39 -05:00

105 lines
3.1 KiB
JavaScript

import generateExecUrl from 'nomad-ui/utils/generate-exec-url';
import { module, test } from 'qunit';
import sinon from 'sinon';
const emptyOptions = { queryParams: {} };
module('Unit | Utility | generate-exec-url', function(hooks) {
hooks.beforeEach(function() {
this.urlForSpy = sinon.spy();
this.router = { urlFor: this.urlForSpy, currentRoute: { queryParams: {} } };
});
test('it generates an exec job URL', function(assert) {
generateExecUrl(this.router, { job: { plainId: 'job-name' } });
assert.ok(this.urlForSpy.calledWith('exec', 'job-name', emptyOptions));
});
test('it generates an exec job URL with an allocation and task group when there are multiple tasks', function(assert) {
generateExecUrl(this.router, {
job: { plainId: 'job-name' },
allocation: {
shortId: 'allocation-short-id',
taskGroup: { name: 'task-group-name', tasks: [0, 1, 2] },
},
});
assert.ok(
this.urlForSpy.calledWith('exec.task-group', 'job-name', 'task-group-name', {
queryParams: { allocation: 'allocation-short-id' },
})
);
});
test('it generates an exec job URL with an allocation, task group, and task when there is only one task', function(assert) {
generateExecUrl(this.router, {
job: { plainId: 'job-name' },
allocation: {
shortId: 'allocation-short-id',
taskGroup: { name: 'task-group-name', tasks: [{ name: 'task-name' }] },
},
});
assert.ok(
this.urlForSpy.calledWith(
'exec.task-group.task',
'job-name',
'task-group-name',
'task-name',
{
queryParams: { allocation: 'allocation-short-id' },
}
)
);
});
test('it generates an exec task group URL', function(assert) {
generateExecUrl(this.router, {
job: { plainId: 'job-name' },
taskGroup: { name: 'task-group-name' },
});
assert.ok(
this.urlForSpy.calledWith('exec.task-group', 'job-name', 'task-group-name', emptyOptions)
);
});
test('it generates an exec task URL', function(assert) {
generateExecUrl(this.router, {
allocation: { shortId: 'allocation-short-id' },
job: { plainId: 'job-name' },
taskGroup: { name: 'task-group-name' },
task: { name: 'task-name' },
});
assert.ok(
this.urlForSpy.calledWith(
'exec.task-group.task',
'job-name',
'task-group-name',
'task-name',
{ queryParams: { allocation: 'allocation-short-id' } }
)
);
});
test('it includes query parameters from the current route', function(assert) {
this.router.currentRoute.queryParams = {
namespace: 'a-namespace',
region: 'a-region',
};
generateExecUrl(this.router, {
job: { plainId: 'job-name' },
allocation: { shortId: 'id', taskGroup: { name: 'task-group-name', tasks: [0, 1] } },
});
assert.ok(
this.urlForSpy.calledWith('exec.task-group', 'job-name', 'task-group-name', {
queryParams: { allocation: 'id', namespace: 'a-namespace', region: 'a-region' },
})
);
});
});