mirror of
https://github.com/datahub-project/datahub.git
synced 2025-08-18 06:06:55 +00:00
131 lines
4.2 KiB
JavaScript
131 lines
4.2 KiB
JavaScript
import { module, test } from 'qunit';
|
|
import { setupRenderingTest } from 'ember-qunit';
|
|
import { render, triggerEvent } from '@ember/test-helpers';
|
|
import hbs from 'htmlbars-inline-precompile';
|
|
import sinon from 'sinon';
|
|
|
|
import { purgePolicyProps, exemptPolicy, PurgePolicy, getSupportedPurgePolicies } from 'wherehows-web/constants';
|
|
import { DatasetPlatform } from 'wherehows-web/constants/datasets/platform';
|
|
import platforms from 'wherehows-web/mirage/fixtures/list-platforms';
|
|
import { ApiStatus } from 'wherehows-web/utils/api';
|
|
|
|
module('Integration | Component | purge policy', function(hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
hooks.beforeEach(function() {
|
|
this.sinonServer = sinon.createFakeServer();
|
|
});
|
|
|
|
hooks.afterEach(function() {
|
|
this.sinonServer.restore();
|
|
});
|
|
|
|
const policyList = '.purge-policy-list';
|
|
const policyTypes = Object.keys(purgePolicyProps);
|
|
const missingPolicyText = 'No policy';
|
|
|
|
test('it renders', async function(assert) {
|
|
assert.expect(1);
|
|
|
|
await render(hbs`{{purge-policy}}`);
|
|
|
|
assert.equal(document.querySelector(policyList).tagName, 'UL', 'expected component element is rendered');
|
|
});
|
|
|
|
test('it renders each purge policy in edit mode', async function(assert) {
|
|
assert.expect(1);
|
|
const purgePoliciesLength = policyTypes.length;
|
|
|
|
this.set('isEditable', true);
|
|
await render(hbs`{{purge-policy isEditable=isEditable}}`);
|
|
|
|
assert.equal(
|
|
document.querySelectorAll(`${policyList} [type=radio]`).length,
|
|
purgePoliciesLength,
|
|
'all policies are rendered'
|
|
);
|
|
});
|
|
|
|
test('it triggers the onPolicyChange action', async function(assert) {
|
|
assert.expect(2);
|
|
let onPolicyChangeActionCallCount = 0;
|
|
|
|
this.set('isEditable', true);
|
|
|
|
this.set('onPolicyChange', () => {
|
|
assert.equal(
|
|
++onPolicyChangeActionCallCount,
|
|
1,
|
|
'onPolicyChange action is invoked when change event is triggered'
|
|
);
|
|
});
|
|
|
|
await render(hbs`{{purge-policy onPolicyChange=onPolicyChange isEditable=isEditable}}`);
|
|
assert.equal(onPolicyChangeActionCallCount, 0, 'onPolicyChange action is not invoked on instantiation');
|
|
|
|
triggerEvent(`${policyList} [type=radio]`, 'change');
|
|
});
|
|
|
|
test('it renders a user message if the purge policy is not set and is in readonly mode', async function(assert) {
|
|
assert.expect(1);
|
|
|
|
this.set('missingPolicyText', missingPolicyText);
|
|
this.set('isEditable', false);
|
|
await render(hbs`{{purge-policy missingPolicyText=missingPolicyText isEditable=isEditable}}`);
|
|
assert.equal(
|
|
document.querySelector(`${policyList}`).textContent.trim(),
|
|
missingPolicyText,
|
|
`${missingPolicyText} is rendered`
|
|
);
|
|
});
|
|
|
|
test('it indicates the currently selected purge policy', async function(assert) {
|
|
assert.expect(1);
|
|
const selectedPolicy = PurgePolicy.ManualPurge;
|
|
const platform = DatasetPlatform.MySql;
|
|
|
|
this.set('isEditable', true);
|
|
this.set('platform', platform);
|
|
this.set('purgePolicy', selectedPolicy);
|
|
this.set('supportedPurgePolicies', getSupportedPurgePolicies(platform, platforms));
|
|
|
|
this.sinonServer.respondWith('GET', '/api/v1/list/platforms', [
|
|
200,
|
|
{ 'Content-Type': 'application/json' },
|
|
JSON.stringify({ status: ApiStatus.OK, platforms })
|
|
]);
|
|
|
|
await render(
|
|
hbs`{{purge-policy isEditable=isEditable purgePolicy=purgePolicy platform=platform supportedPurgePolicies=supportedPurgePolicies}}`
|
|
);
|
|
this.sinonServer.respond();
|
|
|
|
assert.ok(
|
|
document.querySelector(`${policyList} [type=radio][value=${selectedPolicy}]`).checked,
|
|
`${selectedPolicy} radio is checked`
|
|
);
|
|
});
|
|
|
|
test('it focuses the comment element for exempt policy', async function(assert) {
|
|
assert.expect(1);
|
|
|
|
const focusEditor = () => {
|
|
assert.equal(++focusMethodCount, 1, 'focusEditor action is invoked');
|
|
};
|
|
let selectedPolicy = exemptPolicy;
|
|
let platform = DatasetPlatform.MySql;
|
|
let focusMethodCount = 0;
|
|
|
|
this.setProperties({
|
|
platform,
|
|
focusEditor,
|
|
isEditable: true,
|
|
purgePolicy: selectedPolicy
|
|
});
|
|
|
|
await render(
|
|
hbs`{{purge-policy isEditable=isEditable purgePolicy=purgePolicy platform=platform focusEditor=focusEditor}}`
|
|
);
|
|
});
|
|
});
|