You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2015/08/19 00:18:18 UTC

[1/5] allura git commit: [#7923] ticket:827 Make wiki "Create Page" and "Subscribe/Unsubscribe" work from sidebar on admin pages

Repository: allura
Updated Branches:
  refs/heads/master 6aa2289f3 -> 644a2988f


[#7923] ticket:827 Make wiki "Create Page" and "Subscribe/Unsubscribe" work from sidebar on admin pages


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/ac014139
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/ac014139
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/ac014139

Branch: refs/heads/master
Commit: ac0141399af95ffe552dba5076a3495c842b590f
Parents: 82a08dd
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Aug 14 12:04:45 2015 +0300
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Tue Aug 18 22:17:59 2015 +0000

----------------------------------------------------------------------
 Allura/allura/app.py                            |  7 +++++
 .../templates/jinja_master/sidebar_menu.html    |  5 ++++
 .../templates/wiki/create_page_widget.html      | 25 ++++++++++++++++++
 ForgeWiki/forgewiki/templates/wiki/master.html  |  9 -------
 .../forgewiki/templates/wiki/page_view.html     | 19 --------------
 .../templates/wiki/wiki_subscribe_form.html     | 27 ++++++++++++++++++++
 ForgeWiki/forgewiki/widgets/wiki.py             | 16 ++++++++++++
 ForgeWiki/forgewiki/wiki_main.py                | 17 ++++++++----
 8 files changed, 92 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/ac014139/Allura/allura/app.py
----------------------------------------------------------------------
diff --git a/Allura/allura/app.py b/Allura/allura/app.py
index 2d748c5..46770af 100644
--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -581,6 +581,13 @@ class Application(object):
         """
         return ""
 
+    def sidebar_menu_widgets(self):
+        """Return widgets needed by the sidebar menu of this Application.
+
+        :return: a list of widgets
+        """
+        return []
+
     @LazyProperty
     def _webhooks(self):
         """A list of webhooks that can be triggered by this app.

http://git-wip-us.apache.org/repos/asf/allura/blob/ac014139/Allura/allura/templates/jinja_master/sidebar_menu.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/jinja_master/sidebar_menu.html b/Allura/allura/templates/jinja_master/sidebar_menu.html
index df06d18..af70a48 100644
--- a/Allura/allura/templates/jinja_master/sidebar_menu.html
+++ b/Allura/allura/templates/jinja_master/sidebar_menu.html
@@ -89,6 +89,11 @@
       </ul>
       {% do ul_active.append(False) %}
     {% endif %}
+    {% if c.app and c.app.sidebar_menu_widgets() %}
+      {% for w in c.app.sidebar_menu_widgets() %}
+        {{ w.display() }}
+      {% endfor %}
+    {% endif %}
     {% if c.app and c.app.sidebar_menu_js() %}
       <script>
         {{c.app.sidebar_menu_js()|safe}}

http://git-wip-us.apache.org/repos/asf/allura/blob/ac014139/ForgeWiki/forgewiki/templates/wiki/create_page_widget.html
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/templates/wiki/create_page_widget.html b/ForgeWiki/forgewiki/templates/wiki/create_page_widget.html
new file mode 100644
index 0000000..43ab051
--- /dev/null
+++ b/ForgeWiki/forgewiki/templates/wiki/create_page_widget.html
@@ -0,0 +1,25 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+<h1>Add a Wiki Page</h1>
+<form class="grid-10">
+    <label class="grid-2">Name</label>
+    <div class="grid-7"><input type="text" name="name"></div>
+    <label class="grid-2">&nbsp;</label>
+    <div class="grid-7"><input type="submit" value="Create page"></div>
+</form>

http://git-wip-us.apache.org/repos/asf/allura/blob/ac014139/ForgeWiki/forgewiki/templates/wiki/master.html
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/templates/wiki/master.html b/ForgeWiki/forgewiki/templates/wiki/master.html
index 529c483..9f0ada1 100644
--- a/ForgeWiki/forgewiki/templates/wiki/master.html
+++ b/ForgeWiki/forgewiki/templates/wiki/master.html
@@ -34,15 +34,6 @@
 {% endblock %}
 
 {% block extra_js %}
-  {{c.create_page_lightbox.display(content='''
-    <h1>Add a Wiki Page</h1>
-    <form class="grid-10">
-        <label class="grid-2">Name</label>
-        <div class="grid-7"><input type="text" name="name"></div>
-        <label class="grid-2">&nbsp;</label>
-        <div class="grid-7"><input type="submit" value="Create page"></div>
-    </form>
-  ''')}}
     <script type="text/javascript">
         $('.post-link').click(function () {
             var version = $(this).data("dialog-id");

http://git-wip-us.apache.org/repos/asf/allura/blob/ac014139/ForgeWiki/forgewiki/templates/wiki/page_view.html
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/templates/wiki/page_view.html b/ForgeWiki/forgewiki/templates/wiki/page_view.html
index 7a6135e..5762064 100644
--- a/ForgeWiki/forgewiki/templates/wiki/page_view.html
+++ b/ForgeWiki/forgewiki/templates/wiki/page_view.html
@@ -116,23 +116,4 @@
       {% endif %}
   {% endif %}
   {{c.confirmation.display(content='')}}
-  {% if not c.user.is_anonymous() %}
-    <form action="{{c.app.url}}subscribe" id="wiki_subscribe_form" style="display:none;" method="POST">
-      {{lib.csrf_token()}}
-      {% if c.subscribed %}
-        <input type="hidden" name="unsubscribe" value="1">
-      {% else %}
-        <input type="hidden" name="subscribe" value="1">
-      {% endif %}
-    </form>
-  {% endif %}
 {% endblock %}
-
-{% block wiki_extra_js %}
-  <script type="text/javascript">
-    $('a[href$="#toggle-subscribe"]').click(function() {
-      $('#wiki_subscribe_form').submit();
-      return false;
-    })
-  </script>
-{% endblock wiki_extra_js %}

http://git-wip-us.apache.org/repos/asf/allura/blob/ac014139/ForgeWiki/forgewiki/templates/wiki/wiki_subscribe_form.html
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/templates/wiki/wiki_subscribe_form.html b/ForgeWiki/forgewiki/templates/wiki/wiki_subscribe_form.html
new file mode 100644
index 0000000..9ac328e
--- /dev/null
+++ b/ForgeWiki/forgewiki/templates/wiki/wiki_subscribe_form.html
@@ -0,0 +1,27 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+{% import 'allura:templates/jinja_master/lib.html' as lib with context %}
+<form action="{{action}}" id="wiki_subscribe_form" class="hidden" method="POST">
+  {% if subscribed %}
+    <input type="hidden" name="unsubscribe" value="1">
+  {% else %}
+    <input type="hidden" name="subscribe" value="1">
+  {% endif %}
+  {{lib.csrf_token()}}
+</form>

http://git-wip-us.apache.org/repos/asf/allura/blob/ac014139/ForgeWiki/forgewiki/widgets/wiki.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/widgets/wiki.py b/ForgeWiki/forgewiki/widgets/wiki.py
index 7dc8b56..ffd2727 100644
--- a/ForgeWiki/forgewiki/widgets/wiki.py
+++ b/ForgeWiki/forgewiki/widgets/wiki.py
@@ -17,9 +17,11 @@
 
 import ew.jinja2_ew as ew
 from allura.lib.widgets import form_fields as ffw
+from allura.lib.widgets.forms import ForgeForm
 
 
 class CreatePageWidget(ffw.Lightbox):
+    content_template='forgewiki:templates/wiki/create_page_widget.html'
 
     def resources(self):
         for r in super(CreatePageWidget, self).resources():
@@ -31,3 +33,17 @@ class CreatePageWidget(ffw.Lightbox):
                 return false;
             });
         });''')
+
+
+class WikiSubscribeForm(ForgeForm):
+    template='jinja:forgewiki:templates/wiki/wiki_subscribe_form.html'
+    defaults = dict(ForgeForm.defaults, subscribed=False)
+
+    def resources(self):
+        for r in super(WikiSubscribeForm, self).resources():
+            yield r
+        yield ew.JSScript("""
+            $('a[href$="#toggle-subscribe"]').click(function() {
+                $('#wiki_subscribe_form').submit();
+                return false;
+            })""")

http://git-wip-us.apache.org/repos/asf/allura/blob/ac014139/ForgeWiki/forgewiki/wiki_main.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py
index a43be58..8747e87 100644
--- a/ForgeWiki/forgewiki/wiki_main.py
+++ b/ForgeWiki/forgewiki/wiki_main.py
@@ -51,7 +51,7 @@ from allura.lib.widgets.search import SearchResults, SearchHelp
 # Local imports
 from forgewiki import model as WM
 from forgewiki import version
-from forgewiki.widgets.wiki import CreatePageWidget
+from forgewiki.widgets.wiki import CreatePageWidget, WikiSubscribeForm
 
 log = logging.getLogger(__name__)
 
@@ -279,6 +279,17 @@ The wiki uses [Markdown](%s) syntax.
     def sidebar_menu(self):
         return self.create_common_wiki_menu(has_access(self, 'create'), c.app.url, 'add_wiki_page')
 
+    @h.exceptionless([], log)
+    def sidebar_menu_widgets(self):
+        widgets = super(ForgeWikiApp, self).sidebar_menu_widgets()
+        widgets.append(W.create_page_lightbox)
+        if not c.user.is_anonymous():
+            form = WikiSubscribeForm(
+                action=self.url + 'subscribe',
+                subscribed=M.Mailbox.subscribed())
+            widgets.append(form)
+        return widgets
+
     def install(self, project):
         'Set up any default permissions and roles here'
         self.config.options['project_name'] = project.name
@@ -336,7 +347,6 @@ The wiki uses [Markdown](%s) syntax.
 class RootController(BaseController, DispatchIndex, FeedController):
 
     def __init__(self):
-        c.create_page_lightbox = W.create_page_lightbox
         self._discuss = AppDiscussionController()
 
     def _check_security(self):
@@ -483,9 +493,6 @@ class PageController(BaseController, FeedController):
             app_config_id=c.app.config._id, title=self.title)
         if self.page is not None:
             self.attachment = WikiAttachmentsController(self.page)
-        c.create_page_lightbox = W.create_page_lightbox
-        if not c.user.is_anonymous():
-            c.subscribed = M.Mailbox.subscribed()
 
     def _check_security(self):
         if self.page:


[2/5] allura git commit: [#7923] ticket:827 Show app's menu instead of the admin on admin pages

Posted by br...@apache.org.
[#7923] ticket:827 Show app's menu instead of the admin on admin pages


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/82a08dd4
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/82a08dd4
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/82a08dd4

Branch: refs/heads/master
Commit: 82a08dd4c7d971c7238fbf0ef2612d64d44d00ae
Parents: 6aa2289
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Aug 14 10:44:55 2015 +0300
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Tue Aug 18 22:17:59 2015 +0000

----------------------------------------------------------------------
 Allura/allura/app.py                      |  9 +++++++--
 Allura/allura/webhooks.py                 |  3 ++-
 ForgeSVN/forgesvn/svn_main.py             |  4 ++--
 ForgeTracker/forgetracker/tracker_main.py | 11 ++++++++---
 4 files changed, 19 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/82a08dd4/Allura/allura/app.py
----------------------------------------------------------------------
diff --git a/Allura/allura/app.py b/Allura/allura/app.py
index a0542c4..2d748c5 100644
--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -745,9 +745,14 @@ class Application(object):
                 'label': self.config.options.mount_label}
 
 
+class AdminControllerMixin(object):
+    """Provides common functionality admin controllers need"""
+    def _before(self, *remainder, **params):
+        # Display app's sidebar on admin page, instead of :class:`AdminApp`'s
+        c.app = self.app
 
 
-class DefaultAdminController(BaseController):
+class DefaultAdminController(BaseController, AdminControllerMixin):
 
     """Provides basic admin functionality for an :class:`Application`.
 
@@ -961,7 +966,7 @@ class DefaultAdminController(BaseController):
         redirect(request.referer)
 
 
-class WebhooksLookup(BaseController):
+class WebhooksLookup(BaseController, AdminControllerMixin):
 
     def __init__(self, app):
         super(WebhooksLookup, self).__init__()

http://git-wip-us.apache.org/repos/asf/allura/blob/82a08dd4/Allura/allura/webhooks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/webhooks.py b/Allura/allura/webhooks.py
index 1447802..d902e71 100644
--- a/Allura/allura/webhooks.py
+++ b/Allura/allura/webhooks.py
@@ -35,6 +35,7 @@ from webob import exc
 from pymongo.errors import DuplicateKeyError
 from paste.deploy.converters import asint, aslist
 
+from allura.app import AdminControllerMixin
 from allura.controllers import BaseController
 from allura.lib import helpers as h
 from allura.lib.decorators import require_post, task
@@ -97,7 +98,7 @@ class WebhookControllerMeta(type):
         return type.__call__(cls, sender, app, *args, **kw)
 
 
-class WebhookController(BaseController):
+class WebhookController(BaseController, AdminControllerMixin):
     __metaclass__ = WebhookControllerMeta
     create_form = WebhookCreateForm
     edit_form = WebhookEditForm

http://git-wip-us.apache.org/repos/asf/allura/blob/82a08dd4/ForgeSVN/forgesvn/svn_main.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/svn_main.py b/ForgeSVN/forgesvn/svn_main.py
index 5dda325..e87d106 100644
--- a/ForgeSVN/forgesvn/svn_main.py
+++ b/ForgeSVN/forgesvn/svn_main.py
@@ -33,7 +33,7 @@ from allura.controllers import BaseController
 from allura.controllers.repository import RepoRootController
 from allura.lib.decorators import require_post
 from allura.lib.repository import RepositoryApp, RepoAdminController
-from allura.app import SitemapEntry, ConfigOption
+from allura.app import SitemapEntry, ConfigOption, AdminControllerMixin
 from allura.lib import helpers as h
 from allura.lib import validators as v
 from allura import model as M
@@ -144,7 +144,7 @@ class SVNRepoAdminController(RepoAdminController):
             flash("Invalid external checkout URL: %s" % c.form_errors['external_checkout_url'], "error")
 
 
-class SVNImportController(BaseController):
+class SVNImportController(BaseController, AdminControllerMixin):
     import_form = widgets.ImportForm()
 
     def __init__(self, app):

http://git-wip-us.apache.org/repos/asf/allura/blob/82a08dd4/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 47a5d8b..ad63b74 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -46,7 +46,13 @@ from ming.utils import LazyProperty
 from allura import model as M
 from allura.lib import helpers as h
 from allura.lib import utils
-from allura.app import Application, SitemapEntry, DefaultAdminController, ConfigOption
+from allura.app import (
+    Application,
+    SitemapEntry,
+    DefaultAdminController,
+    AdminControllerMixin,
+    ConfigOption,
+)
 from allura.lib.search import search_artifact, SearchError
 from allura.lib.solr import escape_solr_arg
 from allura.lib.decorators import require_post
@@ -1104,7 +1110,7 @@ class RootController(BaseController, FeedController):
         }
 
 
-class BinController(BaseController):
+class BinController(BaseController, AdminControllerMixin):
 
     def __init__(self, summary=None, app=None):
         if summary is not None:
@@ -1640,7 +1646,6 @@ class TrackerAdminController(DefaultAdminController):
     @expose('jinja:forgetracker:templates/tracker/admin_fields.html')
     def fields(self, **kw):
         c.form = W.field_admin
-        c.app = self.app
         columns = dict((column, get_label(column))
                        for column in self.app.globals['show_in_search'].keys())
         return dict(app=self.app, globals=self.app.globals, columns=columns)


[4/5] allura git commit: [#7923] ticket:827 Fix tests

Posted by br...@apache.org.
[#7923] ticket:827 Fix tests


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/da69a59e
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/da69a59e
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/da69a59e

Branch: refs/heads/master
Commit: da69a59e06b99edb1426b14f5c20fae78ac3d59a
Parents: c6df966
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Aug 14 14:10:06 2015 +0300
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Tue Aug 18 22:18:00 2015 +0000

----------------------------------------------------------------------
 .../tests/functional/test_forum.py              | 61 ++++++++------
 .../tests/functional/test_forum_admin.py        | 88 ++++++++++----------
 .../tests/functional/test_rest.py               | 11 +--
 .../forgetracker/tests/functional/test_root.py  |  6 +-
 .../forgewiki/tests/functional/test_rest.py     |  2 +-
 5 files changed, 88 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/da69a59e/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
index 23ec71f..1efa395 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
@@ -45,9 +45,10 @@ class TestForumEmail(TestController):
         c.user = M.User.by_username('test-admin')
         self.app.get('/discussion/')
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'testforum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r.forms[1].submit()
+        form = r.forms[2]
+        form['add_forum.shortname'] = 'testforum'
+        form['add_forum.name'] = 'Test Forum'
+        form.submit()
         r = self.app.get('/admin/discussion/forums')
         assert 'testforum' in r
         self.email_address = c.user.email_addresses[0]
@@ -130,14 +131,16 @@ class TestForumAsync(TestController):
         TestController.setUp(self)
         self.app.get('/discussion/')
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'testforum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r.forms[1].submit()
+        form = r.forms[2]
+        form['add_forum.shortname'] = 'testforum'
+        form['add_forum.name'] = 'Test Forum'
+        form.submit()
         r = self.app.get('/admin/discussion/forums')
         assert 'Test Forum' in r
-        r.forms[1]['add_forum.shortname'] = 'test1'
-        r.forms[1]['add_forum.name'] = 'Test Forum 1'
-        r.forms[1].submit()
+        form = r.forms[2]
+        form['add_forum.shortname'] = 'test1'
+        form['add_forum.name'] = 'Test Forum 1'
+        form.submit()
         r = self.app.get('/admin/discussion/forums')
         assert 'Test Forum 1' in r
         h.set_context('test', 'discussion', neighborhood='Projects')
@@ -270,19 +273,21 @@ class TestForum(TestController):
         TestController.setUp(self)
         self.app.get('/discussion/')
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'testforum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r.forms[1].submit()
+        form = r.forms[2]
+        form['add_forum.shortname'] = 'testforum'
+        form['add_forum.name'] = 'Test Forum'
+        form.submit()
         r = self.app.get('/admin/discussion/forums')
         frm = FM.Forum.query.get(shortname='testforum')
         assert 'testforum' in r
         h.set_context('test', 'discussion', neighborhood='Projects')
         frm = FM.Forum.query.get(shortname='testforum')
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'childforum'
-        r.forms[1]['add_forum.name'] = 'Child Forum'
-        r.forms[1]['add_forum.parent'] = str(frm._id)
-        r.forms[1].submit()
+        form = r.forms[2]
+        form['add_forum.shortname'] = 'childforum'
+        form['add_forum.name'] = 'Child Forum'
+        form['add_forum.parent'] = str(frm._id)
+        form.submit()
         r = self.app.get('/admin/discussion/forums')
         assert 'childforum' in r
 
@@ -315,19 +320,20 @@ class TestForum(TestController):
 
     def test_unicode_name(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = u'téstforum'.encode('utf-8')
-        r.forms[1]['add_forum.name'] = u'Tést Forum'.encode('utf-8')
-        r.forms[1].submit()
+        form = r.forms[2]
+        form['add_forum.shortname'] = u'téstforum'.encode('utf-8')
+        form['add_forum.name'] = u'Tést Forum'.encode('utf-8')
+        form.submit()
         r = self.app.get('/admin/discussion/forums')
         assert u'téstforum'.encode('utf-8') in r
 
     def test_markdown_description(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'tester'
-        r.forms[1]['add_forum.name'] = 'Tester'
-        r.forms[1][
-            'add_forum.description'] = '<a href="http://cnn.com">This is CNN</a>'
-        r.forms[1].submit()
+        form = r.forms[2]
+        form['add_forum.shortname'] = 'tester'
+        form['add_forum.name'] = 'Tester'
+        form['add_forum.description'] = '<a href="http://cnn.com">This is CNN</a>'
+        form.submit()
         r = self.app.get('/discussion/')
         assert_equal(len(r.html.findAll('a', rel='nofollow')), 1)
 
@@ -823,9 +829,10 @@ class TestForum(TestController):
 
     def test_create_topic_unicode(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = u'téstforum'.encode('utf-8')
-        r.forms[1]['add_forum.name'] = u'Tést Forum'.encode('utf-8')
-        r.forms[1].submit()
+        form = r.forms[2]
+        form['add_forum.shortname'] = u'téstforum'.encode('utf-8')
+        form['add_forum.name'] = u'Tést Forum'.encode('utf-8')
+        form.submit()
         r = self.app.get('/admin/discussion/forums')
         assert u'téstforum'.encode('utf-8') in r
         r = self.app.get(u'/p/test/discussion/create_topic/téstforum/'.encode('utf-8'))

http://git-wip-us.apache.org/repos/asf/allura/blob/da69a59e/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
index 0eb4168..12a401e 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
@@ -38,9 +38,9 @@ class TestForumAdmin(TestController):
 
     def test_forum_CRUD(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'testforum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r = r.forms[1].submit().follow()
+        r.forms[2]['add_forum.shortname'] = 'testforum'
+        r.forms[2]['add_forum.name'] = 'Test Forum'
+        r = r.forms[2].submit().follow()
         assert 'Test Forum' in r
         h.set_context('test', 'Forum', neighborhood='Projects')
         frm = FM.Forum.query.get(shortname='testforum')
@@ -57,47 +57,47 @@ class TestForumAdmin(TestController):
 
     def test_forum_CRUD_hier(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'testforum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r = r.forms[1].submit().follow()
+        r.forms[2]['add_forum.shortname'] = 'testforum'
+        r.forms[2]['add_forum.name'] = 'Test Forum'
+        r = r.forms[2].submit().follow()
         r = self.app.get('/admin/discussion/forums')
         assert 'testforum' in r
         h.set_context('test', 'discussion', neighborhood='Projects')
         frm = FM.Forum.query.get(shortname='testforum')
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'childforum'
-        r.forms[1]['add_forum.name'] = 'Child Forum'
-        r.forms[1]['add_forum.parent'] = str(frm._id)
-        r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'childforum'
+        r.forms[2]['add_forum.name'] = 'Child Forum'
+        r.forms[2]['add_forum.parent'] = str(frm._id)
+        r.forms[2].submit()
         r = self.app.get('/admin/discussion/forums')
         assert 'Child Forum' in r
 
     def test_bad_forum_names(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'Test.Forum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r = r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'Test.Forum'
+        r.forms[2]['add_forum.name'] = 'Test Forum'
+        r = r.forms[2].submit()
         assert 'error' in r
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'Test/Forum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r = r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'Test/Forum'
+        r.forms[2]['add_forum.name'] = 'Test Forum'
+        r = r.forms[2].submit()
         assert 'error' in r
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'Test Forum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r = r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'Test Forum'
+        r.forms[2]['add_forum.name'] = 'Test Forum'
+        r = r.forms[2].submit()
         assert 'error' in r
 
     def test_duplicate_forum_names(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'a'
-        r.forms[1]['add_forum.name'] = 'Forum A'
-        r = r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'a'
+        r.forms[2]['add_forum.name'] = 'Forum A'
+        r = r.forms[2].submit()
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'b'
-        r.forms[1]['add_forum.name'] = 'Forum B'
-        r = r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'b'
+        r.forms[2]['add_forum.name'] = 'Forum B'
+        r = r.forms[2].submit()
         h.set_context('test', 'Forum', neighborhood='Projects')
         forum_a = FM.Forum.query.get(shortname='a')
         self.app.post('/admin/discussion/update_forums',
@@ -109,14 +109,14 @@ class TestForumAdmin(TestController):
         # Now we have two forums: 'a', and 'b'.  'a' is deleted.
         # Let's try to create new forums with these names.
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'a'
-        r.forms[1]['add_forum.name'] = 'Forum A'
-        r = r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'a'
+        r.forms[2]['add_forum.name'] = 'Forum A'
+        r = r.forms[2].submit()
         assert 'error' in r
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'b'
-        r.forms[1]['add_forum.name'] = 'Forum B'
-        r = r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'b'
+        r.forms[2]['add_forum.name'] = 'Forum B'
+        r = r.forms[2].submit()
         assert 'error' in r
 
     def test_forum_icon(self):
@@ -128,7 +128,7 @@ class TestForumAdmin(TestController):
 
         h.set_context('test', 'discussion', neighborhood='Projects')
         r = self.app.get('/admin/discussion/forums')
-        app_id = r.forms[1]['add_forum.app_id'].value
+        app_id = r.forms[2]['add_forum.app_id'].value
         r = self.app.post('/admin/discussion/add_forum',
                           params={'add_forum.shortname': 'testforum',
                                   'add_forum.app_id': app_id,
@@ -144,9 +144,9 @@ class TestForumAdmin(TestController):
     def test_delete_undelete(self):
         r = self.app.get('/admin/discussion/forums')
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'testforum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r = r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'testforum'
+        r.forms[2]['add_forum.name'] = 'Test Forum'
+        r = r.forms[2].submit()
         r = self.app.get('/admin/discussion/forums')
         assert len(r.html.findAll('input', {'value': 'Delete'})) == 2
         h.set_context('test', 'Forum', neighborhood='Projects')
@@ -170,9 +170,9 @@ class TestForumAdmin(TestController):
     def test_members_only(self):
         # make a forum anyone can see
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'secret'
-        r.forms[1]['add_forum.name'] = 'Secret'
-        r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'secret'
+        r.forms[2]['add_forum.name'] = 'Secret'
+        r.forms[2].submit()
         # forum can be viewed by member and non-member
         self.app.get('/discussion/secret')
         self.app.get('/discussion/secret',
@@ -230,9 +230,9 @@ class TestForumAdmin(TestController):
     def test_anon_posts(self):
         # make a forum anons can't post in
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'testforum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'testforum'
+        r.forms[2]['add_forum.name'] = 'Test Forum'
+        r.forms[2].submit()
         # try to post in the forum and get a 403
         r = self.app.get('/discussion/create_topic/')
         f = r.html.find(
@@ -277,9 +277,9 @@ class TestForumAdmin(TestController):
 
     def test_footer_monitoring_email(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'testforum'
-        r.forms[1]['add_forum.name'] = 'Test Forum'
-        r.forms[1].submit()
+        r.forms[2]['add_forum.shortname'] = 'testforum'
+        r.forms[2]['add_forum.name'] = 'Test Forum'
+        r.forms[2].submit()
         testforum = FM.Forum.query.get(shortname='testforum')
         self.app.post('/admin/discussion/update_forums',
                       params={'forum-0.anon_posts': 'on',

http://git-wip-us.apache.org/repos/asf/allura/blob/da69a59e/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
index 1f64eb5..c8b69f2 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
@@ -42,10 +42,11 @@ class TestDiscussionApiBase(TestRestApiBase):
 
     def create_forum(self, shortname, name, description):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[1]['add_forum.shortname'] = 'héllo'
-        r.forms[1]['add_forum.name'] = 'Say Héllo'
-        r.forms[1]['add_forum.description'] = 'Say héllo here'
-        r.forms[1].submit()
+        form = r.forms[2]
+        form['add_forum.shortname'] = 'héllo'
+        form['add_forum.name'] = 'Say Héllo'
+        form['add_forum.description'] = 'Say héllo here'
+        form.submit()
 
     def create_topic(self, forum, subject, text):
         r = self.app.get('/discussion/create_topic/')
@@ -235,7 +236,7 @@ class TestRootRestController(TestDiscussionApiBase):
 
     def test_private_forums(self):
         r = self.app.get('/p/test/admin/discussion/forums')
-        form = r.forms[0]
+        form = r.forms[1]
         if form['forum-0.shortname'].value == u'héllo':
             form['forum-0.members_only'] = True
         else:

http://git-wip-us.apache.org/repos/asf/allura/blob/da69a59e/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 351b80b..5f1339b 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1408,7 +1408,7 @@ class TestFunctionalController(TrackerTestController):
             'sort': ''})
         assert err in r
         r = self.app.get('/admin/bugs/bins/')
-        edit_form = r.form
+        edit_form = r.forms[1]
         edit_form['bins-2.summary'] = 'Original'
         edit_form['bins-2.terms'] = 'label:foo'
         r = edit_form.submit()
@@ -1432,7 +1432,7 @@ class TestFunctionalController(TrackerTestController):
 
     def test_edit_saved_search(self):
         r = self.app.get('/admin/bugs/bins/')
-        edit_form = r.form
+        edit_form = r.forms[1]
         edit_form['bins-2.summary'] = 'Original'
         edit_form['bins-2.terms'] = 'aaa'
         edit_form.submit()
@@ -1440,7 +1440,7 @@ class TestFunctionalController(TrackerTestController):
         assert sidebar_contains(r, 'Original')
         assert not sidebar_contains(r, 'New')
         r = self.app.get('/admin/bugs/bins/')
-        edit_form = r.form
+        edit_form = r.forms[1]
         edit_form['bins-2.summary'] = 'New'
         edit_form.submit()
         r = self.app.get('/bugs/')

http://git-wip-us.apache.org/repos/asf/allura/blob/da69a59e/ForgeWiki/forgewiki/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/tests/functional/test_rest.py b/ForgeWiki/forgewiki/tests/functional/test_rest.py
index a2b58ae..9069705 100644
--- a/ForgeWiki/forgewiki/tests/functional/test_rest.py
+++ b/ForgeWiki/forgewiki/tests/functional/test_rest.py
@@ -42,7 +42,7 @@ class TestWikiApi(TestRestApiBase):
 
     def test_get_page(self):
         r = self.app.get('/p/test/wiki/Home/')
-        discussion_url = r.html.findAll('form')[3]['action'][:-4]
+        discussion_url = r.html.findAll('form')[4]['action'][:-4]
         content = file(__file__).read()
         self.app.post('/wiki/Home/attach',
                       upload_files=[('file_info', 'test_root.py', content)])


[5/5] allura git commit: [#7923] fixes after rebasing with master (incl. [#7922] changes)

Posted by br...@apache.org.
[#7923] fixes after rebasing with master (incl. [#7922] changes)


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/644a2988
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/644a2988
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/644a2988

Branch: refs/heads/master
Commit: 644a2988fa140b6865bd9a1ce2e088c40bebf922
Parents: da69a59
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Tue Aug 18 20:04:36 2015 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Tue Aug 18 22:18:00 2015 +0000

----------------------------------------------------------------------
 Allura/allura/tests/functional/test_admin.py    |  1 +
 Allura/allura/tests/test_webhooks.py            |  4 +-
 .../tests/functional/test_forum.py              | 16 ++--
 .../tests/functional/test_forum_admin.py        | 97 ++++++++++----------
 .../tests/functional/test_rest.py               |  4 +-
 .../forgetracker/tests/functional/test_root.py  |  6 +-
 .../forgewiki/tests/functional/test_rest.py     |  2 +-
 7 files changed, 67 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/644a2988/Allura/allura/tests/functional/test_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_admin.py b/Allura/allura/tests/functional/test_admin.py
index 28931c0..16590d7 100644
--- a/Allura/allura/tests/functional/test_admin.py
+++ b/Allura/allura/tests/functional/test_admin.py
@@ -324,6 +324,7 @@ class TestProjectAdmin(TestController):
                 tag for tag in r.html.findAll('input')
                 if (
                     tag.get('type') == 'hidden' and
+                    tag.get('name') and
                     tag['name'].startswith('card-') and
                     tag['name'].endswith('.id'))]
             assert len(cards) == len(app.permissions), cards

http://git-wip-us.apache.org/repos/asf/allura/blob/644a2988/Allura/allura/tests/test_webhooks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_webhooks.py b/Allura/allura/tests/test_webhooks.py
index d7fb75c..93da118 100644
--- a/Allura/allura/tests/test_webhooks.py
+++ b/Allura/allura/tests/test_webhooks.py
@@ -261,7 +261,7 @@ class TestWebhookController(TestController):
         assert_equal(M.Webhook.query.find().count(), 2)
         wh1 = M.Webhook.query.get(hook_url=data1['url'])
         r = self.app.get(self.url + '/repo-push/%s' % wh1._id)
-        form = r.forms[0]
+        form = r.forms[1]
         assert_equal(form['url'].value, data1['url'])
         assert_equal(form['secret'].value, data1['secret'])
         assert_equal(form['webhook'].value, unicode(wh1._id))
@@ -283,7 +283,7 @@ class TestWebhookController(TestController):
 
         # Duplicates
         r = self.app.get(self.url + '/repo-push/%s' % wh1._id)
-        form = r.forms[0]
+        form = r.forms[1]
         form['url'] = data2['url']
         r = form.submit()
         self.find_error(r, '_the_form',

http://git-wip-us.apache.org/repos/asf/allura/blob/644a2988/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
index 1efa395..33e1fb9 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
@@ -45,7 +45,7 @@ class TestForumEmail(TestController):
         c.user = M.User.by_username('test-admin')
         self.app.get('/discussion/')
         r = self.app.get('/admin/discussion/forums')
-        form = r.forms[2]
+        form = r.forms[3]
         form['add_forum.shortname'] = 'testforum'
         form['add_forum.name'] = 'Test Forum'
         form.submit()
@@ -131,13 +131,13 @@ class TestForumAsync(TestController):
         TestController.setUp(self)
         self.app.get('/discussion/')
         r = self.app.get('/admin/discussion/forums')
-        form = r.forms[2]
+        form = r.forms[3]
         form['add_forum.shortname'] = 'testforum'
         form['add_forum.name'] = 'Test Forum'
         form.submit()
         r = self.app.get('/admin/discussion/forums')
         assert 'Test Forum' in r
-        form = r.forms[2]
+        form = r.forms[3]
         form['add_forum.shortname'] = 'test1'
         form['add_forum.name'] = 'Test Forum 1'
         form.submit()
@@ -273,7 +273,7 @@ class TestForum(TestController):
         TestController.setUp(self)
         self.app.get('/discussion/')
         r = self.app.get('/admin/discussion/forums')
-        form = r.forms[2]
+        form = r.forms[3]
         form['add_forum.shortname'] = 'testforum'
         form['add_forum.name'] = 'Test Forum'
         form.submit()
@@ -283,7 +283,7 @@ class TestForum(TestController):
         h.set_context('test', 'discussion', neighborhood='Projects')
         frm = FM.Forum.query.get(shortname='testforum')
         r = self.app.get('/admin/discussion/forums')
-        form = r.forms[2]
+        form = r.forms[3]
         form['add_forum.shortname'] = 'childforum'
         form['add_forum.name'] = 'Child Forum'
         form['add_forum.parent'] = str(frm._id)
@@ -320,7 +320,7 @@ class TestForum(TestController):
 
     def test_unicode_name(self):
         r = self.app.get('/admin/discussion/forums')
-        form = r.forms[2]
+        form = r.forms[3]
         form['add_forum.shortname'] = u'téstforum'.encode('utf-8')
         form['add_forum.name'] = u'Tést Forum'.encode('utf-8')
         form.submit()
@@ -329,7 +329,7 @@ class TestForum(TestController):
 
     def test_markdown_description(self):
         r = self.app.get('/admin/discussion/forums')
-        form = r.forms[2]
+        form = r.forms[3]
         form['add_forum.shortname'] = 'tester'
         form['add_forum.name'] = 'Tester'
         form['add_forum.description'] = '<a href="http://cnn.com">This is CNN</a>'
@@ -829,7 +829,7 @@ class TestForum(TestController):
 
     def test_create_topic_unicode(self):
         r = self.app.get('/admin/discussion/forums')
-        form = r.forms[2]
+        form = r.forms[3]
         form['add_forum.shortname'] = u'téstforum'.encode('utf-8')
         form['add_forum.name'] = u'Tést Forum'.encode('utf-8')
         form.submit()

http://git-wip-us.apache.org/repos/asf/allura/blob/644a2988/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
index 12a401e..4597017 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
@@ -38,9 +38,9 @@ class TestForumAdmin(TestController):
 
     def test_forum_CRUD(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'testforum'
-        r.forms[2]['add_forum.name'] = 'Test Forum'
-        r = r.forms[2].submit().follow()
+        r.forms[3]['add_forum.shortname'] = 'testforum'
+        r.forms[3]['add_forum.name'] = 'Test Forum'
+        r = r.forms[3].submit().follow()
         assert 'Test Forum' in r
         h.set_context('test', 'Forum', neighborhood='Projects')
         frm = FM.Forum.query.get(shortname='testforum')
@@ -57,47 +57,47 @@ class TestForumAdmin(TestController):
 
     def test_forum_CRUD_hier(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'testforum'
-        r.forms[2]['add_forum.name'] = 'Test Forum'
-        r = r.forms[2].submit().follow()
+        r.forms[3]['add_forum.shortname'] = 'testforum'
+        r.forms[3]['add_forum.name'] = 'Test Forum'
+        r = r.forms[3].submit().follow()
         r = self.app.get('/admin/discussion/forums')
         assert 'testforum' in r
         h.set_context('test', 'discussion', neighborhood='Projects')
         frm = FM.Forum.query.get(shortname='testforum')
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'childforum'
-        r.forms[2]['add_forum.name'] = 'Child Forum'
-        r.forms[2]['add_forum.parent'] = str(frm._id)
-        r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'childforum'
+        r.forms[3]['add_forum.name'] = 'Child Forum'
+        r.forms[3]['add_forum.parent'] = str(frm._id)
+        r.forms[3].submit()
         r = self.app.get('/admin/discussion/forums')
         assert 'Child Forum' in r
 
     def test_bad_forum_names(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'Test.Forum'
-        r.forms[2]['add_forum.name'] = 'Test Forum'
-        r = r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'Test.Forum'
+        r.forms[3]['add_forum.name'] = 'Test Forum'
+        r = r.forms[3].submit()
         assert 'error' in r
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'Test/Forum'
-        r.forms[2]['add_forum.name'] = 'Test Forum'
-        r = r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'Test/Forum'
+        r.forms[3]['add_forum.name'] = 'Test Forum'
+        r = r.forms[3].submit()
         assert 'error' in r
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'Test Forum'
-        r.forms[2]['add_forum.name'] = 'Test Forum'
-        r = r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'Test Forum'
+        r.forms[3]['add_forum.name'] = 'Test Forum'
+        r = r.forms[3].submit()
         assert 'error' in r
 
     def test_duplicate_forum_names(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'a'
-        r.forms[2]['add_forum.name'] = 'Forum A'
-        r = r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'a'
+        r.forms[3]['add_forum.name'] = 'Forum A'
+        r = r.forms[3].submit()
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'b'
-        r.forms[2]['add_forum.name'] = 'Forum B'
-        r = r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'b'
+        r.forms[3]['add_forum.name'] = 'Forum B'
+        r = r.forms[3].submit()
         h.set_context('test', 'Forum', neighborhood='Projects')
         forum_a = FM.Forum.query.get(shortname='a')
         self.app.post('/admin/discussion/update_forums',
@@ -109,14 +109,14 @@ class TestForumAdmin(TestController):
         # Now we have two forums: 'a', and 'b'.  'a' is deleted.
         # Let's try to create new forums with these names.
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'a'
-        r.forms[2]['add_forum.name'] = 'Forum A'
-        r = r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'a'
+        r.forms[3]['add_forum.name'] = 'Forum A'
+        r = r.forms[3].submit()
         assert 'error' in r
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'b'
-        r.forms[2]['add_forum.name'] = 'Forum B'
-        r = r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'b'
+        r.forms[3]['add_forum.name'] = 'Forum B'
+        r = r.forms[3].submit()
         assert 'error' in r
 
     def test_forum_icon(self):
@@ -128,7 +128,7 @@ class TestForumAdmin(TestController):
 
         h.set_context('test', 'discussion', neighborhood='Projects')
         r = self.app.get('/admin/discussion/forums')
-        app_id = r.forms[2]['add_forum.app_id'].value
+        app_id = r.forms[3]['add_forum.app_id'].value
         r = self.app.post('/admin/discussion/add_forum',
                           params={'add_forum.shortname': 'testforum',
                                   'add_forum.app_id': app_id,
@@ -144,11 +144,12 @@ class TestForumAdmin(TestController):
     def test_delete_undelete(self):
         r = self.app.get('/admin/discussion/forums')
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'testforum'
-        r.forms[2]['add_forum.name'] = 'Test Forum'
-        r = r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'testforum'
+        r.forms[3]['add_forum.name'] = 'Test Forum'
+        r = r.forms[3].submit()
         r = self.app.get('/admin/discussion/forums')
-        assert len(r.html.findAll('input', {'value': 'Delete'})) == 2
+        soup_form = r.html.find('form', action='update_forums')
+        assert len(soup_form.findAll('input', {'value': 'Delete'})) == 2
         h.set_context('test', 'Forum', neighborhood='Projects')
         frm = FM.Forum.query.get(shortname='testforum')
 
@@ -158,21 +159,23 @@ class TestForumAdmin(TestController):
                                   'forum-0.name': 'New Test Forum',
                                   'forum-0.description': 'My desc'})
         r = self.app.get('/admin/discussion/forums')
-        assert len(r.html.findAll('input', {'value': 'Delete'})) == 1
+        soup_form = r.html.find('form', action='update_forums')
+        assert len(soup_form.findAll('input', {'value': 'Delete'})) == 1
         r = self.app.post('/admin/discussion/update_forums',
                           params={'forum-0.undelete': 'on',
                                   'forum-0.id': str(frm._id),
                                   'forum-0.name': 'New Test Forum',
                                   'forum-0.description': 'My desc'})
         r = self.app.get('/admin/discussion/forums')
-        assert len(r.html.findAll('input', {'value': 'Delete'})) == 2
+        soup_form = r.html.find('form', action='update_forums')
+        assert len(soup_form.findAll('input', {'value': 'Delete'})) == 2
 
     def test_members_only(self):
         # make a forum anyone can see
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'secret'
-        r.forms[2]['add_forum.name'] = 'Secret'
-        r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'secret'
+        r.forms[3]['add_forum.name'] = 'Secret'
+        r.forms[3].submit()
         # forum can be viewed by member and non-member
         self.app.get('/discussion/secret')
         self.app.get('/discussion/secret',
@@ -230,9 +233,9 @@ class TestForumAdmin(TestController):
     def test_anon_posts(self):
         # make a forum anons can't post in
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'testforum'
-        r.forms[2]['add_forum.name'] = 'Test Forum'
-        r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'testforum'
+        r.forms[3]['add_forum.name'] = 'Test Forum'
+        r.forms[3].submit()
         # try to post in the forum and get a 403
         r = self.app.get('/discussion/create_topic/')
         f = r.html.find(
@@ -277,9 +280,9 @@ class TestForumAdmin(TestController):
 
     def test_footer_monitoring_email(self):
         r = self.app.get('/admin/discussion/forums')
-        r.forms[2]['add_forum.shortname'] = 'testforum'
-        r.forms[2]['add_forum.name'] = 'Test Forum'
-        r.forms[2].submit()
+        r.forms[3]['add_forum.shortname'] = 'testforum'
+        r.forms[3]['add_forum.name'] = 'Test Forum'
+        r.forms[3].submit()
         testforum = FM.Forum.query.get(shortname='testforum')
         self.app.post('/admin/discussion/update_forums',
                       params={'forum-0.anon_posts': 'on',

http://git-wip-us.apache.org/repos/asf/allura/blob/644a2988/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
index c8b69f2..c7624a4 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
@@ -42,7 +42,7 @@ class TestDiscussionApiBase(TestRestApiBase):
 
     def create_forum(self, shortname, name, description):
         r = self.app.get('/admin/discussion/forums')
-        form = r.forms[2]
+        form = r.forms[3]
         form['add_forum.shortname'] = 'héllo'
         form['add_forum.name'] = 'Say Héllo'
         form['add_forum.description'] = 'Say héllo here'
@@ -236,7 +236,7 @@ class TestRootRestController(TestDiscussionApiBase):
 
     def test_private_forums(self):
         r = self.app.get('/p/test/admin/discussion/forums')
-        form = r.forms[1]
+        form = r.forms[2]
         if form['forum-0.shortname'].value == u'héllo':
             form['forum-0.members_only'] = True
         else:

http://git-wip-us.apache.org/repos/asf/allura/blob/644a2988/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 5f1339b..efcc59d 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1408,7 +1408,7 @@ class TestFunctionalController(TrackerTestController):
             'sort': ''})
         assert err in r
         r = self.app.get('/admin/bugs/bins/')
-        edit_form = r.forms[1]
+        edit_form = r.forms[2]
         edit_form['bins-2.summary'] = 'Original'
         edit_form['bins-2.terms'] = 'label:foo'
         r = edit_form.submit()
@@ -1432,7 +1432,7 @@ class TestFunctionalController(TrackerTestController):
 
     def test_edit_saved_search(self):
         r = self.app.get('/admin/bugs/bins/')
-        edit_form = r.forms[1]
+        edit_form = r.forms[2]
         edit_form['bins-2.summary'] = 'Original'
         edit_form['bins-2.terms'] = 'aaa'
         edit_form.submit()
@@ -1440,7 +1440,7 @@ class TestFunctionalController(TrackerTestController):
         assert sidebar_contains(r, 'Original')
         assert not sidebar_contains(r, 'New')
         r = self.app.get('/admin/bugs/bins/')
-        edit_form = r.forms[1]
+        edit_form = r.forms[2]
         edit_form['bins-2.summary'] = 'New'
         edit_form.submit()
         r = self.app.get('/bugs/')

http://git-wip-us.apache.org/repos/asf/allura/blob/644a2988/ForgeWiki/forgewiki/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/tests/functional/test_rest.py b/ForgeWiki/forgewiki/tests/functional/test_rest.py
index 9069705..3bc61bb 100644
--- a/ForgeWiki/forgewiki/tests/functional/test_rest.py
+++ b/ForgeWiki/forgewiki/tests/functional/test_rest.py
@@ -42,7 +42,7 @@ class TestWikiApi(TestRestApiBase):
 
     def test_get_page(self):
         r = self.app.get('/p/test/wiki/Home/')
-        discussion_url = r.html.findAll('form')[4]['action'][:-4]
+        discussion_url = r.html.findAll('form')[5]['action'][:-4]
         content = file(__file__).read()
         self.app.post('/wiki/Home/attach',
                       upload_files=[('file_info', 'test_root.py', content)])


[3/5] allura git commit: [#7923] ticket:827 Make wiki "Subscribe/Unsubscribe" from admin/tools menu (when left bar is disabled)

Posted by br...@apache.org.
[#7923] ticket:827 Make wiki "Subscribe/Unsubscribe" from admin/tools menu (when left bar is disabled)


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/c6df9664
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/c6df9664
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/c6df9664

Branch: refs/heads/master
Commit: c6df9664c73e413241ebaaeb7bf5391bcd4780a3
Parents: ac01413
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Aug 14 12:20:33 2015 +0300
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Tue Aug 18 22:18:00 2015 +0000

----------------------------------------------------------------------
 Allura/allura/app.py                                 |  7 +++++++
 Allura/allura/ext/admin/templates/project_tools.html |  3 +++
 ForgeWiki/forgewiki/wiki_main.py                     | 12 +++++++++++-
 3 files changed, 21 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/c6df9664/Allura/allura/app.py
----------------------------------------------------------------------
diff --git a/Allura/allura/app.py b/Allura/allura/app.py
index 46770af..bd6f36b 100644
--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -657,6 +657,13 @@ class Application(object):
                     'data-mount-point': self.config.options.mount_point,
                 })
 
+    def admin_menu_widgets(self):
+        """Return widgets needed by the admin menu of this Application.
+
+        :return: a list of widgets
+        """
+        return []
+
     def handle_message(self, topic, message):
         """Handle incoming email msgs addressed to this tool.
         Default is a no-op.

http://git-wip-us.apache.org/repos/asf/allura/blob/c6df9664/Allura/allura/ext/admin/templates/project_tools.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/templates/project_tools.html b/Allura/allura/ext/admin/templates/project_tools.html
index aa825f1..ec83e0a 100644
--- a/Allura/allura/ext/admin/templates/project_tools.html
+++ b/Allura/allura/ext/admin/templates/project_tools.html
@@ -94,6 +94,9 @@
                 </ul>
                 {# for ordering #}
                 <input type="hidden" class="mount_point" value="{{mount['ac'].options.mount_point}}"/>
+                {% for w in app.admin_menu_widgets() %}
+                  {{ w.display() }}
+                {% endfor %}
             </div>
         {% endif %}
         {% if 'sub' in mount and not mount['sub'].deleted %}

http://git-wip-us.apache.org/repos/asf/allura/blob/c6df9664/ForgeWiki/forgewiki/wiki_main.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py
index 8747e87..f78a9b0 100644
--- a/ForgeWiki/forgewiki/wiki_main.py
+++ b/ForgeWiki/forgewiki/wiki_main.py
@@ -244,7 +244,7 @@ The wiki uses [Markdown](%s) syntax.
                     'Moderate', discussion.url() + 'moderate', ui_icon=g.icons['pencil'],
                     small=pending_mod_count))
         if not c.user.is_anonymous():
-            subscribed = M.Mailbox.subscribed()
+            subscribed = M.Mailbox.subscribed(app_config_id=self.config._id)
             subscribe_action = 'unsubscribe' if subscribed else 'subscribe'
             subscribe_title = '{}{}'.format(
                 subscribe_action.capitalize(),
@@ -276,6 +276,16 @@ The wiki uses [Markdown](%s) syntax.
         return links
 
     @h.exceptionless([], log)
+    def admin_menu_widgets(self):
+        widgets = super(ForgeWikiApp, self).admin_menu_widgets()
+        if not c.user.is_anonymous():
+            form = WikiSubscribeForm(
+                action=self.url + 'subscribe',
+                subscribed=M.Mailbox.subscribed(app_config_id=self.config._id))
+            widgets.append(form)
+        return widgets
+
+    @h.exceptionless([], log)
     def sidebar_menu(self):
         return self.create_common_wiki_menu(has_access(self, 'create'), c.app.url, 'add_wiki_page')