aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJef van Schendel <jefvanschendel@gmail.com>2011-06-17 23:11:20 +0200
committerJef van Schendel <jefvanschendel@gmail.com>2011-06-17 23:11:20 +0200
commitd81b39da4c0f67b5f1c02da31f2c671aaca39624 (patch)
treed098dbcf24c41c69f0fafe0910c1b8779a185751
parentbb770e295cd727429df524b0a5c3952ea449fdb2 (diff)
parentd4ff1606c36b2243996b60657f374520d69cd1a3 (diff)
downloadmediagoblin-d81b39da4c0f67b5f1c02da31f2c671aaca39624.tar.lz
mediagoblin-d81b39da4c0f67b5f1c02da31f2c671aaca39624.tar.xz
mediagoblin-d81b39da4c0f67b5f1c02da31f2c671aaca39624.zip
Merge remote-tracking branch 'gitorious/master'
-rw-r--r--.gitignore3
-rw-r--r--docs/git.rst2
-rw-r--r--mediagoblin/templates/mediagoblin/base.html2
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/gallery.html42
-rw-r--r--mediagoblin/tests/test_auth.py48
-rw-r--r--mediagoblin/user_pages/routing.py2
-rw-r--r--mediagoblin/user_pages/views.py27
7 files changed, 119 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore
index 9e01560a..9187e738 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,5 @@ mediagoblin.egg-info
docs/_build/
user_dev/
server-log.txt
-*~ \ No newline at end of file
+*~
+*.swp
diff --git a/docs/git.rst b/docs/git.rst
index 8eb038b2..c3f7ccce 100644
--- a/docs/git.rst
+++ b/docs/git.rst
@@ -136,7 +136,7 @@ Slartibartfast does the following:
4. Slartibartfast pushes his changes to his clone (the remote is named
``origin``)::
- git push origin issue_42
+ git push origin issue_42 --set-upstream
5. Slartibartfast adds a comment to issue 42 with the url for his
repository and the name of the branch he put the code in. He also
diff --git a/mediagoblin/templates/mediagoblin/base.html b/mediagoblin/templates/mediagoblin/base.html
index 704e5aa7..c7313173 100644
--- a/mediagoblin/templates/mediagoblin/base.html
+++ b/mediagoblin/templates/mediagoblin/base.html
@@ -35,6 +35,8 @@
<div class="mediagoblin_header_right">
{% if request.user %}
{{ request.user['username'] }}'s account
+ <a href="{{ request.urlgen('mediagoblin.user_pages.user_gallery',
+ user= request.user['username']) }}">gallery</a>
(<a href="{{ request.urlgen('mediagoblin.auth.logout') }}">logout</a>)
{% else %}
<a href="{{ request.urlgen('mediagoblin.auth.login') }}">
diff --git a/mediagoblin/templates/mediagoblin/user_pages/gallery.html b/mediagoblin/templates/mediagoblin/user_pages/gallery.html
new file mode 100644
index 00000000..1d8fbdaa
--- /dev/null
+++ b/mediagoblin/templates/mediagoblin/user_pages/gallery.html
@@ -0,0 +1,42 @@
+{#
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 Free Software Foundation, Inc
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#}
+{% extends "mediagoblin/base.html" %}
+
+{% block mediagoblin_head %}
+ <link rel="alternate" type="application/atom+xml"
+ href="{{ request.urlgen(
+ 'mediagoblin.user_pages.atom_feed',
+ user=user.username) }}">
+{% endblock mediagoblin_head %}
+
+{% block mediagoblin_content -%}
+ {% if user %}
+ <h1>gallery for <a href="{{ request.urlgen(
+ 'mediagoblin.user_pages.user_home',
+ user=user.username) }}">{{ user.username }}</a></h1>
+
+ {% include "mediagoblin/utils/object_gallery.html" %}
+
+ <a href={{ request.urlgen(
+ 'mediagoblin.user_pages.atom_feed',
+ user=user.username) }}> atom feed</a>
+ {% else %}
+ {# This *should* not occur as the view makes sure we pass in a user. #}
+ <p>Sorry, no such user found.<p/>
+ {% endif %}
+{% endblock %}
diff --git a/mediagoblin/tests/test_auth.py b/mediagoblin/tests/test_auth.py
index 3d569093..b8389f8d 100644
--- a/mediagoblin/tests/test_auth.py
+++ b/mediagoblin/tests/test_auth.py
@@ -77,7 +77,7 @@ def test_register_views(test_app):
# Make sure it rendered with the appropriate template
assert util.TEMPLATE_TEST_CONTEXT.has_key(
'mediagoblin/auth/register.html')
-
+
# Try to register without providing anything, should error
# --------------------------------------------------------
@@ -182,7 +182,7 @@ def test_register_views(test_app):
unicode(new_user['_id'])]
assert parsed_get_params['token'] == [
new_user['verification_key']]
-
+
## Try verifying with bs verification key, shouldn't work
util.clear_test_template_context()
test_app.get(
@@ -209,8 +209,6 @@ def test_register_views(test_app):
assert new_user['status'] == u'active'
assert new_user['email_verified'] == True
- ## TODO: Try logging in
-
# Uniqueness checks
# -----------------
## We shouldn't be able to register with that user twice
@@ -221,7 +219,7 @@ def test_register_views(test_app):
'password': 'iamsohappy2',
'confirm_password': 'iamsohappy2',
'email': 'happygrrl2@example.org'})
-
+
context = util.TEMPLATE_TEST_CONTEXT[
'mediagoblin/auth/register.html']
form = context['register_form']
@@ -229,3 +227,43 @@ def test_register_views(test_app):
u'Sorry, a user with that name already exists.']
## TODO: Also check for double instances of an email address?
+
+
+@setup_fresh_app
+def test_authentication_views(test_app):
+ """
+ Test logging in and logging out
+ """
+ # Make a new user
+ test_user = mg_globals.database.User()
+ test_user['username'] = u'chris'
+ test_user['email'] = u'chris@example.com'
+ test_user['pw_hash'] = auth_lib.bcrypt_gen_password_hash('toast')
+ test_user.save()
+
+ # Get login
+ test_app.get('/auth/login/')
+ # Make sure it rendered with the appropriate template
+ assert util.TEMPLATE_TEST_CONTEXT.has_key(
+ 'mediagoblin/auth/login.html')
+
+ # Log in as that user
+ util.clear_test_template_context()
+ response = test_app.post(
+ '/auth/login/', {
+ 'username': u'chris',
+ 'password': 'toast'})
+ response.follow()
+ assert_equal(
+ urlparse.urlsplit(response.location)[2],
+ '/')
+ assert util.TEMPLATE_TEST_CONTEXT.has_key(
+ 'mediagoblin/root.html')
+
+ # Make sure we're in the session or something
+ session = util.TEMPLATE_TEST_CONTEXT['mediagoblin/root.html']['request'].session
+ assert session['user_id'] == unicode(test_user['_id'])
+
+ # Log out as that user
+ # Make sure we're not in the session
+
diff --git a/mediagoblin/user_pages/routing.py b/mediagoblin/user_pages/routing.py
index c5e9a984..92998726 100644
--- a/mediagoblin/user_pages/routing.py
+++ b/mediagoblin/user_pages/routing.py
@@ -19,6 +19,8 @@ from routes.route import Route
user_routes = [
Route('mediagoblin.user_pages.user_home', "/{user}/",
controller="mediagoblin.user_pages.views:user_home"),
+ Route('mediagoblin.user_pages.user_gallery', "/{user}/gallery/",
+ controller="mediagoblin.user_pages.views:user_gallery"),
Route('mediagoblin.user_pages.media_home', '/{user}/m/{media}/',
requirements=dict(m_id="[0-9a-fA-F]{24}"),
controller="mediagoblin.user_pages.views:media_home"),
diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py
index 323c3e54..88b5dfe5 100644
--- a/mediagoblin/user_pages/views.py
+++ b/mediagoblin/user_pages/views.py
@@ -49,6 +49,33 @@ def user_home(request, page):
'media_entries': media_entries,
'pagination': pagination})
+@uses_pagination
+def user_gallery(request, page):
+ """'Gallery' of a User()"""
+ user = request.db.User.find_one({
+ 'username': request.matchdict['user'],
+ 'status': 'active'})
+ if not user:
+ return exc.HTTPNotFound()
+
+ cursor = request.db.MediaEntry.find(
+ {'uploader': user['_id'],
+ 'state': 'processed'}).sort('created', DESCENDING)
+
+ pagination = Pagination(page, cursor)
+ media_entries = pagination()
+
+ #if no data is available, return NotFound
+ if media_entries == None:
+ return exc.HTTPNotFound()
+
+ return render_to_response(
+ request,
+ 'mediagoblin/user_pages/gallery.html',
+ {'user': user,
+ 'media_entries': media_entries,
+ 'pagination': pagination})
+
@get_user_media_entry
def media_home(request, media):