From f5ac7539bcca738ccc0eb86d3d1e2b0f6e9117a2 Mon Sep 17 00:00:00 2001 From: Joey Payne Date: Fri, 4 Mar 2016 20:54:19 -0700 Subject: [PATCH] Add jest unit tests for adding and deleting notebooks --- app/components/LibraryNav.jsx | 51 +++++++---- app/components/__tests__/LibraryNav-test.jsx | 90 ++++++++++++++++++++ 2 files changed, 125 insertions(+), 16 deletions(-) create mode 100644 app/components/__tests__/LibraryNav-test.jsx diff --git a/app/components/LibraryNav.jsx b/app/components/LibraryNav.jsx index 28b1e15..55aecb8 100644 --- a/app/components/LibraryNav.jsx +++ b/app/components/LibraryNav.jsx @@ -192,7 +192,7 @@ export default class LibraryNav extends React.Component { var nbUuid = uuid.v4().toUpperCase() var nbPath = utils.getNotebookPathFromUUID(nbUuid) - var nb = { + var notebook = { 'state': 'editing', 'title': '', 'uuid': nbUuid, @@ -201,20 +201,17 @@ export default class LibraryNav extends React.Component { } mkdirp(nbPath, (err) => { - if (callback){ - callback(nb, err) - } if(err){ console.log('There was an error creating the directory '+notePath) console.log(err) } else{ - this.createNotebookMeta(notebook) + this.createNotebookMeta(notebook, callback) } }) }; - createNotebookMeta = (notebook) => { + createNotebookMeta = (notebook, callback) => { var notePath = utils.getNotebookPath(notebook) var meta = { 'name': notebook.title, @@ -225,6 +222,18 @@ export default class LibraryNav extends React.Component { if(err){ console.log(err) } + + var nbs = this.state.notebooks + nbs.splice(0, 0, notebook) + + this.setState({notebooks: nbs}, () => { + if(this.refs['textField0']){ + this.refs['textField0'].focus() + } + if(callback){ + callback(notebook, err) + } + }) }) }; @@ -249,13 +258,9 @@ export default class LibraryNav extends React.Component { } }; - addNotebookTapped = () => { - this.createNewNotebook((nb, err) => { - var nbs = this.state.notebooks - nbs.splice(0, 0, nb) - this.setState({notebooks: nbs}, () => { - this.refs['textField0'].focus() - }) + addNotebookTapped = (callback) => { + this.createNewNotebook(callback, (nb, err) => { + }) }; @@ -284,13 +289,21 @@ export default class LibraryNav extends React.Component { this.props.closeContextMenu() } - deleteTapped = (i) => { + deleteTapped = (i, callback) => { var nbs = this.state.notebooks var nb = nbs.splice(i, 1)[0] - rmdir(nb.path, (err)=>{if(err){console.log(err)}}) + rmdir(nb.path, (err)=>{ + if(err){ + console.log(err) + } + this.setState({notebooks: nbs}, ()=>{ + if(callback){ + callback(nb, err) + } + }) + }) - this.setState({notebooks: nbs}) this.props.closeContextMenu() } @@ -402,6 +415,7 @@ export default class LibraryNav extends React.Component { {this.state.navItems.map((item, i) => { return } @@ -419,6 +433,7 @@ export default class LibraryNav extends React.Component {
NoteBooks
{} +}; + diff --git a/app/components/__tests__/LibraryNav-test.jsx b/app/components/__tests__/LibraryNav-test.jsx new file mode 100644 index 0000000..eb0cc65 --- /dev/null +++ b/app/components/__tests__/LibraryNav-test.jsx @@ -0,0 +1,90 @@ +jest.autoMockOff() + +import React from 'react' +import ReactDOM from 'react-dom' +import TestUtils from 'react-addons-test-utils' + +import * as utils from '../../utils' +utils.APP_NAME = 'JestTest' +import path from 'path' + +import fs from 'fs' + +const injectTapEventPlugin = require("react-tap-event-plugin") +injectTapEventPlugin() + +const LibraryNav = require('../LibraryNav').default + +function tap(element){ + var dom = ReactDOM.findDOMNode(element).firstChild + TestUtils.Simulate.touchTap(dom) +} + +describe('LibraryNav', () => { + + beforeEach(() => { + }) + + it('test index select', () => { + var libraryNav = TestUtils.renderIntoDocument( + + ) + expect(libraryNav.state.navItems.length).toEqual(5) + + var libraryNavList = libraryNav.refs.mainList + + var entriesItem = libraryNav.refs.Entries + tap(entriesItem) + expect(libraryNavList.state.selectedIndex).toEqual(0) + + var allNotesItem = libraryNav.refs['All Notes'] + tap(allNotesItem) + expect(libraryNavList.state.selectedIndex).toEqual(4) + }) + + it('test add notebook', (done) => { + + var libraryNav = TestUtils.renderIntoDocument( + + ) + + var initialLen = libraryNav.state.notebooks.length + + var callback = (notebook) => { + var afterLen = libraryNav.state.notebooks.length + + expect(afterLen).toBeGreaterThan(initialLen) + + var nbExists = fs.existsSync(notebook.path) + var nbMetaExists = fs.existsSync(path.join(notebook.path, 'meta.json')) + expect(nbExists).toEqual(true) + + expect(nbMetaExists).toEqual(true) + + done() + } + libraryNav.addNotebookTapped(callback) + }) + + it('test delete notebook', (done) => { + var libraryNav = TestUtils.renderIntoDocument( + + ) + + var initialLen = libraryNav.state.notebooks.length + + var callback = (notebook) => { + var afterLen = libraryNav.state.notebooks.length + + expect(initialLen).toBeGreaterThan(afterLen) + + var nbExists = fs.existsSync(notebook.path) + expect(nbExists).toEqual(false) + + done() + } + + libraryNav.deleteTapped(0, callback) + + }) +})