open-nomad/ui/tests/integration/components/job-client-status-bar-test.js
Jai Bhagat 3350f3fb11 ui: apply new qunit linting rules to tests
Async tests should use  in integrations tests.
Acceptance tests are using Mirage and can't use
since we can't know the number of assertions.
2022-01-20 10:01:35 -05:00

84 lines
2.3 KiB
JavaScript

import { module, test } from 'qunit';
import { create } from 'ember-cli-page-object';
import { setupRenderingTest } from 'ember-qunit';
import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
import sinon from 'sinon';
import { componentA11yAudit } from 'nomad-ui/tests/helpers/a11y-audit';
import jobClientStatusBar from 'nomad-ui/tests/pages/components/job-client-status-bar';
const JobClientStatusBar = create(jobClientStatusBar());
module('Integration | Component | job-client-status-bar', function (hooks) {
setupRenderingTest(hooks);
const commonProperties = () => ({
onSliceClick: sinon.spy(),
job: {
namespace: {
get: () => 'my-namespace',
},
},
jobClientStatus: {
byStatus: {
queued: [],
starting: ['someNodeId'],
running: [],
complete: [],
degraded: [],
failed: [],
lost: [],
notScheduled: [],
},
},
isNarrow: true,
});
const commonTemplate = hbs`
<JobClientStatusBar
@onSliceClick={{onSliceClick}}
@job={{job}}
@jobClientStatus={{jobClientStatus}}
@isNarrow={{isNarrow}}
/>`;
test('it renders', async function (assert) {
assert.expect(2);
const props = commonProperties();
this.setProperties(props);
await render(commonTemplate);
assert.ok(JobClientStatusBar.isPresent, 'Client Status Bar is rendered');
await componentA11yAudit(this.element, assert);
});
test('it fires the onBarClick handler method when clicking a bar in the chart', async function (assert) {
const props = commonProperties();
this.setProperties(props);
await render(commonTemplate);
await JobClientStatusBar.slices[0].click();
assert.ok(props.onSliceClick.calledOnce);
});
test('it handles an update to client status property', async function (assert) {
const props = commonProperties();
this.setProperties(props);
await render(commonTemplate);
const newProps = {
...props,
jobClientStatus: {
...props.jobClientStatus,
byStatus: {
...props.jobClientStatus.byStatus,
starting: [],
running: ['someNodeId'],
},
},
};
this.setProperties(newProps);
await JobClientStatusBar.visitSlice('running');
assert.ok(props.onSliceClick.calledOnce);
});
});