Files
nomad/ui/tests/unit/models/task-test.js
Phil Renaud 932c3ebfb0 [ui] Adds meta k/v tables to Task Group and Task pages (#24594)
* Experimenting with a generic meta job-part component

* Taskstate.task gets me every time

* continue-on-error false test

* continue-on-error back in, but explicit success check after exam

* Testfixes for new meta structure on tasks and groups

* Clean up test and dev code
2024-12-17 10:46:03 -05:00

154 lines
3.9 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import { run } from '@ember/runloop';
module('Unit | Model | task', function (hooks) {
setupTest(hooks);
test("should expose mergedMeta as merged with the job's and task groups's meta", function (assert) {
assert.expect(8);
const job = run(() =>
this.owner.lookup('service:store').createRecord('job', {
name: 'example',
taskGroups: [
{
name: 'one',
meta: { raw: { a: 'b' } },
tasks: [
{
name: 'task-one',
meta: { raw: { c: 'd' } },
},
{
name: 'task-two',
},
{
name: 'task-three',
meta: { raw: null },
},
{
name: 'task-four',
meta: { raw: {} },
},
],
},
{
name: 'two',
tasks: [
{
name: 'task-one',
meta: { raw: { c: 'd' } },
},
{
name: 'task-two',
},
{
name: 'task-three',
meta: { raw: null },
},
{
name: 'task-four',
meta: { raw: {} },
},
],
},
],
})
);
let tg = job.get('taskGroups').objectAt(0);
let expected = [{ a: 'b', c: 'd' }, { a: 'b' }, { a: 'b' }, { a: 'b' }];
expected.forEach((exp, i) => {
assert.deepEqual(
tg.get('tasks').objectAt(i).get('mergedMeta'),
exp,
'mergedMeta is merged with task meta'
);
});
tg = job.get('taskGroups').objectAt(1);
expected = [{ c: 'd' }, {}, {}, {}];
expected.forEach((exp, i) => {
assert.deepEqual(
tg.get('tasks').objectAt(i).get('mergedMeta'),
exp,
'mergedMeta is merged with job meta'
);
});
});
// Test that message comes back with proper time formatting
test('displayMessage shows simplified time', function (assert) {
assert.expect(5);
const longTaskEvent = run(() =>
this.owner.lookup('service:store').createRecord('task-event', {
displayMessage: 'Task restarting in 1h2m3.456s',
})
);
assert.equal(
longTaskEvent.get('message'),
'Task restarting in 1h2m3s',
'hour-specific displayMessage is simplified'
);
const mediumTaskEvent = run(() =>
this.owner.lookup('service:store').createRecord('task-event', {
displayMessage: 'Task restarting in 1m2.345s',
})
);
assert.equal(
mediumTaskEvent.get('message'),
'Task restarting in 1m2s',
'minute-specific displayMessage is simplified'
);
const shortTaskEvent = run(() =>
this.owner.lookup('service:store').createRecord('task-event', {
displayMessage: 'Task restarting in 1.234s',
})
);
assert.equal(
shortTaskEvent.get('message'),
'Task restarting in 1s',
'second-specific displayMessage is simplified'
);
const roundedTaskEvent = run(() =>
this.owner.lookup('service:store').createRecord('task-event', {
displayMessage: 'I bet I can knock this out in about 1.999s',
})
);
assert.equal(
roundedTaskEvent.get('message'),
'I bet I can knock this out in about 2s',
'displayMessage is rounded'
);
const timelessTaskEvent = run(() =>
this.owner.lookup('service:store').createRecord('task-event', {
displayMessage: 'All 3000 tasks look great, no notes.',
})
);
assert.equal(
timelessTaskEvent.get('message'),
'All 3000 tasks look great, no notes.',
'displayMessage is unchanged'
);
});
});