From 30a0ea216cd89152faa88e62e8e961e943d718b5 Mon Sep 17 00:00:00 2001 From: Andrew Watkins Date: Fri, 2 Mar 2018 20:50:51 -0700 Subject: [PATCH] WIP first TypeScript test --- ui/jest.config.js | 8 +- ui/package.json | 5 +- ui/src/shared/components/DatabaseList.tsx | 11 +- ui/test/index.js | 3 - .../shared/components/DatabaseList.test.tsx | 45 ++++++ ui/tsconfig.json | 2 +- ui/yarn.lock | 143 +++++++++++++++++- 7 files changed, 200 insertions(+), 17 deletions(-) delete mode 100644 ui/test/index.js create mode 100644 ui/test/shared/components/DatabaseList.test.tsx diff --git a/ui/jest.config.js b/ui/jest.config.js index ba92b8acc4..d167f1b455 100644 --- a/ui/jest.config.js +++ b/ui/jest.config.js @@ -2,10 +2,16 @@ module.exports = { projects: [ { displayName: 'test', - testPathIgnorePatterns: ['/build/'], + testPathIgnorePatterns: ['build', 'node_modules/(?!(jest-test))'], modulePaths: ['', '/node_modules/'], moduleDirectories: ['src'], setupFiles: ['/test/setupTests.js'], + transform: { + '^.+\\.tsx?$': 'ts-jest', + '^.+\\.js$': 'babel-jest', + }, + testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], }, { runner: 'jest-runner-eslint', diff --git a/ui/package.json b/ui/package.json index f2f30fbe1d..c62d68424a 100644 --- a/ui/package.json +++ b/ui/package.json @@ -16,7 +16,7 @@ "start:fast": "webpack --watch --config ./webpack/dev.config.js", "start:hmr": "webpack-dev-server --open --config ./webpack/dev.config.js", "lint": "esw src/", - "test": "jest --runInBand", + "test": "jest", "test:lint": "yarn run lint; yarn run test", "test:watch": "jest --watch", "clean": "rm -rf ./build/*", @@ -31,6 +31,8 @@ }, "devDependencies": { "@types/chai": "^4.1.2", + "@types/enzyme": "^3.1.9", + "@types/jest": "^22.1.4", "@types/lodash": "^4.14.104", "@types/mocha": "^2.2.48", "@types/node": "^9.4.6", @@ -96,6 +98,7 @@ "style-loader": "^0.13.0", "testem": "^1.2.1", "thread-loader": "^1.1.4", + "ts-jest": "^22.4.1", "ts-loader": "^3.5.0", "tslib": "^1.9.0", "typescript": "^2.7.2", diff --git a/ui/src/shared/components/DatabaseList.tsx b/ui/src/shared/components/DatabaseList.tsx index 40a337e97f..6c1d879c27 100644 --- a/ui/src/shared/components/DatabaseList.tsx +++ b/ui/src/shared/components/DatabaseList.tsx @@ -30,6 +30,11 @@ export interface DatabaseListContext { const {shape, string} = PropTypes class DatabaseList extends Component { + constructor() { + super() + this.getDbRp = this.getDbRp.bind(this) + } + state = { namespaces: [], } @@ -68,7 +73,7 @@ class DatabaseList extends Component { } } - getDbRp = async () => { + async getDbRp() { const {source} = this.context const {querySource} = this.props const proxy = _.get(querySource, ['links', 'proxy'], source.links.proxy) @@ -98,11 +103,11 @@ class DatabaseList extends Component { } } - handleChooseNamespace = (namespace: Namespace) => () => { + private handleChooseNamespace = (namespace: Namespace) => () => { this.props.onChooseNamespace(namespace) } - isActive = (query: Query, {database, retentionPolicy}: Namespace) => + private isActive = (query: Query, {database, retentionPolicy}: Namespace) => database === query.database && retentionPolicy === query.retentionPolicy render() { diff --git a/ui/test/index.js b/ui/test/index.js deleted file mode 100644 index 0ee9eb8fdd..0000000000 --- a/ui/test/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const context = require.context('./', true, /Spec\.js$/) -context.keys().forEach(context) -module.exports = context diff --git a/ui/test/shared/components/DatabaseList.test.tsx b/ui/test/shared/components/DatabaseList.test.tsx new file mode 100644 index 0000000000..f8115f913d --- /dev/null +++ b/ui/test/shared/components/DatabaseList.test.tsx @@ -0,0 +1,45 @@ +import React from 'react' +import DatabaseList from 'src/shared/components/DatabaseList' +import {shallow} from 'enzyme' + +const source = { + links: { + self: '/chronograf/v1/sources/16', + kapacitors: '/chronograf/v1/sources/16/kapacitors', + proxy: '/chronograf/v1/sources/16/proxy', + queries: '/chronograf/v1/sources/16/queries', + write: '/chronograf/v1/sources/16/write', + permissions: '/chronograf/v1/sources/16/permissions', + users: '/chronograf/v1/sources/16/users', + databases: '/chronograf/v1/sources/16/dbs', + }, +} + +const setup = async (override = {}) => { + const props = { + query: {}, + source: {}, + querySource: {}, + onChooseNamespace: () => {}, + ...override, + } + + DatabaseList.prototype.getDbRp = jest.fn(() => Promise.resolve()) + + const dbList = await shallow(, {context: {source}) + + return { + dbList, + props, + } +} + +describe('Shared.Components.DatabaseList', () => { + describe('rendering', () => { + it('can display the ', () => { + const {dbList} = setup() + + expect(dbList.exists()).toBe(true) + }) + }) +}) diff --git a/ui/tsconfig.json b/ui/tsconfig.json index 0ff3be3258..2fd5729384 100644 --- a/ui/tsconfig.json +++ b/ui/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "types": ["node", "mocha", "chai", "lodash"], + "types": ["node", "chai", "lodash", "enzyme", "react", "prop-types", "jest"], "target": "es6", "module": "es2015", "moduleResolution": "node", diff --git a/ui/yarn.lock b/ui/yarn.lock index b21a309f9d..7593d989f2 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -30,6 +30,21 @@ version "4.1.2" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.2.tgz#f1af664769cfb50af805431c407425ed619daa21" +"@types/cheerio@*": + version "0.22.7" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.7.tgz#4a92eafedfb2b9f4437d3a4410006d81114c66ce" + +"@types/enzyme@^3.1.9": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.1.9.tgz#fbd97f3beb7cad76fc9c6f04c97d77f4834522ef" + dependencies: + "@types/cheerio" "*" + "@types/react" "*" + +"@types/jest@^22.1.4": + version "22.1.4" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-22.1.4.tgz#5c0c06a9bb495c67e0a78002a952f151e2ae58a1" + "@types/lodash@^4.14.104": version "4.14.104" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.104.tgz#53ee2357fa2e6e68379341d92eb2ecea4b11bb80" @@ -46,6 +61,10 @@ version "15.5.2" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.2.tgz#3c6b8dceb2906cc87fe4358e809f9d20c8d59be1" +"@types/react@*": + version "16.0.40" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.40.tgz#caabc2296886f40b67f6fc80f0f3464476461df9" + "@types/react@^16.0.38": version "16.0.38" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.38.tgz#76617433ea10274505f60bb86eddfdd0476ffdc2" @@ -277,6 +296,10 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -296,6 +319,14 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -443,7 +474,7 @@ babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.5.1: +babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.5.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: @@ -643,7 +674,7 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-istanbul@^4.1.5: +babel-plugin-istanbul@^4.1.4, babel-plugin-istanbul@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" dependencies: @@ -1079,7 +1110,7 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" -babel-preset-jest@^22.4.1: +babel-preset-jest@^22.4.0, babel-preset-jest@^22.4.1: version "22.4.1" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.1.tgz#efa2e5f5334242a9457a068452d7d09735db172a" dependencies: @@ -1144,7 +1175,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.5.0: +babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.5.0, babel-runtime@^6.9.2: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -1671,7 +1702,7 @@ cheerio@^1.0.0-rc.2: lodash "^4.15.0" parse5 "^3.0.1" -chokidar@^1.4.3, chokidar@^1.7.0: +chokidar@^1.4.3, chokidar@^1.6.0, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: @@ -2070,6 +2101,22 @@ cosmiconfig@^3.0.1: parse-json "^3.0.0" require-from-string "^2.0.1" +cpx@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cpx/-/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f" + dependencies: + babel-runtime "^6.9.2" + chokidar "^1.6.0" + duplexer "^0.1.1" + glob "^7.0.5" + glob2base "^0.0.12" + minimatch "^3.0.2" + mkdirp "^0.5.1" + resolve "^1.1.7" + safe-buffer "^5.0.1" + shell-quote "^1.6.1" + subarg "^1.0.0" + create-ecdh@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" @@ -3383,6 +3430,10 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" +find-index@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -3520,6 +3571,14 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-extra@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^0.24.0: version "0.24.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.24.0.tgz#d4e4342a96675cb7846633a6099249332b539952" @@ -3663,6 +3722,12 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob2base@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" + dependencies: + find-index "^0.1.1" + glob@^5.0.15, glob@^5.0.3: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -4670,7 +4735,7 @@ jest-cli@^22.4.2: which "^1.2.12" yargs "^10.0.3" -jest-config@^22.4.2: +jest-config@^22.4.0, jest-config@^22.4.2: version "22.4.2" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.2.tgz#580ba5819bf81a5e48f4fd470e8b81834f45c855" dependencies: @@ -5028,6 +5093,12 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -5600,7 +5671,7 @@ minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -7547,7 +7618,7 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.5.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" dependencies: @@ -7863,6 +7934,15 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" +shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + shelljs@^0.7.5: version "0.7.8" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" @@ -8295,6 +8375,12 @@ styled_string@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/styled_string/-/styled_string-0.0.1.tgz#d22782bd81295459bc4f1df18c4bad8e94dd124a" +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + supports-color@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" @@ -8588,6 +8674,20 @@ tryer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.0.tgz#027b69fa823225e551cace3ef03b11f6ab37c1d7" +ts-jest@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-22.4.1.tgz#69defb2042d689cff9b4244365ef638ecd35f706" + dependencies: + babel-core "^6.24.1" + babel-plugin-istanbul "^4.1.4" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-preset-jest "^22.4.0" + cpx "^1.5.0" + fs-extra "4.0.3" + jest-config "^22.4.0" + pkg-dir "^2.0.0" + yargs "^11.0.0" + ts-loader@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-3.5.0.tgz#151d004dcddb4cf8e381a3bf9d6b74c2d957a9c0" @@ -8748,6 +8848,10 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +universalify@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -9214,6 +9318,12 @@ yargs-parser@^8.1.0: dependencies: camelcase "^4.1.0" +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + dependencies: + camelcase "^4.1.0" + yargs@6.6.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" @@ -9249,6 +9359,23 @@ yargs@^10.0.3: y18n "^3.2.1" yargs-parser "^8.1.0" +yargs@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"