couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gar...@apache.org
Subject [couchdb-fauxton] branch master updated: Upgrade to enzyme 3.2 (#1039)
Date Tue, 02 Jan 2018 06:57:09 GMT
This is an automated email from the ASF dual-hosted git repository.

garren pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/couchdb-fauxton.git


The following commit(s) were added to refs/heads/master by this push:
     new c086bba  Upgrade to enzyme 3.2 (#1039)
c086bba is described below

commit c086bbaec190ad93142f60cce26d2a0e7154a23b
Author: Antonio Maranhao <30349380+Antonio-Maranhao@users.noreply.github.com>
AuthorDate: Tue Jan 2 01:57:06 2018 -0500

    Upgrade to enzyme 3.2 (#1039)
---
 app/addons/components/__tests__/beautify.test.js     |  2 +-
 app/addons/components/__tests__/zenMode.test.js      |  4 ++--
 app/addons/cors/__tests__/components.test.js         |  5 ++++-
 app/addons/documents/__tests__/changes.test.js       |  7 ++++++-
 app/addons/documents/__tests__/index-results.test.js | 13 ++++++-------
 .../documents/__tests__/results-toolbar.test.js      |  4 ++--
 .../__tests__/doc-editor.components.test.js          |  5 ++++-
 .../index-results/components/results/IndexResults.js |  3 ++-
 .../fauxton/navigation/__tests__/navbar-test.js      | 18 ++++++++++--------
 .../__tests__/permanentNotification.test.js          |  2 ++
 app/addons/permissions/__tests__/container-test.js   |  1 +
 jest-setup.js                                        | 20 +++++++++++++++++++-
 package.json                                         |  8 +++++---
 13 files changed, 64 insertions(+), 28 deletions(-)

diff --git a/app/addons/components/__tests__/beautify.test.js b/app/addons/components/__tests__/beautify.test.js
index e4b38e4..7b7b065 100644
--- a/app/addons/components/__tests__/beautify.test.js
+++ b/app/addons/components/__tests__/beautify.test.js
@@ -31,7 +31,7 @@ describe('Beautify', () => {
   it('should have button to beautify for single line code', () => {
     const badCode = '() => { console.log("hello"); }';
     beautifyEl = mount(<ReactComponents.Beautify code={badCode}/>);
-    assert.ok(beautifyEl.hasClass('beautify'));
+    assert.ok(beautifyEl.find('button').hasClass('beautify'));
   });
 
   it('on click beautifies code', () => {
diff --git a/app/addons/components/__tests__/zenMode.test.js b/app/addons/components/__tests__/zenMode.test.js
index 4bc059f..eb5c04b 100644
--- a/app/addons/components/__tests__/zenMode.test.js
+++ b/app/addons/components/__tests__/zenMode.test.js
@@ -36,12 +36,12 @@ describe('Zen Mode', () => {
 
   describe('Toggle theme', () => {
     it('defaults to dark theme', () => {
-      assert.ok(el.hasClass('zen-theme-dark'));
+      assert.ok(el.find('div.zen-theme-dark').exists());
     });
 
     it('switch to light theme on click', () => {
       el.find('.js-toggle-theme').simulate('click');
-      assert.ok(el.hasClass('zen-theme-light'));
+      assert.ok(el.find('div.zen-theme-light').exists());
       // reset
       el.find('.js-toggle-theme').simulate('click');
     });
diff --git a/app/addons/cors/__tests__/components.test.js b/app/addons/cors/__tests__/components.test.js
index d264ed9..7575e55 100644
--- a/app/addons/cors/__tests__/components.test.js
+++ b/app/addons/cors/__tests__/components.test.js
@@ -39,6 +39,7 @@ describe('CORS Components', () => {
         origins={['https://localhost']}
         saveCORS={sinon.stub()}
         showDeleteDomainConfirmation={sinon.stub()}
+        fetchAndLoadCORSOptions={sinon.stub()}
       />);
 
       wrapper.find('.enable-disable .btn').simulate('click');
@@ -55,6 +56,7 @@ describe('CORS Components', () => {
         origins={[]}
         saveCORS={sinon.stub()}
         showDeleteDomainConfirmation={sinon.stub()}
+        fetchAndLoadCORSOptions={sinon.stub()}
       />);
       wrapper.find('.enable-disable .btn').simulate('click');
       assert.ok(spy.notCalled);
@@ -80,12 +82,13 @@ describe('CORS Components', () => {
       const spy = sinon.stub(window, 'confirm');
       spy.returns(false);
 
-      const wrapper = shallow(<Views.CORSScreen
+      const wrapper = mount(<Views.CORSScreen
         corsEnabled={true}
         isAllOrigins={false}
         origins={[]}
         saveCORS={sinon.stub()}
         showDeleteDomainConfirmation={sinon.stub()}
+        fetchAndLoadCORSOptions={sinon.stub()}
       />);
       wrapper.find('input').at(0).simulate('change', { target: { checked: true, value: 'all'
} });
       assert.notOk(spy.calledOnce);
diff --git a/app/addons/documents/__tests__/changes.test.js b/app/addons/documents/__tests__/changes.test.js
index d1aa2aa..4b9df66 100644
--- a/app/addons/documents/__tests__/changes.test.js
+++ b/app/addons/documents/__tests__/changes.test.js
@@ -138,9 +138,9 @@ describe('ChangesController', () => {
 
   beforeEach(() => {
     Actions.initChanges({ databaseName: 'testDatabase' });
+    Actions.updateChanges(changesResponse);
     headerEl  = mount(<Changes.ChangesTabContent />);
     changesEl = mount(<Changes.ChangesController />);
-    Actions.updateChanges(changesResponse);
   });
 
   afterEach(() => {
@@ -149,6 +149,7 @@ describe('ChangesController', () => {
 
 
   it('should list the right number of changes', () => {
+    changesEl.update();
     assert.equal(results.length, changesEl.find('.change-box').length);
   });
 
@@ -162,6 +163,7 @@ describe('ChangesController', () => {
     submitBtn.simulate('submit');
 
     // confirm only the two deleted items shows up and the IDs maps to the deleted rows
+    changesEl.update();
     assert.equal(2, changesEl.find('.change-box').length);
     assert.equal('doc_3', changesEl.find('.js-doc-id').first().text());
     assert.equal('doc_5', changesEl.find('.js-doc-id').at(1).text());
@@ -176,6 +178,7 @@ describe('ChangesController', () => {
     submitBtn.simulate('submit');
 
     // confirm only one item shows up and the ID maps to what we'd expect
+    changesEl.update();
     assert.equal(1, changesEl.find('.change-box').length);
     assert.equal('doc_3', changesEl.find('.js-doc-id').first().text());
   });
@@ -197,6 +200,7 @@ describe('ChangesController', () => {
     submitBtn.simulate('submit');
 
     // confirm only one item shows up and that it's doc_5
+    changesEl.update();
     assert.equal(1, changesEl.find('.change-box').length);
     assert.equal('doc_5', changesEl.find('.js-doc-id').first().text());
   });
@@ -204,6 +208,7 @@ describe('ChangesController', () => {
   it('shows a No Docs Found message if no docs', () => {
     Stores.changesStore.reset();
     Actions.updateChanges({ last_seq: 124, results: [] });
+    changesEl.update();
     assert.ok(/There\sare\sno\sdocument\schanges/.test(changesEl.html()));
   });
 });
diff --git a/app/addons/documents/__tests__/index-results.test.js b/app/addons/documents/__tests__/index-results.test.js
index b2a5ab8..e62c5da 100644
--- a/app/addons/documents/__tests__/index-results.test.js
+++ b/app/addons/documents/__tests__/index-results.test.js
@@ -19,7 +19,7 @@ import sinon from 'sinon';
 describe('IndexResults', () => {
   it('calls fetchDocs on mount only when fetchAtStartup is set to true', () => {
     const spy = sinon.spy();
-    const wrapperFetch = shallow(<IndexResults
+    shallow(<IndexResults
       fetchParams={{}}
       selectedDocs={[]}
       queryOptionsParams={{}}
@@ -28,7 +28,6 @@ describe('IndexResults', () => {
       fetchAtStartup={true}
     />);
 
-    wrapperFetch.instance().componentDidMount();
     expect(spy.calledOnce).toBe(true);
 
     spy.reset();
@@ -102,7 +101,7 @@ describe('IndexResults', () => {
       fetchParams={{}}
       selectedDocs={[]}
       queryOptionsParams={{}}
-      fetchAllDocs={() => { }}
+      fetchDocs={() => { }}
       results={[]}
       fetchAtStartup={true}
     />);
@@ -117,7 +116,7 @@ describe('IndexResults', () => {
     }];
     const wrapper = shallow(<IndexResults
       selectedDocs={selectedDocs}
-      fetchAllDocs={() => { }}
+      fetchDocs={() => { }}
       results={[]}
       fetchAtStartup={true}
     />);
@@ -131,7 +130,7 @@ describe('IndexResults', () => {
     }];
     const wrapper = shallow(<IndexResults
       selectedDocs={selectedDocs}
-      fetchAllDocs={() => { }}
+      fetchDocs={() => { }}
       results={[]}
       fetchAtStartup={true}
     />);
@@ -143,7 +142,7 @@ describe('IndexResults', () => {
     const spy = sinon.spy();
     const wrapper = shallow(<IndexResults
       selectedDocs={[]}
-      fetchAllDocs={() => { }}
+      fetchDocs={() => { }}
       results={[]}
       selectDoc={spy}
       fetchAtStartup={true}
@@ -157,7 +156,7 @@ describe('IndexResults', () => {
     const spy = sinon.spy();
     const wrapper = shallow(<IndexResults
       selectedDocs={[]}
-      fetchAllDocs={() => { }}
+      fetchDocs={() => { }}
       results={[]}
       docs={[]}
       allDocumentsSelected={false}
diff --git a/app/addons/documents/__tests__/results-toolbar.test.js b/app/addons/documents/__tests__/results-toolbar.test.js
index 6c39b1c..255b87a 100644
--- a/app/addons/documents/__tests__/results-toolbar.test.js
+++ b/app/addons/documents/__tests__/results-toolbar.test.js
@@ -39,14 +39,14 @@ describe('Results Toolbar', () => {
   it('renders all content when there are results and they are deletable', () => {
     const wrapper = mount(<ResultsToolBar hasResults={true} isListDeletable={true} {...restProps}/>);
     expect(wrapper.find('.bulk-action-component').length).toBe(1);
-    expect(wrapper.find('.two-sides-toggle-button').length).toBe(1);
+    expect(wrapper.find('div.two-sides-toggle-button').length).toBe(1);
     expect(wrapper.find('.document-result-screen__toolbar-create-btn').length).toBe(1);
   });
 
   it('does not render bulk action component when list is not deletable', () => {
     const wrapper = mount(<ResultsToolBar hasResults={true} isListDeletable={false} {...restProps}/>);
     expect(wrapper.find('.bulk-action-component').length).toBe(0);
-    expect(wrapper.find('.two-sides-toggle-button').length).toBe(1);
+    expect(wrapper.find('div.two-sides-toggle-button').length).toBe(1);
     expect(wrapper.find('.document-result-screen__toolbar-create-btn').length).toBe(1);
   });
 });
diff --git a/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js b/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js
index a49110e..bc72537 100644
--- a/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js
+++ b/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js
@@ -73,6 +73,7 @@ describe('DocEditorController', () => {
       }
     });
 
+    el.update();
     assert.equal(el.find('.loading-lines').length, 0);
     assert.equal(el.find('.icon-circle-arrow-up').length, 0);
     assert.equal(el.find('.icon-repeat').length, 0);
@@ -102,6 +103,8 @@ describe('DocEditorController', () => {
         doc: doc
       }
     });
+
+    el.update();
     assert.equal(el.find('.view-attachments-section').length, 1);
   });
 
@@ -188,7 +191,7 @@ describe("AttachmentsPanelButton", () => {
 
   it('shows up after loading', () => {
     const el = mount(<Components.AttachmentsPanelButton isLoading={false} doc={doc} />);
-    assert.equal(el.find('.panel-button').length, 1);
+    assert.equal(el.find('button.panel-button').length, 1);
   });
 });
 
diff --git a/app/addons/documents/index-results/components/results/IndexResults.js b/app/addons/documents/index-results/components/results/IndexResults.js
index be19f2a..90f48c3 100644
--- a/app/addons/documents/index-results/components/results/IndexResults.js
+++ b/app/addons/documents/index-results/components/results/IndexResults.js
@@ -114,5 +114,6 @@ export default class IndexResults extends React.Component {
 }
 
 IndexResults.propTypes = {
-  fetchAtStartup: PropTypes.bool.isRequired
+  fetchAtStartup: PropTypes.bool.isRequired,
+  fetchDocs: PropTypes.func.isRequired
 };
diff --git a/app/addons/fauxton/navigation/__tests__/navbar-test.js b/app/addons/fauxton/navigation/__tests__/navbar-test.js
index cda36b2..769b945 100644
--- a/app/addons/fauxton/navigation/__tests__/navbar-test.js
+++ b/app/addons/fauxton/navigation/__tests__/navbar-test.js
@@ -22,22 +22,24 @@ describe('Navigation Bar', () => {
   };
 
   it('is displayed by default', () => {
-    const NavBar = mount(<NavBarContainer />);
-    expect(NavBar.find('.faux-navbar').length).toBe(1);
+    const navbar = mount(<NavBarContainer />);
+    expect(navbar.find('.faux-navbar').length).toBe(1);
   });
 
   it('is dynamically displayed by isNavBarVisible', () => {
-    const NavBar = mount(<NavBarContainer />);
+    const navbar = mount(<NavBarContainer />);
 
     FauxtonAPI.dispatch({
       type: ActionTypes.NAVBAR_HIDE
     });
-    expect(NavBar.find('.faux-navbar').length).toBe(0);
+    navbar.update();
+    expect(navbar.find('.faux-navbar').length).toBe(0);
 
     FauxtonAPI.dispatch({
       type: ActionTypes.NAVBAR_SHOW
     });
-    expect(NavBar.find('.faux-navbar').length).toBe(1);
+    navbar.update();
+    expect(navbar.find('.faux-navbar').length).toBe(1);
   });
 
   it('can display items with icon badge', () => {
@@ -58,9 +60,9 @@ describe('Navigation Bar', () => {
         icon: "fonticon-database"
       }
     });
-    const NavBar = mount(<NavBarContainer />);
-    expect(NavBar.find('div[data-nav-name="WithoutBadge"] i.faux-navbar__icon-badge').length,
0);
-    expect(NavBar.find('div[data-nav-name="WithBadge"] i.faux-navbar__icon-badge').length,
1);
+    const navbar = mount(<NavBarContainer />);
+    expect(navbar.find('div[data-nav-name="WithoutBadge"] i.faux-navbar__icon-badge').length,
0);
+    expect(navbar.find('div[data-nav-name="WithBadge"] i.faux-navbar__icon-badge').length,
1);
   });
 
 });
diff --git a/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js b/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js
index f22dbc8..2354d0e 100644
--- a/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js
+++ b/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js
@@ -39,12 +39,14 @@ describe('PermanentNotification', () => {
       }
     });
 
+    wrapper.update();
     expect(wrapper.find('.perma-warning__content').html()).toMatch(/Hello World!/);
 
     FauxtonAPI.dispatch({
       type: ActionTypes.HIDE_PERMANENT_NOTIFICATION
     });
 
+    wrapper.update();
     expect(wrapper.find('.perma-warning__content').length).toBe(0);
   });
 });
diff --git a/app/addons/permissions/__tests__/container-test.js b/app/addons/permissions/__tests__/container-test.js
index 1f9a0fd..83aaf0b 100644
--- a/app/addons/permissions/__tests__/container-test.js
+++ b/app/addons/permissions/__tests__/container-test.js
@@ -49,6 +49,7 @@ describe('Permissions Container', () => {
       })
     );
 
+    wrapper.update();
     const item = wrapper
       .find('.permissions__admins .permissions__entry');
 
diff --git a/jest-setup.js b/jest-setup.js
index 204ff71..60bd5a0 100644
--- a/jest-setup.js
+++ b/jest-setup.js
@@ -19,9 +19,27 @@ window.$ = window.jQuery = require('jquery');
 window._ = require('lodash');
 window.Backbone = require('backbone');
 
+// URL.createObjectURL() and Worker are referenced by brace so we add mock objects to prevent
+// long warning messages from being printed while running the tests.
+if (!window.URL) {
+  window.URL = {};
+}
+if (!window.URL.createObjectURL) {
+  window.URL.createObjectURL = function() {
+    return 'http://localhost';
+  };
+}
+window.Worker = function FakeWorker() {
+  this.postMessage = function () { };
+  this.onmessage = undefined;
+};
+
 Object.defineProperty(window.location, 'origin', {
   writable: true,
   value: 'http://dev:8000'
 });
 
-
+// Setup enzyme's react adapter
+const Enzyme = require('enzyme');
+const EnzymeAdapter = require('enzyme-adapter-react-15');
+Enzyme.configure({ adapter: new EnzymeAdapter() });
diff --git a/package.json b/package.json
index d986160..96eb6b5 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,8 @@
   "devDependencies": {
     "babel-jest": "^18.0.0",
     "bootstrap": "^3.3.7",
-    "enzyme": "^2.7.1",
+    "enzyme": "^3.2.0",
+    "enzyme-adapter-react-15": "^1.0.5",
     "es5-shim": "4.5.4",
     "fetch-mock": "^5.9.3",
     "jest": "^18.1.0",
@@ -29,7 +30,7 @@
     "react-addons-test-utils": "~15.4.2",
     "redux-devtools": "^3.3.1",
     "redux-mock-store": "^1.2.1",
-    "sinon": "git+https://github.com/sinonjs/sinon.git"
+    "sinon": "^4.1.3"
   },
   "dependencies": {
     "async": "~0.2.6",
@@ -91,12 +92,13 @@
     "prop-types": "^15.6.0",
     "react": "~15.6.2",
     "react-bootstrap": "^0.31.3",
-    "react-dom": "~15.4.1",
+    "react-dom": "~15.6.2",
     "react-motion": "^0.5.0",
     "react-overlays": "^0.7.0",
     "react-range": "0.0.7",
     "react-redux": "^5.0.0",
     "react-select": "1.0.0-rc.2",
+    "react-test-renderer": "^15.6.2",
     "redux": "^3.6.0",
     "redux-thunk": "^2.1.0",
     "request": "^2.54.0",

-- 
To stop receiving notification emails like this one, please contact
['"commits@couchdb.apache.org" <commits@couchdb.apache.org>'].

Mime
View raw message