From 0439ff49db878f555aa160c11fdb12ce131a189b Mon Sep 17 00:00:00 2001 From: Seyi Adebajo Date: Thu, 30 Nov 2017 10:33:07 -0800 Subject: [PATCH 1/2] adds sinon lib for testing. updates fetcher module implementation and adds tests --- wherehows-web/app/utils/api/fetcher.ts | 33 ++- wherehows-web/package.json | 2 + .../tests/unit/utils/api/fetcher-test.js | 32 ++- wherehows-web/yarn.lock | 201 +++++++++++++++++- 4 files changed, 240 insertions(+), 28 deletions(-) diff --git a/wherehows-web/app/utils/api/fetcher.ts b/wherehows-web/app/utils/api/fetcher.ts index 5efeebc2cd..9ad22a436b 100644 --- a/wherehows-web/app/utils/api/fetcher.ts +++ b/wherehows-web/app/utils/api/fetcher.ts @@ -28,7 +28,7 @@ const baseFetchHeaders = (headers: FetchConfig['headers']) => ({ * @param {object} fetchConfig * @returns {Promise} */ -const json = (url: string, fetchConfig: object): Promise => +const json = (url: string = '', fetchConfig: object = {}): Promise => fetch(url, fetchConfig).then(response => response.json()); /** @@ -50,7 +50,9 @@ const getJSON = (config: FetchConfig): Promise => { * @returns {Promise} */ const postJSON = (config: FetchConfig): Promise => { + const requestBody = config.data ? { body: JSON.stringify(config.data) } : {}; const fetchConfig = Object.assign( + requestBody, config.data && { body: JSON.stringify(config.data) }, baseFetchHeaders(config.headers), { method: 'POST' } @@ -66,11 +68,8 @@ const postJSON = (config: FetchConfig): Promise => { * @return {Promise} */ const deleteJSON = (config: FetchConfig): Promise => { - const fetchConfig = Object.assign( - config.data && { body: JSON.stringify(config.data) }, - baseFetchHeaders(config.headers), - { method: 'DELETE' } - ); + const requestBody = config.data ? { body: JSON.stringify(config.data) } : {}; + const fetchConfig = Object.assign(requestBody, baseFetchHeaders(config.headers), { method: 'DELETE' }); return json(config.url, fetchConfig); }; @@ -82,11 +81,9 @@ const deleteJSON = (config: FetchConfig): Promise => { * @return {Promise} */ const putJSON = (config: FetchConfig): Promise => { - const fetchConfig = Object.assign( - config.data && { body: JSON.stringify(config.data) }, - baseFetchHeaders(config.headers), - { method: 'PUT' } - ); + const requestBody = config.data ? { body: JSON.stringify(config.data) } : {}; + + const fetchConfig = Object.assign(requestBody, baseFetchHeaders(config.headers), { method: 'PUT' }); return json(config.url, fetchConfig); }; @@ -111,17 +108,19 @@ const getHeaders = async (config: FetchConfig): Promise => { }; /** - * Wraps a request Promise, passthrough response if successful, otherwise handle the error and rethrow if not api error + * Wraps a request Promise, pass-through response if successful, otherwise handle the error and rethrow if not api error + * @template T * @param {Promise} fetcher the api request to wrap - * @param {K} defaultValue - * @return {Promise} + * @param {T} defaultValue + * @returns {Promise} */ -const fetchAndHandleIfApiError = async (fetcher: Promise, defaultValue: K): Promise => { - let result: T | K | null = typeof defaultValue === 'undefined' ? null : defaultValue; +const fetchAndHandleIfApiError = async (fetcher: Promise, defaultValue: T): Promise => { + let result = typeof defaultValue === 'undefined' ? null : defaultValue; try { result = await fetcher; } catch (e) { - //handle error + // TODO: if error is an api error, display notification and allow default return + // otherwise throw } return result; }; diff --git a/wherehows-web/package.json b/wherehows-web/package.json index 0a3054a5ea..14bea8a8d0 100644 --- a/wherehows-web/package.json +++ b/wherehows-web/package.json @@ -67,6 +67,8 @@ "ember-redux-shim": "^1.1.1", "ember-redux-thunk-shim": "^1.1.2", "ember-resolver": "^4.5.0", + "ember-sinon": "^1.0.1", + "ember-sinon-qunit": "^2.1.0", "ember-source": "~2.16.0", "ember-symbol-observable": "^0.1.2", "eslint": "^4.9.0", diff --git a/wherehows-web/tests/unit/utils/api/fetcher-test.js b/wherehows-web/tests/unit/utils/api/fetcher-test.js index a8189ad011..14082e0923 100644 --- a/wherehows-web/tests/unit/utils/api/fetcher-test.js +++ b/wherehows-web/tests/unit/utils/api/fetcher-test.js @@ -1,8 +1,32 @@ -import { getJSON } from 'wherehows-web/utils/api/fetcher'; +import { + getJSON, + postJSON, + deleteJSON, + putJSON, + getHeaders, + fetchAndHandleIfApiError +} from 'wherehows-web/utils/api/fetcher'; import { module, test } from 'qunit'; +import sinon from 'sinon'; -module('Unit | Utility | api/fetcher'); +module('Unit | Utility | api/fetcher', { + beforeEach() { + this.xhr = sinon.useFakeXMLHttpRequest(); + }, -test('it has a function getJSON', function(assert) { - assert.ok(typeof getJSON === 'function'); + afterEach() { + this.xhr.restore(); + } +}); + +test('each http request function exists', function(assert) { + [getJSON, postJSON, deleteJSON, putJSON, getHeaders, fetchAndHandleIfApiError].forEach(httpRequest => + assert.ok(typeof httpRequest === 'function', `${httpRequest} is a function`) + ); +}); + +test('each http request function returns a Promise / thennable', function(assert) { + [getJSON, postJSON, deleteJSON, putJSON, getHeaders].forEach(httpRequest => + assert.ok(typeof httpRequest({}).then === 'function', `${httpRequest} returns a Promise object or thennable`) + ); }); diff --git a/wherehows-web/yarn.lock b/wherehows-web/yarn.lock index f7a138c40c..4b4a5c518a 100644 --- a/wherehows-web/yarn.lock +++ b/wherehows-web/yarn.lock @@ -459,6 +459,10 @@ async@~0.2.9: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" +async@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1788,6 +1792,21 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +build@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/build/-/build-0.1.4.tgz#707fe026ffceddcacbfdcdf356eafda64f151046" + dependencies: + cssmin "0.3.x" + jsmin "1.x" + jxLoader "*" + moo-server "*" + promised-io "*" + timespan "2.x" + uglify-js "1.x" + walker "1.x" + winston "*" + wrench "1.3.x" + builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -2067,7 +2086,7 @@ color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" -colors@1.0.3: +colors@1.0.3, colors@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -2295,12 +2314,20 @@ cson-parser@^1.1.0: dependencies: coffee-script "^1.10.0" +cssmin@0.3.x: + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssmin/-/cssmin-0.3.2.tgz#ddce4c547b510ae0d594a8f1fbf8aaf8e2c5c00d" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" dependencies: array-find-index "^1.0.1" +cycle@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + dag-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dag-map/-/dag-map-2.0.2.tgz#9714b472de82a1843de2fba9b6876938cab44c68" @@ -2432,7 +2459,7 @@ detective@^4.3.1: acorn "^4.0.3" defined "^1.0.0" -diff@^3.2.0: +diff@^3.1.0, diff@^3.2.0: version "3.4.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" @@ -2548,6 +2575,24 @@ ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-be clone "^2.0.0" ember-cli-version-checker "^2.0.0" +ember-cli-babel@^6.7.2: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.10.0.tgz#81424acd1d97fb13658168121eeb2007d6edee84" + dependencies: + amd-name-resolver "0.0.7" + babel-plugin-debug-macros "^0.1.11" + babel-plugin-ember-modules-api-polyfill "^2.0.1" + babel-plugin-transform-es2015-modules-amd "^6.24.0" + babel-polyfill "^6.16.0" + babel-preset-env "^1.5.1" + broccoli-babel-transpiler "^6.1.2" + broccoli-debug "^0.6.2" + broccoli-funnel "^1.0.0" + broccoli-source "^1.1.0" + clone "^2.0.0" + ember-cli-version-checker "^2.1.0" + semver "^5.4.1" + ember-cli-bootstrap-sassy@^0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/ember-cli-bootstrap-sassy/-/ember-cli-bootstrap-sassy-0.5.6.tgz#d4a557c91acdcac3241f53d7fd14005a714d1217" @@ -2568,8 +2613,8 @@ ember-cli-broccoli-sane-watcher@^2.0.4: sane "^1.1.1" ember-cli-code-coverage@theseyi/ember-cli-code-coverage: - version "0.4.2" - resolved "https://codeload.github.com/theseyi/ember-cli-code-coverage/tar.gz/75acde3febdbf7da87153d98e12343b54115b3f4" + version "0.5.0" + resolved "https://codeload.github.com/theseyi/ember-cli-code-coverage/tar.gz/368fc520ff1f00d2390cc9818bd4225772e7d834" dependencies: babel-core "^6.24.1" babel-plugin-transform-async-to-generator "^6.24.1" @@ -2891,7 +2936,7 @@ ember-cli-version-checker@^1.0.2, ember-cli-version-checker@^1.1.6, ember-cli-ve dependencies: semver "^5.3.0" -ember-cli-version-checker@^2.0.0: +ember-cli-version-checker@^2.0.0, ember-cli-version-checker@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-2.1.0.tgz#fc79a56032f3717cf844ada7cbdec1a06fedb604" dependencies: @@ -3312,6 +3357,22 @@ ember-simple-auth@^1.4.0: ember-getowner-polyfill "^1.1.0" silent-error "^1.0.0" +ember-sinon-qunit@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ember-sinon-qunit/-/ember-sinon-qunit-2.1.0.tgz#85fd64e73db40148816a46a64f9f78b170b72cb2" + dependencies: + ember-cli-babel "^6.7.2" + ember-sinon "~1.0.0" + +ember-sinon@^1.0.1, ember-sinon@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ember-sinon/-/ember-sinon-1.0.1.tgz#056390eacc9367b4c3955ce1cb5a04246f8197f5" + dependencies: + broccoli-funnel "^2.0.0" + broccoli-merge-trees "^2.0.0" + ember-cli-babel "^6.3.0" + sinon "^3.2.1" + ember-source@~2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-2.16.0.tgz#2becd7966278fe453046b91178ede665c2cf241a" @@ -3834,6 +3895,10 @@ eyeglass@^1.3.0: node-sass-utils "^1.1.2" semver "^5.0.3" +eyes@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + fake-xml-http-request@^1.4.0, fake-xml-http-request@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/fake-xml-http-request/-/fake-xml-http-request-1.6.0.tgz#bd0ac79ae3e2660098282048a12c730a6f64d550" @@ -4021,6 +4086,12 @@ form-data@~2.3.1: combined-stream "^1.0.5" mime-types "^2.1.12" +formatio@1.2.0, formatio@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.2.0.tgz#f3b2167d9068c4698a8d51f4f760a39a54d818eb" + dependencies: + samsam "1.x" + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -4798,7 +4869,7 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" -isstream@~0.1.2: +isstream@0.1.x, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4866,6 +4937,10 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" +js-yaml@0.3.x: + version "0.3.7" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-0.3.7.tgz#d739d8ee86461e54b354d6a7d7d1f2ad9a167f62" + js-yaml@3.x, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.3.0, js-yaml@^3.4.3, js-yaml@^3.6.1, js-yaml@^3.9.1: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" @@ -4893,6 +4968,10 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +jsmin@1.x: + version "1.0.1" + resolved "https://registry.yarnpkg.com/jsmin/-/jsmin-1.0.1.tgz#e7bd0dcd6496c3bf4863235bf461a3d98aa3b98c" + json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" @@ -4948,6 +5027,19 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +just-extend@^1.1.26: + version "1.1.27" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.27.tgz#ec6e79410ff914e472652abfa0e603c03d60e905" + +jxLoader@*: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jxLoader/-/jxLoader-0.1.1.tgz#0134ea5144e533b594fc1ff25ff194e235c53ecd" + dependencies: + js-yaml "0.3.x" + moo-server "1.3.x" + promised-io "*" + walker "1.x" + kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -5353,6 +5445,10 @@ lodash.forown@~2.3.0: lodash._objecttypes "~2.3.0" lodash.keys "~2.3.0" +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + lodash.identity@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.identity/-/lodash.identity-2.3.0.tgz#6b01a210c9485355c2a913b48b6711219a173ded" @@ -5523,6 +5619,14 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" +lolex@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6" + +lolex@^2.1.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.3.1.tgz#3d2319894471ea0950ef64692ead2a5318cff362" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -5745,6 +5849,10 @@ moment@2.x, "moment@>= 2.6.0", "moment@>= 2.9.0", moment@^2.18.1: version "2.19.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.1.tgz#56da1a2d1cbf01d38b7e1afc31c10bcfa1929167" +moo-server@*, moo-server@1.3.x: + version "1.3.0" + resolved "https://registry.yarnpkg.com/moo-server/-/moo-server-1.3.0.tgz#5dc79569565a10d6efed5439491e69d2392e58f1" + morgan@^1.8.1: version "1.9.0" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.0.tgz#d01fa6c65859b76fcf31b3cb53a3821a311d8051" @@ -5783,6 +5891,10 @@ nan@^2.0.7, nan@^2.3.0, nan@^2.3.2: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" +native-promise-only@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -5791,6 +5903,16 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +nise@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.2.0.tgz#079d6cadbbcb12ba30e38f1c999f36ad4d6baa53" + dependencies: + formatio "^1.2.0" + just-extend "^1.1.26" + lolex "^1.6.0" + path-to-regexp "^1.7.0" + text-encoding "^0.6.4" + node-dir@^0.1.16: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" @@ -6180,6 +6302,12 @@ path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -6306,6 +6434,10 @@ promise-map-series@^0.2.1: dependencies: rsvp "^3.0.14" +promised-io@*: + version "0.3.5" + resolved "https://registry.yarnpkg.com/promised-io/-/promised-io-0.3.5.tgz#4ad217bb3658bcaae9946b17a8668ecd851e1356" + proxy-addr@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" @@ -6799,6 +6931,10 @@ safe-json-parse@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" +samsam@1.x, samsam@^1.1.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" + sane@^1.1.1, sane@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/sane/-/sane-1.7.0.tgz#b3579bccb45c94cf20355cc81124990dfd346e30" @@ -6926,6 +7062,22 @@ simple-is@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0" +sinon@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-3.3.0.tgz#9132111b4bbe13c749c2848210864250165069b1" + dependencies: + build "^0.1.4" + diff "^3.1.0" + formatio "1.2.0" + lodash.get "^4.4.2" + lolex "^2.1.2" + native-promise-only "^0.8.1" + nise "^1.0.1" + path-to-regexp "^1.7.0" + samsam "^1.1.3" + text-encoding "0.6.4" + type-detect "^4.0.0" + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -7123,6 +7275,10 @@ stable@~0.1.3: version "0.1.6" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.6.tgz#910f5d2aed7b520c6e777499c1f32e139fdecb10" +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + staged-git-files@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" @@ -7375,6 +7531,10 @@ tether@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/tether/-/tether-1.4.0.tgz#0f9fa171f75bf58485d8149e94799d7ae74d1c1a" +text-encoding@0.6.4, text-encoding@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -7387,6 +7547,10 @@ through@^2.3.6, through@^2.3.8, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" +timespan@2.x: + version "2.3.0" + resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" + tiny-lr@^1.0.3: version "1.0.5" resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.0.5.tgz#21f40bf84ebd1f853056680375eef1670c334112" @@ -7478,6 +7642,10 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@^4.0.0: + version "4.0.5" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.5.tgz#d70e5bc81db6de2a381bcaca0c6e0cbdc7635de2" + type-is@~1.6.15: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" @@ -7504,6 +7672,10 @@ uglify-es@^3.1.3: commander "~2.11.0" source-map "~0.6.1" +uglify-js@1.x: + version "1.3.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-1.3.5.tgz#4b5bfff9186effbaa888e4c9e94bd9fc4c94929d" + uglify-js@^2.6: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" @@ -7630,7 +7802,7 @@ walk-sync@^0.3.0, walk-sync@^0.3.1, walk-sync@^0.3.2: ensure-posix-path "^1.0.0" matcher-collection "^1.0.0" -walker@~1.0.5: +walker@1.x, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" dependencies: @@ -7679,6 +7851,17 @@ window-size@^0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" +winston@*: + version "2.4.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.0.tgz#808050b93d52661ed9fb6c26b3f0c826708b0aee" + dependencies: + async "~1.0.0" + colors "1.0.x" + cycle "1.0.x" + eyes "0.1.x" + isstream "0.1.x" + stack-trace "0.0.x" + wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -7708,6 +7891,10 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +wrench@1.3.x: + version "1.3.9" + resolved "https://registry.yarnpkg.com/wrench/-/wrench-1.3.9.tgz#6f13ec35145317eb292ca5f6531391b244111411" + write-file-atomic@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" From a3356fde6db848fb5e07a19c0c6c5e08f200db8d Mon Sep 17 00:00:00 2001 From: Seyi Adebajo Date: Thu, 30 Nov 2017 12:48:42 -0800 Subject: [PATCH 2/2] adds representation for dataset purge policy when viewing compliance in readonly mode --- wherehows-web/app/components/purge-policy.ts | 4 - .../components/dataset-compliance.hbs | 12 +-- .../app/templates/components/purge-policy.hbs | 80 +++++++++++++------ 3 files changed, 62 insertions(+), 34 deletions(-) diff --git a/wherehows-web/app/components/purge-policy.ts b/wherehows-web/app/components/purge-policy.ts index c8cd367475..de22a3f348 100644 --- a/wherehows-web/app/components/purge-policy.ts +++ b/wherehows-web/app/components/purge-policy.ts @@ -11,10 +11,6 @@ import { import noop from 'wherehows-web/utils/noop'; export default Component.extend({ - tagName: 'ul', - - classNames: ['purge-policy-list'], - exemptPolicy, purgePolicyProps, diff --git a/wherehows-web/app/templates/components/dataset-compliance.hbs b/wherehows-web/app/templates/components/dataset-compliance.hbs index 44e8b89178..7c716f78fc 100644 --- a/wherehows-web/app/templates/components/dataset-compliance.hbs +++ b/wherehows-web/app/templates/components/dataset-compliance.hbs @@ -98,18 +98,20 @@ {{partial "datasets/dataset-compliance/dataset-classification"}} {{/if}} - {{#if (or isReadOnly (eq editStepIndex 0))}} - {{partial "datasets/dataset-compliance/dataset-compliance-entities"}} - {{/if}} - - {{#if (eq editStepIndex 1)}} + {{#if (or isReadOnly (eq editStepIndex 1))}} {{purge-policy + isEditable=(not isReadOnly) platform=platform purgeNote=complianceInfo.compliancePurgeNote purgePolicy=(readonly complianceInfo.complianceType) onPolicyChange=(action "onDatasetPurgePolicyChange") }} {{/if}} + + {{#if (or isReadOnly (eq editStepIndex 0))}} + {{partial "datasets/dataset-compliance/dataset-compliance-entities"}} + {{/if}} + {{yield}} diff --git a/wherehows-web/app/templates/components/purge-policy.hbs b/wherehows-web/app/templates/components/purge-policy.hbs index 3b6494fc9a..bdda87c373 100644 --- a/wherehows-web/app/templates/components/purge-policy.hbs +++ b/wherehows-web/app/templates/components/purge-policy.hbs @@ -1,32 +1,62 @@ -{{#each-in purgePolicyProps as |purgeType prop|}} -
  • + - {{#radio-button-composer - name="dataset-purge-policy" - value=(if (contains (uppercase platform) prop.platforms) purgeType null) - disabled=(if (contains (uppercase platform) prop.platforms) false true) - groupValue=(readonly purgePolicy) - changed=(action "onChange") - }} - {{prop.displayAs}} - {{/radio-button-composer}} +
      + {{#if isEditable}} - {{#unless (contains (uppercase platform) prop.platforms)}} -

      - Purge policy not available for {{lowercase platform}} -

      - {{/unless}} + {{#each-in purgePolicyProps as |purgeType prop|}} +
    • -

      {{prop.desc}}

      + {{#radio-button-composer + name="dataset-purge-policy" + value=(if (contains (uppercase platform) prop.platforms) purgeType null) + disabled=(if (contains (uppercase platform) prop.platforms) false true) + groupValue=(readonly purgePolicy) + changed=(action "onChange") + }} + {{prop.displayAs}} + {{/radio-button-composer}} - {{#if (and requestExemptionReason (eq purgeType exemptPolicy))}} + {{#unless (contains (uppercase platform) prop.platforms)}} +

      + Purge policy not available for + {{lowercase platform}} +

      + {{/unless}} - {{medium-content-editable - value=purgeNote - options=editorOptions - class="comment-new__content"}} +

      {{prop.desc}}

      + + {{#if (and requestExemptionReason (eq purgeType exemptPolicy))}} + + {{medium-content-editable + value=purgeNote + options=editorOptions + class="comment-new__content"}} + + {{/if}} +
    • + {{/each-in}} + + {{else}} + + {{#if purgeType}} +
    • + + {{get (get purgePolicyProps purgeType) "displayAs"}} + +
    • + {{else}} + +

      This dataset does not have a current compliance purge policy.

      + To update, click edit and follow the steps {{/if}} - -{{/each-in}} + {{/if}} +