Merge pull request #891 from theseyi/master

refactors informational text in purge policy into constant. adds inte…
This commit is contained in:
Seyi Adebajo 2017-12-04 10:07:48 -08:00 committed by GitHub
commit f1fefc9714
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 153 additions and 4 deletions

View File

@ -5,14 +5,29 @@ import {
baseCommentEditorOptions,
exemptPolicy,
isExempt,
missingPolicyText,
PurgePolicy,
purgePolicyProps
} from 'wherehows-web/constants';
import noop from 'wherehows-web/utils/noop';
export default Component.extend({
/**
* Reference to the purge exempt policy
* @type {string}
*/
exemptPolicy,
/**
* Reference to the informational text if the dataset does not have a saved purge policy
* @type {string}
*/
missingPolicyText,
/**
* Reference to client options for each purge policy
* @type {PurgePolicyProperties}
*/
purgePolicyProps,
/**

View File

@ -35,7 +35,13 @@ const purgePolicyProps: PurgePolicyProperties = {
displayAs: 'Auto Purge'
},
MANUAL_PURGE: {
platforms: [DatasetPlatform.MySql, DatasetPlatform.Espresso, DatasetPlatform.Teradata, DatasetPlatform.Oracle, DatasetPlatform.HDFS],
platforms: [
DatasetPlatform.MySql,
DatasetPlatform.Espresso,
DatasetPlatform.Teradata,
DatasetPlatform.Oracle,
DatasetPlatform.HDFS
],
desc: 'Choose this option only if you or your team have implemented a custom mechanism to purge this dataset.',
displayAs: 'Manual Purge'
},
@ -69,4 +75,10 @@ const exemptPolicy = PurgePolicy.PurgeExempt;
*/
const isExempt = (policy: PurgePolicy) => policy === PurgePolicy.PurgeExempt;
export { PurgePolicy, purgePolicyProps, isExempt, exemptPolicy };
/**
* User informational text for datasets without a purge policy
* @type {string}
*/
const missingPolicyText = 'This dataset does not have a current compliance purge policy.';
export { PurgePolicy, purgePolicyProps, isExempt, exemptPolicy, missingPolicyText };

View File

@ -1 +1,2 @@
@import 'deprecated-dataset';
@import 'removed-dataset';

View File

@ -0,0 +1,5 @@
.removed-dataset {
@include pill(set-color(red, maroonflush), set-color(white, base));
margin-top: item-spacing(3);
line-height: item-spacing(5);
}

View File

@ -54,7 +54,7 @@
</li>
{{else}}
<p>This dataset does not have a current compliance purge policy.</p>
<p>{{missingPolicyText}}</p>
<sub>To update, click edit and follow the steps</sub>
{{/if}}

View File

@ -11,6 +11,23 @@
<div class="row">
<div class="col-xs-5">
{{#if datasetView.removed}}
<span class="removed-dataset">
REMOVED
</span>
<sup>
<span
class="glyphicon glyphicon-question-sign"
title="This dataset has been removed">
{{tooltip-on-element
event="hover"
text="This dataset has been removed"
}}
</span>
</sup>
{{/if}}
{{#if datasetView.deprecated}}
<a data-toggle="tab" href="#propertiestab" {{action "showProperties" preventDefault=false}}>
<span class="deprecated-dataset">
@ -19,7 +36,7 @@
<sup>
<span
class="glyphicon glyphicon-question-sign"
title={{helpText.classification}}>
title="Click to view dataset properties">
{{tooltip-on-element
event="hover"
text="Click to view dataset properties"

View File

@ -0,0 +1,99 @@
import { moduleForComponent, test } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';
import { triggerEvent } from 'ember-native-dom-helpers';
import { missingPolicyText, purgePolicyProps, exemptPolicy } from 'wherehows-web/constants';
moduleForComponent('purge-policy', 'Integration | Component | purge policy', {
integration: true
});
const policyList = '.purge-policy-list';
const policyTypes = Object.keys(purgePolicyProps);
test('it renders', function(assert) {
assert.expect(1);
this.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', function(assert) {
assert.expect(1);
const purgePoliciesLength = policyTypes.length;
this.set('isEditable', true);
this.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', 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');
});
this.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', function(assert) {
assert.expect(1);
this.render(hbs`{{purge-policy}}`);
assert.equal(
document.querySelector(`${policyList} p`).textContent,
missingPolicyText,
`${missingPolicyText} is rendered`
);
});
test('it indicates the currently selected purge policy', function(assert) {
assert.expect(1);
const selectedPolicy = policyTypes[1];
const platform = purgePolicyProps[selectedPolicy].platforms[0];
this.set('isEditable', true);
this.set('platform', platform);
this.set('purgePolicy', selectedPolicy);
this.render(hbs`{{purge-policy isEditable=isEditable purgePolicy=purgePolicy platform=platform}}`);
assert.ok(
document.querySelector(`${policyList} [type=radio][value=${selectedPolicy}]`).checked,
`${selectedPolicy} radio is checked`
);
});
test('it focuses the comment element for exempt policy', function(assert) {
assert.expect(1);
const focusEditor = () => {
assert.equal(++focusMethodCount, 1, 'focusEditor action is invoked');
};
let selectedPolicy = exemptPolicy;
let platform = purgePolicyProps[selectedPolicy].platforms[0];
let focusMethodCount = 0;
this.setProperties({
platform,
focusEditor,
isEditable: true,
purgePolicy: selectedPolicy
});
this.render(
hbs`{{purge-policy isEditable=isEditable purgePolicy=purgePolicy platform=platform focusEditor=focusEditor}}`
);
});