7f0177548d
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.
105 lines
3.1 KiB
JavaScript
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' },
|
|
})
|
|
);
|
|
});
|
|
});
|