You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by be...@apache.org on 2015/09/25 22:13:56 UTC

fauxton commit: updated refs/heads/master to 010557e

Repository: couchdb-fauxton
Updated Branches:
  refs/heads/master 99dfd3f5c -> 010557ecf


Fix for editing View not showing correct content

There's a bug where if you edit one index, then edit a second,
you still see the Map Function from the first view. This PR does an
explicit reset every time you edit a view.


Project: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/commit/010557ec
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/tree/010557ec
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/diff/010557ec

Branch: refs/heads/master
Commit: 010557ecfbcddb95f7d507f22785a048bb2eebb0
Parents: 99dfd3f
Author: Ben Keen <be...@gmail.com>
Authored: Fri Sep 25 10:05:52 2015 -0700
Committer: Ben Keen <be...@gmail.com>
Committed: Fri Sep 25 13:13:38 2015 -0700

----------------------------------------------------------------------
 app/addons/documents/index-editor/actions.js    |  4 ++
 .../documents/index-editor/actiontypes.js       |  1 +
 app/addons/documents/index-editor/stores.js     |  8 +++
 app/addons/documents/routes-index-editor.js     |  2 +
 .../documents/tests/nightwatch/viewEdit.js      | 68 ++++++++++++++++++++
 5 files changed, 83 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/010557ec/app/addons/documents/index-editor/actions.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/index-editor/actions.js b/app/addons/documents/index-editor/actions.js
index b5250a0..294b02d 100644
--- a/app/addons/documents/index-editor/actions.js
+++ b/app/addons/documents/index-editor/actions.js
@@ -76,6 +76,10 @@ function (app, FauxtonAPI, Documents, ActionTypes, IndexResultsActions) {
       });
     },
 
+    clearIndex: function () {
+      FauxtonAPI.dispatch({ type: ActionTypes.CLEAR_INDEX });
+    },
+
     fetchDesignDocsBeforeEdit: function (options) {
       options.designDocs.fetch({reset: true}).then(function () {
         this.editIndex(options);

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/010557ec/app/addons/documents/index-editor/actiontypes.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/index-editor/actiontypes.js b/app/addons/documents/index-editor/actiontypes.js
index e13c57a..43fe021 100644
--- a/app/addons/documents/index-editor/actiontypes.js
+++ b/app/addons/documents/index-editor/actiontypes.js
@@ -12,6 +12,7 @@
 
 define([], function () {
   return {
+    CLEAR_INDEX: 'CLEAR_INDEX',
     EDIT_INDEX: 'EDIT_INDEX',
     EDIT_NEW_INDEX: 'EDIT_NEW_INDEX',
     SELECT_REDUCE_CHANGE: 'SELECT_REDUCE_CHANGE',

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/010557ec/app/addons/documents/index-editor/stores.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/index-editor/stores.js b/app/addons/documents/index-editor/stores.js
index 3f7bb7d..9615451 100644
--- a/app/addons/documents/index-editor/stores.js
+++ b/app/addons/documents/index-editor/stores.js
@@ -24,6 +24,10 @@ function (FauxtonAPI, ActionTypes) {
     defaultReduce: 'function (keys, values, rereduce) {\n  if (rereduce) {\n    return sum(values);\n  } else {\n    return values.length;\n  }\n}',
 
     initialize: function () {
+      this.reset();
+    },
+
+    reset: function () {
       this._designDocs = [];
       this._isLoading = true;
       this._view = { reduce: '', map: this.defaultMap };
@@ -175,6 +179,10 @@ function (FauxtonAPI, ActionTypes) {
 
     dispatch: function (action) {
       switch (action.type) {
+        case ActionTypes.CLEAR_INDEX:
+          this.reset();
+        break;
+
         case ActionTypes.EDIT_INDEX:
           this.editIndex(action.options);
           this.triggerChange();

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/010557ec/app/addons/documents/routes-index-editor.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/routes-index-editor.js b/app/addons/documents/routes-index-editor.js
index 450c4c1..52c5da5 100644
--- a/app/addons/documents/routes-index-editor.js
+++ b/app/addons/documents/routes-index-editor.js
@@ -93,6 +93,8 @@ function (app, FauxtonAPI, Helpers, BaseRoute, Documents, IndexEditorComponents,
         }
       });
 
+      ActionsIndexEditor.clearIndex();
+
       IndexResultsActions.newResultsList({
         collection: this.indexedDocs,
         isListDeletable: false,

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/010557ec/app/addons/documents/tests/nightwatch/viewEdit.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/tests/nightwatch/viewEdit.js b/app/addons/documents/tests/nightwatch/viewEdit.js
index 96cf409..ef9526f 100644
--- a/app/addons/documents/tests/nightwatch/viewEdit.js
+++ b/app/addons/documents/tests/nightwatch/viewEdit.js
@@ -75,6 +75,74 @@ module.exports = {
     .end();
   },
 
+  'Edits two design docs to confirm Map Editor correct on second': function (client) {
+    /*jshint multistr: true */
+    var waitTime = client.globals.maxWaitTime,
+      newDatabaseName = client.globals.testDatabaseName,
+      baseUrl = client.globals.test_settings.launch_url,
+      dropDownElement = '#header-dropdown-menu';
+
+    client
+      .createDatabase(newDatabaseName)
+      .populateDatabase(newDatabaseName)
+      .loginToGUI()
+
+      // create the first view
+      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
+      .waitForElementPresent(dropDownElement, waitTime, false)
+      .clickWhenVisible(dropDownElement + ' a')
+      .clickWhenVisible(dropDownElement + ' a[href*="new_view"]')
+      .waitForElementVisible('#new-ddoc', waitTime, false)
+      .setValue('#new-ddoc', 'view1-name')
+      .clearValue('#index-name')
+      .setValue('#index-name', 'view1')
+      .clickWhenVisible('#reduce-function-selector')
+      .keys(['\uE013', '\uE013', '\uE013', '\uE013', '\uE006'])
+      .execute('\
+        var editor = ace.edit("map-function");\
+        editor.getSession().setValue("function (doc) { emit(doc._id, 100); }");\
+      ')
+      .execute('$("#save-view")[0].scrollIntoView();')
+      .clickWhenVisible('#save-view')
+      .checkForDocumentCreated('_design/view1-name')
+      .waitForElementPresent('.btn.btn-danger.delete', waitTime, false)
+
+      // create the second view
+      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
+      .waitForElementPresent(dropDownElement, waitTime, false)
+      .clickWhenVisible(dropDownElement + ' a')
+      .clickWhenVisible(dropDownElement + ' a[href*="new_view"]')
+      .waitForElementVisible('#new-ddoc', waitTime, false)
+      .setValue('#new-ddoc', 'view2-name')
+      .clearValue('#index-name')
+      .setValue('#index-name', 'view2')
+      .clickWhenVisible('#reduce-function-selector')
+      .keys(['\uE013', '\uE013', '\uE013', '\uE013', '\uE006'])
+      .execute('\
+        var editor = ace.edit("map-function");\
+        editor.getSession().setValue("function (doc) { emit(doc._id, 200); }");\
+      ')
+      .execute('$("#save-view")[0].scrollIntoView();')
+      .clickWhenVisible('#save-view')
+      .checkForDocumentCreated('_design/view2-name')
+      .waitForElementPresent('.btn.btn-danger.delete', waitTime, false)
+
+      // go back to the all docs page to ensure a page reload when we return to the Edit View page
+      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
+      .waitForElementPresent(dropDownElement, waitTime, false)
+
+      // now redirect back to first view and confirm the fields are all populated properly
+      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/view1-name/_view/view1')
+      .waitForElementVisible('#save-view', waitTime, false)
+      .execute(function () {
+        var editor = window.ace.edit("map-function");
+        return editor.getSession().getValue();
+      }, [], function (resp) {
+        this.assert.equal(resp.value, 'function (doc) { emit(doc._id, 100); }');
+      })
+      .end();
+  },
+
   'Query Options are kept after a new reduce method is chosen': function (client) {
     /*jshint multistr: true */
     var waitTime = client.globals.maxWaitTime,