Skip to content

Commit

Permalink
Switch bookmark submit page to class based view
Browse files Browse the repository at this point in the history
Also add a simple template to allow going to home page or back where you
came from, refs: Linkuist#15
  • Loading branch information
EvaSDK committed Jul 3, 2016
1 parent 4023ecf commit e2b9f05
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 21 deletions.
47 changes: 46 additions & 1 deletion collectr/collector/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
"""

from django.conf import settings
from django.test import TestCase
from django.core.urlresolvers import reverse
from django.test import TestCase, TransactionTestCase

import redis

from source import models as source_models
from source import factories as source_factories
from userprofile.models import UserProfile

from . import rss as rss_module

Expand Down Expand Up @@ -50,3 +52,46 @@ def test_rss_collector(self):
)
job_len = len(self.redis_client.keys('rq:job:*'))
self.assertEqual(job_len, expected_jobs_len)


class CollectorViewTest(TransactionTestCase):

def setUp(self):
self.user = source_factories.UserFactory()
self.user.set_password('toto')
self.user.save()
self.client.login(username=self.user.username, password='toto')

def test_submit_nolink(self):
response = self.client.get(reverse('collector:bookmark',
args=(self.user.username,)))
self.assertEqual(response.status_code, 400)

def test_submit_invalid_token(self):
response = self.client.get(
reverse('collector:bookmark', args=(self.user.username,)) + "?" +
"&".join(
key + '=' + value for key, value in {
'url': 'http://www.moto-net.com/rss_actu.xml',
'from': 'me',
'source': 'all',
'token': 'pazoeiazeip',
}.items()
))
self.assertEqual(response.status_code, 403)

def test_submit_success(self):
uprofile = UserProfile(user=self.user, token='randomtoken')
uprofile.save()

response = self.client.get(
reverse('collector:bookmark', args=(self.user.username,)) + "?" +
"&".join(
key + '=' + value for key, value in {
'url': 'http://www.moto-net.com/rss_actu.xml',
'from': 'me',
'source': 'all',
'token': 'randomtoken',
}.items()
))
self.assertEqual(response.status_code, 202)
2 changes: 1 addition & 1 deletion collectr/collector/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
from collector import views

urlpatterns = patterns('',
url(r'^bookmark/(?P<username>\w+)/$', views.secret_bookmark, name="bookmark"),
url(r'^bookmark/(?P<username>\w+)/$', views.SubmitBookmarkView.as_view(), name="bookmark"),
)

52 changes: 33 additions & 19 deletions collectr/collector/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@

# django
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.http import HttpResponse
from django.shortcuts import redirect
from django.template.response import TemplateResponse
from django.views.generic import TemplateView

# rq
from redis import Redis
Expand All @@ -15,24 +15,38 @@
from semantism.process import index_url


def secret_bookmark(request, username):
url = request.GET.get('url')
link_from = request.GET.get('from')
source = request.GET.get('source')
token = request.GET.get('token')
class AcceptTemplateResponse(TemplateResponse):
"""`TemplateResponse` that returns with 202 Accept status code."""
status_code = 202

if None in (url, link_from, source, token):
return HttpResponse(status=400)

try:
user = User.objects.get(username=username, userprofile__token=token)
except User.DoesNotExist:
return HttpResponse(status=403)
class SubmitBookmarkView(TemplateView):

with Connection(Redis(**settings.RQ_DATABASE)):
links_queue = Queue('link_indexing')
links_queue.enqueue_call(func=index_url,
args=(url, user.id, datetime.now(), link_from, source), timeout=60
)
response_class = AcceptTemplateResponse
template_name = 'collector/bookmark_submit.html'

def get(self, request, *args, **kwargs):
url = request.GET.get('url')
link_from = request.GET.get('from')
source = request.GET.get('source')
token = request.GET.get('token')

if None in (url, link_from, source, token):
return HttpResponse(status=400)

try:
user = User.objects.get(username=kwargs['username'],
userprofile__token=token)
except User.DoesNotExist:
return HttpResponse(status=403)

with Connection(Redis(**settings.RQ_DATABASE)):
links_queue = Queue('link_indexing')
links_queue.enqueue_call(
func=index_url,
args=(url, user.id, datetime.now(), link_from, source),
timeout=60
)

return super(SubmitBookmarkView, self).get(request, *args, **kwargs)

return HttpResponse(status=201)
19 changes: 19 additions & 0 deletions collectr/templates/collector/bookmark_submit.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{% extends "base.html" %}
{% load i18n %}

{% block title %} - Bookmark submission{% endblock title %}

{% block container-fluid %}

<div class="hero-unit">
<h1>Bookmark submitted</h1>
<p>
{% blocktrans %}Your bookmark has been submitted and will be processed shorlty.{% endblocktrans %}
</p>
<p>
{% url "home" as homelink %}
{% blocktrans %}Once processed, it will appear on your <a href="{{ homelink }}">Home page</a>. In the meantime, you may <a href="javascript:history.back()">go back</a> to where you came from to continue reading.{%endblocktrans %}
</p>
</div>

{% endblock container-fluid %}

0 comments on commit e2b9f05

Please sign in to comment.