From 7b2da733330e1982571923e2236bf1377f319649 Mon Sep 17 00:00:00 2001 From: Seyi Adebajo Date: Fri, 1 Dec 2017 17:22:24 -0800 Subject: [PATCH 1/3] refactors informational text in purge policy into constant. adds integration tests for purge-policy component --- wherehows-web/app/components/purge-policy.ts | 15 +++++ .../app/constants/dataset-purge-policy.ts | 16 ++++- .../app/templates/components/purge-policy.hbs | 2 +- .../components/purge-policy-test.js | 59 +++++++++++++++++++ 4 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 wherehows-web/tests/integration/components/purge-policy-test.js diff --git a/wherehows-web/app/components/purge-policy.ts b/wherehows-web/app/components/purge-policy.ts index de22a3f348..f7283335d3 100644 --- a/wherehows-web/app/components/purge-policy.ts +++ b/wherehows-web/app/components/purge-policy.ts @@ -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, /** diff --git a/wherehows-web/app/constants/dataset-purge-policy.ts b/wherehows-web/app/constants/dataset-purge-policy.ts index fb205474e6..1284b9a10f 100644 --- a/wherehows-web/app/constants/dataset-purge-policy.ts +++ b/wherehows-web/app/constants/dataset-purge-policy.ts @@ -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 }; diff --git a/wherehows-web/app/templates/components/purge-policy.hbs b/wherehows-web/app/templates/components/purge-policy.hbs index 79fc8f3cc5..fddd78e9eb 100644 --- a/wherehows-web/app/templates/components/purge-policy.hbs +++ b/wherehows-web/app/templates/components/purge-policy.hbs @@ -54,7 +54,7 @@ {{else}} -

This dataset does not have a current compliance purge policy.

+

{{missingPolicyText}}

To update, click edit and follow the steps {{/if}} diff --git a/wherehows-web/tests/integration/components/purge-policy-test.js b/wherehows-web/tests/integration/components/purge-policy-test.js new file mode 100644 index 0000000000..7a8df135b4 --- /dev/null +++ b/wherehows-web/tests/integration/components/purge-policy-test.js @@ -0,0 +1,59 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; +import { triggerEvent } from 'ember-native-dom-helpers'; +import { missingPolicyText, purgePolicyProps } from 'wherehows-web/constants'; + +moduleForComponent('purge-policy', 'Integration | Component | purge policy', { + integration: true +}); + +const policyList = '.purge-policy-list'; + +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 = Object.keys(purgePolicyProps).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` + ); +}); From 1d9331ff02db1adb478a16a3a920e83a760cb2e1 Mon Sep 17 00:00:00 2001 From: Seyi Adebajo Date: Fri, 1 Dec 2017 18:21:00 -0800 Subject: [PATCH 2/3] additional integration tests --- .../components/purge-policy-test.js | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/wherehows-web/tests/integration/components/purge-policy-test.js b/wherehows-web/tests/integration/components/purge-policy-test.js index 7a8df135b4..b4e6001803 100644 --- a/wherehows-web/tests/integration/components/purge-policy-test.js +++ b/wherehows-web/tests/integration/components/purge-policy-test.js @@ -1,13 +1,14 @@ import { moduleForComponent, test } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; import { triggerEvent } from 'ember-native-dom-helpers'; -import { missingPolicyText, purgePolicyProps } from 'wherehows-web/constants'; +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); @@ -19,7 +20,7 @@ test('it renders', function(assert) { test('it renders each purge policy in edit mode', function(assert) { assert.expect(1); - const purgePoliciesLength = Object.keys(purgePolicyProps).length; + const purgePoliciesLength = policyTypes.length; this.set('isEditable', true); this.render(hbs`{{purge-policy isEditable=isEditable}}`); @@ -57,3 +58,42 @@ test('it renders a user message if the purge policy is not set and is in readonl `${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}}` + ); +}); From 6850a56adcb4297d649ce1410e23146d076224e3 Mon Sep 17 00:00:00 2001 From: Seyi Adebajo Date: Sun, 3 Dec 2017 23:08:03 -0800 Subject: [PATCH 3/3] adds indicator for removed dataset --- .../components/dataset-property/_all.scss | 1 + .../dataset-property/_removed-dataset.scss | 5 +++++ .../app/templates/datasets/dataset.hbs | 19 ++++++++++++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 wherehows-web/app/styles/components/dataset-property/_removed-dataset.scss diff --git a/wherehows-web/app/styles/components/dataset-property/_all.scss b/wherehows-web/app/styles/components/dataset-property/_all.scss index 9922be07cc..cbb4608995 100644 --- a/wherehows-web/app/styles/components/dataset-property/_all.scss +++ b/wherehows-web/app/styles/components/dataset-property/_all.scss @@ -1 +1,2 @@ @import 'deprecated-dataset'; +@import 'removed-dataset'; diff --git a/wherehows-web/app/styles/components/dataset-property/_removed-dataset.scss b/wherehows-web/app/styles/components/dataset-property/_removed-dataset.scss new file mode 100644 index 0000000000..2e5cc60c5e --- /dev/null +++ b/wherehows-web/app/styles/components/dataset-property/_removed-dataset.scss @@ -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); +} diff --git a/wherehows-web/app/templates/datasets/dataset.hbs b/wherehows-web/app/templates/datasets/dataset.hbs index e48d8f1c82..8a5c46b942 100644 --- a/wherehows-web/app/templates/datasets/dataset.hbs +++ b/wherehows-web/app/templates/datasets/dataset.hbs @@ -11,6 +11,23 @@
+ {{#if datasetView.removed}} + + REMOVED + + + + + {{tooltip-on-element + event="hover" + text="This dataset has been removed" + }} + + + {{/if}} + {{#if datasetView.deprecated}} @@ -19,7 +36,7 @@ + title="Click to view dataset properties"> {{tooltip-on-element event="hover" text="Click to view dataset properties"