Repository: incubator-zeppelin Updated Branches: refs/heads/master be8f47628 -> 98c00eb7d
Fix notebook folder structure name match bug ### What is this PR for? Current regex match rule for notebook folder takes not only `/` as delimiter but also `[` and `]`. ### What type of PR is it? Bug Fix ### How should this be tested? Try to create notebook that contains `[` or `]` in name and see if the folder structure is correct. ### Screenshots (if appropriate) With notebook name `/A/B[C]D` **Before**  **After**  ### Questions: * Does the licenses files need update? No * Is there breaking changes for older versions? No * Does this needs documentation? No Author: Mina Lee <mina...@nflabs.com> Closes #883 from minahlee/fix/notebookFolderBug and squashes the following commits: 51e4bae [Mina Lee] Add test case for notebook folder structure f83adf4 [Mina Lee] Fix notebook folder structure name match bug Project: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/commit/98c00eb7 Tree: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/tree/98c00eb7 Diff: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/diff/98c00eb7 Branch: refs/heads/master Commit: 98c00eb7da48a0a56c594706470add2c60c48d8d Parents: be8f476 Author: Mina Lee <mina...@nflabs.com> Authored: Fri May 13 15:31:18 2016 +0900 Committer: Lee moon soo <m...@apache.org> Committed: Wed May 18 14:32:40 2016 -0700 ---------------------------------------------------------------------- .../notebookList.datafactory.js | 2 +- zeppelin-web/test/spec/factory/notebookList.js | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/98c00eb7/zeppelin-web/src/components/notebookListDataFactory/notebookList.datafactory.js ---------------------------------------------------------------------- diff --git a/zeppelin-web/src/components/notebookListDataFactory/notebookList.datafactory.js b/zeppelin-web/src/components/notebookListDataFactory/notebookList.datafactory.js index 43fd061..91aa7be 100644 --- a/zeppelin-web/src/components/notebookListDataFactory/notebookList.datafactory.js +++ b/zeppelin-web/src/components/notebookListDataFactory/notebookList.datafactory.js @@ -27,7 +27,7 @@ angular.module('zeppelinWebApp').factory('notebookListDataFactory', function() { notes.root = {children: []}; _.reduce(notesList, function(root, note) { var noteName = note.name || note.id; - var nodes = noteName.match(/([^\\\][^\/]|\\\/)+/g); + var nodes = noteName.match(/([^\/][^\/]*)/g); // recursively add nodes addNode(root, nodes, note.id); http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/98c00eb7/zeppelin-web/test/spec/factory/notebookList.js ---------------------------------------------------------------------- diff --git a/zeppelin-web/test/spec/factory/notebookList.js b/zeppelin-web/test/spec/factory/notebookList.js index ec67866..10c6981 100644 --- a/zeppelin-web/test/spec/factory/notebookList.js +++ b/zeppelin-web/test/spec/factory/notebookList.js @@ -16,17 +16,18 @@ describe('Factory: NotebookList', function() { var notesList = [ {name: 'A', id: '000001'}, {name: 'B', id: '000002'}, - {id: '000003'}, // notebook without name + {id: '000003'}, // notebook without name {name: '/C/CA', id: '000004'}, {name: '/C/CB', id: '000005'}, {name: '/C/CB/CBA', id: '000006'}, // same name with a dir - {name: '/C/CB/CBA', id: '000007'}, // same name with another note - {name: 'C///CB//CBB', id: '000008'} + {name: '/C/CB/CBA', id: '000007'}, // same name with another note + {name: 'C///CB//CBB', id: '000008'}, + {name: 'D/D[A/DA]B', id:'000009'} // check if '[' and ']' considered as folder seperator ]; notebookList.setNotes(notesList); var flatList = notebookList.flatList; - expect(flatList.length).toBe(8); + expect(flatList.length).toBe(9); expect(flatList[0].name).toBe('A'); expect(flatList[0].id).toBe('000001'); expect(flatList[1].name).toBe('B'); @@ -36,9 +37,10 @@ describe('Factory: NotebookList', function() { expect(flatList[5].name).toBe('/C/CB/CBA'); expect(flatList[6].name).toBe('/C/CB/CBA'); expect(flatList[7].name).toBe('C///CB//CBB'); + expect(flatList[8].name).toBe('D/D[A/DA]B'); var folderList = notebookList.root.children; - expect(folderList.length).toBe(4); + expect(folderList.length).toBe(5); expect(folderList[0].name).toBe('A'); expect(folderList[0].id).toBe('000001'); expect(folderList[1].name).toBe('B'); @@ -64,6 +66,14 @@ describe('Factory: NotebookList', function() { expect(folderList[3].children[2].children[2].name).toBe('CBB'); expect(folderList[3].children[2].children[2].id).toBe('000008'); expect(folderList[3].children[2].children[2].children).toBeUndefined(); + expect(folderList[4].name).toBe('D'); + expect(folderList[4].id).toBeUndefined(); + expect(folderList[4].children.length).toBe(1); + expect(folderList[4].children[0].name).toBe('D[A'); + expect(folderList[4].children[0].id).toBeUndefined(); + expect(folderList[4].children[0].children[0].name).toBe('DA]B'); + expect(folderList[4].children[0].children[0].id).toBe('000009'); + expect(folderList[4].children[0].children[0].children).toBeUndefined(); }); });