From eac53a58b41853c6f12767bb7a024d1491f5fe06 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Wed, 14 Dec 2016 13:22:01 -0700 Subject: [PATCH] add jsdom. tests pass --- client/coral-plugin-history/CommentHistory.js | 18 ++-- package.json | 6 +- .../coral-plugin-history/Comment.spec.js | 15 ++-- .../CommentHistory.spec.js | 24 ++++++ tests/helpers/browser.js | 48 +++++++++++ tests/helpers/index.test.html | 84 +++++++++++++++++++ 6 files changed, 177 insertions(+), 18 deletions(-) create mode 100644 tests/client/coral-plugin-history/CommentHistory.spec.js create mode 100644 tests/helpers/browser.js create mode 100644 tests/helpers/index.test.html diff --git a/client/coral-plugin-history/CommentHistory.js b/client/coral-plugin-history/CommentHistory.js index b937e87e9..44d06bc91 100644 --- a/client/coral-plugin-history/CommentHistory.js +++ b/client/coral-plugin-history/CommentHistory.js @@ -4,15 +4,17 @@ import styles from './CommentHistory.css'; const CommentHistory = props => { return ( -
+

All Comments

- {props.comments.map((comment, i) => { - const asset = props.assets.find(asset => asset.id === comment.asset_id); - return ; - })} +
+ {props.comments.map((comment, i) => { + const asset = props.assets.find(asset => asset.id === comment.asset_id); + return ; + })} +
); }; diff --git a/package.json b/package.json index 74d4eef10..4ec24a27a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build-watch": "NODE_ENV=development ./node_modules/.bin/webpack --config webpack.config.dev.js --watch", "lint": "./node_modules/.bin/eslint bin/* .", "lint-fix": "./node_modules/.bin/eslint bin/* . --fix", - "test": "NODE_ENV=test ./node_modules/.bin/mocha --compilers js:babel-core/register --recursive tests", + "test": "NODE_ENV=test ./node_modules/.bin/mocha --compilers js:babel-core/register tests/helpers/*.js --require ignore-styles --recursive tests", "test-watch": "NODE_ENV=test ./node_modules/.bin/mocha --compilers js:babel-core/register --recursive -w tests", "pree2e": "NODE_ENV=test ./scripts/pree2e.sh", "e2e": "NODE_ENV=test ./node_modules/.bin/nightwatch", @@ -106,8 +106,10 @@ "exports-loader": "^0.6.3", "fetch-mock": "^5.5.0", "hammerjs": "^2.0.8", + "ignore-styles": "^5.0.1", "immutable": "^3.8.1", "imports-loader": "^0.6.5", + "jsdom": "^9.8.3", "json-loader": "^0.5.4", "keymaster": "^1.6.2", "material-design-lite": "^1.2.1", @@ -122,7 +124,7 @@ "precss": "^1.4.0", "pym.js": "^1.1.1", "react": "15.3.2", - "react-addons-test-utils": "^15.3.1", + "react-addons-test-utils": "15.3.2", "react-dom": "15.3.2", "react-linkify": "^0.1.3", "react-mdl": "^1.7.2", diff --git a/tests/client/coral-plugin-history/Comment.spec.js b/tests/client/coral-plugin-history/Comment.spec.js index 3f871cf0a..7d49630d6 100644 --- a/tests/client/coral-plugin-history/Comment.spec.js +++ b/tests/client/coral-plugin-history/Comment.spec.js @@ -1,26 +1,25 @@ import React from 'react'; import {shallow, mount} from 'enzyme'; import {expect} from 'chai'; -import Comment from '../Comment'; +import Comment from '../../../client/coral-plugin-history/Comment'; describe('coral-plugin-history/Comment', () => { let render; + const comment = {body: 'this is a comment'}; + const asset = {url: 'https://google.com'}; + beforeEach(() => { - - const comment = {body: 'this is a comment'}; - const asset = {url: 'https://google.com'}; - - render = shallow(); + render = shallow(); }); it('should render the provided comment body', () => { - const wrapper = mount(); + const wrapper = mount(); expect(wrapper.find('.myCommentBody')).to.have.length(1); expect(wrapper.find('.myCommentBody').text()).to.equal('this is a comment'); }); it('should render the asset url as a link', () => { - const wrapper = mount(); + const wrapper = mount(); expect(wrapper.find('.myCommentAnchor')).to.have.length(1); expect(wrapper.find('.myCommentAnchor').text()).to.equal('https://google.com'); }); diff --git a/tests/client/coral-plugin-history/CommentHistory.spec.js b/tests/client/coral-plugin-history/CommentHistory.spec.js new file mode 100644 index 000000000..f34361985 --- /dev/null +++ b/tests/client/coral-plugin-history/CommentHistory.spec.js @@ -0,0 +1,24 @@ +import React from 'react'; +import {shallow, mount} from 'enzyme'; +import {expect} from 'chai'; +import CommentHistory from '../../../client/coral-plugin-history/CommentHistory'; + +describe('coral-plugin-history/CommentHistory', () => { + let render; + const comments = [{"body":"a comment or something","status_history":[{"type":"premod","created_at":"2016-12-09T01:40:53.327Z","assigned_by":null},{"created_at":"2016-12-09T22:52:44.888Z","type":"accepted","assigned_by":"92256159-1164-4f66-9970-c7f23de7e461"}],"asset_id":"96fddf96-7c83-4008-80ad-50091997d006","created_at":"2016-12-09T01:40:53.360Z","author_id":"92256159-1164-4f66-9970-c7f23de7e461","status":"accepted","__v":0,"updated_at":"2016-12-09T22:52:44.893Z","id":"3962c2ea-4ec4-42e4-b9bd-c571ff30f56b"},{"body":"another comment","status_history":[{"type":"premod","created_at":"2016-12-09T22:53:43.148Z","assigned_by":null}],"asset_id":"96fddf96-7c83-4008-80ad-50091997d006","created_at":"2016-12-09T22:53:43.158Z","author_id":"92256159-1164-4f66-9970-c7f23de7e461","status":"premod","__v":0,"updated_at":"2016-12-09T22:53:43.158Z","id":"b51e27af-bcfd-4932-91be-e3f01a4802e6"},{"body":"can I comment?","status_history":[{"type":"premod","created_at":"2016-12-13T23:23:47.123Z","assigned_by":null},{"created_at":"2016-12-13T23:23:58.487Z","type":"accepted","assigned_by":"92256159-1164-4f66-9970-c7f23de7e461"}],"asset_id":"cef81015-1b53-4d70-b9af-6eca680f22fc","created_at":"2016-12-13T23:23:47.131Z","author_id":"92256159-1164-4f66-9970-c7f23de7e461","status":"accepted","__v":0,"updated_at":"2016-12-13T23:23:58.493Z","id":"dc9d7be1-b911-4dc3-8e1e-400e8b8d110e"},{"body":"pre-mod comment","status_history":[{"type":"premod","created_at":"2016-12-08T21:34:56.994Z","assigned_by":null},{"created_at":"2016-12-08T21:38:04.961Z","type":"rejected","assigned_by":"92256159-1164-4f66-9970-c7f23de7e461"}],"asset_id":"96fddf96-7c83-4008-80ad-50091997d006","created_at":"2016-12-08T21:34:56.997Z","author_id":"92256159-1164-4f66-9970-c7f23de7e461","status":"rejected","__v":0,"updated_at":"2016-12-08T21:38:04.965Z","id":"6f02af16-a8f8-4ead-80ea-0d48824eb74d"},{"body":"a flagged commetn","status_history":[{"type":"premod","created_at":"2016-12-08T21:38:26.342Z","assigned_by":null},{"created_at":"2016-12-09T23:47:27.009Z","type":"accepted","assigned_by":"92256159-1164-4f66-9970-c7f23de7e461"}],"asset_id":"96fddf96-7c83-4008-80ad-50091997d006","created_at":"2016-12-08T21:38:26.344Z","author_id":"92256159-1164-4f66-9970-c7f23de7e461","status":"accepted","__v":0,"updated_at":"2016-12-09T23:47:27.018Z","id":"784c5f91-36b9-4bda-b4ca-a114cef2c9f0"},{"body":"a post mod comment","status_history":[{"type":"premod","created_at":"2016-12-08T22:19:05.870Z","assigned_by":null},{"created_at":"2016-12-09T23:26:41.427Z","type":"accepted","assigned_by":"92256159-1164-4f66-9970-c7f23de7e461"}],"asset_id":"96fddf96-7c83-4008-80ad-50091997d006","created_at":"2016-12-08T22:19:05.874Z","author_id":"92256159-1164-4f66-9970-c7f23de7e461","status":"accepted","__v":0,"updated_at":"2016-12-09T23:26:41.450Z","id":"e8b86039-f850-4e53-bd9d-f8c9186a9637"},{"body":"an actual post-mod comment here","status_history":[],"asset_id":"96fddf96-7c83-4008-80ad-50091997d006","created_at":"2016-12-08T22:20:11.147Z","author_id":"92256159-1164-4f66-9970-c7f23de7e461","status":null,"__v":0,"updated_at":"2016-12-08T22:20:11.147Z","id":"cff1a318-50c6-431e-9a63-de7a7b7136bf"}]; + const assets = [{"settings":null,"created_at":"2016-12-06T21:36:09.302Z","url":"localhost:3000/","scraped":null,"status":"open","updated_at":"2016-12-08T02:11:15.943Z","_id":"58472f499e775a38f23d5da0","type":"article","closedMessage":null,"id":"7302e637-f884-47c0-9723-02cc10a18617","closedAt":null},{"settings":null,"created_at":"2016-12-07T02:25:31.983Z","url":"http://localhost:3000/","scraped":null,"status":"open","updated_at":"2016-12-13T22:58:36.061Z","_id":"5847731b9e775a38f23d5da1","type":"article","closedMessage":null,"id":"96fddf96-7c83-4008-80ad-50091997d006","closedAt":null},{"settings":null,"created_at":"2016-12-12T19:04:05.770Z","url":"http://localhost:3000/embed/stream","scraped":null,"updated_at":"2016-12-14T20:13:21.934Z","_id":"584ef4a59e775a38f23d5e86","type":"article","closedMessage":null,"id":"cef81015-1b53-4d70-b9af-6eca680f22fc","closedAt":null}]; + + beforeEach(() => { + render = shallow(); + }); + + it('should render Comments as children when given comments and assets', () => { + const wrapper = mount(); + expect(wrapper.find('.commentHistory__list').children()).to.have.length(7); + }); + + it('should render with styles', () => { + expect(render.props().style).to.be.defined; + }); +}); + diff --git a/tests/helpers/browser.js b/tests/helpers/browser.js new file mode 100644 index 000000000..7d6a4f36a --- /dev/null +++ b/tests/helpers/browser.js @@ -0,0 +1,48 @@ +var jsdom = require('jsdom').jsdom; +var fs = require('fs'); + +// Storage Mock +function storageMock() { + var storage = {}; + + return { + setItem: function(key, value) { + storage[key] = value || ''; + }, + getItem: function(key) { + return storage[key] || null; + }, + removeItem: function(key) { + delete storage[key]; + }, + get length() { + return Object.keys(storage).length; + }, + key: function(i) { + var keys = Object.keys(storage); + return keys[i] || null; + } + }; +} + +global.document = jsdom(fs.readFileSync(__dirname + '/index.test.html')); +global.window = document.defaultView; + +// these lines are required for react-mdl +global.window.CustomEvent = undefined; +require('react-mdl/extra/material'); + +global.Element = global.window.Element; + +global.navigator = { + userAgent: 'node.js' +}; + +global.documentRef = document; +global.localStorage = {}; +global.sessionStorage = storageMock(); +global.XMLHttpRequest = storageMock(); + +global.Headers = function(headers) { + return headers; +}; diff --git a/tests/helpers/index.test.html b/tests/helpers/index.test.html new file mode 100644 index 000000000..4619df971 --- /dev/null +++ b/tests/helpers/index.test.html @@ -0,0 +1,84 @@ + + + + + + + Coral - (Beta) + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +