Skip to content

Commit

Permalink
Unliking a proposal
Browse files Browse the repository at this point in the history
  • Loading branch information
Felipe Álvarez committed Jul 22, 2016
1 parent 5ef72ca commit 8559b57
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 5 deletions.
28 changes: 25 additions & 3 deletions popular_proposal/tests/subscribing_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from popular_proposal.tests import ProposingCycleTestCaseBase as TestCase
from django.contrib.auth.models import User
from popular_proposal.models import PopularProposal, ProposalLike
#, SubscriptionEventBase
import json
from popular_proposal.forms import SubscriptionForm
from unittest import skip
from django.core.urlresolvers import reverse
Expand All @@ -19,6 +19,8 @@ def setUp(self):
)
self.feli.set_password('alvarez')
self.feli.save()
self.fiera.set_password('feroz')
self.fiera.save()

def test_instanciate_liking_a_proposal(self):
like = ProposalLike.objects.create(user=self.feli,
Expand Down Expand Up @@ -71,8 +73,28 @@ def test_popular_proposal_likers(self):
})
self.assertEquals(template.render(context), u"Sí")
non_liker = User.objects.create_user(username='non_liker', password='s3cr3t')
self.assertEquals(template.render(Context({'user':non_liker,
'proposal':self.proposal})), u'No')
self.assertEquals(template.render(Context({'user': non_liker,
'proposal': self.proposal})), u'No')

def test_unlike(self):
like = ProposalLike.objects.create(user=self.feli,
proposal=self.proposal)
url = reverse('popular_proposals:unlike_proposal', kwargs={'pk': like.id})
response = self.client.get(url)
self.assertEquals(response.status_code, 404)
self.client.login(username=self.fiera,
password='feroz')
response = self.client.post(url)
self.assertEquals(response.status_code, 404)
self.client.login(username=self.feli,
password='alvarez')
response = self.client.post(url)
self.assertEquals(response.status_code, 200)
self.assertFalse(ProposalLike.objects.filter(id=like.id))
content = json.loads(response.content)
self.assertEquals(int(content['deleted_item']), like.id)



#class TheEventClass(SubscriptionEventBase):
# class Meta:
Expand Down
4 changes: 4 additions & 0 deletions popular_proposal/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
PopularProposalUpdateView,
ProposalWizard,
ProposalWizardFull,
UnlikeProposalView,
)

urlpatterns = patterns('',
Expand All @@ -22,6 +23,9 @@
url(r'^detail/(?P<slug>[-\w]+)/?$',
PopularProposalDetailView.as_view(),
name='detail'),
url(r'^unlike/(?P<pk>\d+)/?$',
UnlikeProposalView.as_view(),
name='unlike_proposal'),
url(r'^actualizar/(?P<slug>[-\w]+)/?$',
PopularProposalUpdateView.as_view(),
name='citizen_update'),
Expand Down
24 changes: 22 additions & 2 deletions popular_proposal/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,14 @@
from django.contrib.auth.decorators import login_required
from django.views.generic.base import TemplateView
from django.views.generic.detail import DetailView
from popular_proposal.models import PopularProposal, ProposalTemporaryData
from popular_proposal.models import (PopularProposal,
ProposalTemporaryData,
ProposalLike)
from django.shortcuts import render_to_response
from formtools.wizard.views import SessionWizardView
from collections import OrderedDict

from django.views.generic import View
from django.http import JsonResponse, HttpResponseNotFound

class ProposalCreationView(FormView):
template_name = 'popular_proposal/create.html'
Expand Down Expand Up @@ -192,3 +195,20 @@ def get_queryset(self):
qs = super(PopularProposalUpdateView, self).get_queryset()
qs = qs.filter(proposer=self.request.user)
return qs


class UnlikeProposalView(View):
def dispatch(self, request, *args, **kwargs):
if not self.request.user.is_authenticated():
return HttpResponseNotFound()
self.pk = self.kwargs.pop('pk')
self.like = get_object_or_404(ProposalLike,
pk=self.pk,
user=self.request.user)
return super(UnlikeProposalView, self).dispatch(request,
*args,
**kwargs)

def post(self, request, **kwargs):
self.like.delete()
return JsonResponse({'deleted_item': self.pk})

0 comments on commit 8559b57

Please sign in to comment.