Revision 3d08cdca
b/snf-astakos-app/astakos/im/templates/im/approval_terms.html | ||
---|---|---|
9 | 9 |
|
10 | 10 |
{% if approval_terms_form %} |
11 | 11 |
<div class="section"> |
12 |
<form action="{% url latest_terms %}" method="post" class="login innerlabels">{% csrf_token %} |
|
12 |
<form name="approval_terms_form" action="{% url latest_terms %}" method="post" class="login innerlabels">{% csrf_token %}
|
|
13 | 13 |
{% with approval_terms_form as form %} |
14 | 14 |
{% include "im/form_render.html" %} |
15 | 15 |
{% endwith %} |
b/snf-astakos-app/astakos/im/tests/views.py | ||
---|---|---|
31 | 31 |
# interpreted as representing official policies, either expressed |
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 |
import astakos.im.messages as astakos_messages |
|
35 |
|
|
36 |
from astakos.im.models import ApprovalTerms |
|
34 | 37 |
from astakos.im.tests.common import * |
38 |
|
|
35 | 39 |
from django.core import urlresolvers |
40 |
from django.utils.translation import ugettext as _ |
|
41 |
|
|
42 |
import os |
|
36 | 43 |
|
37 | 44 |
|
38 | 45 |
class TestViews(TestCase): |
... | ... | |
48 | 55 |
|
49 | 56 |
r = self.client.get(reverse('api_access_config')) |
50 | 57 |
self.assertContains(r, user.auth_token) |
58 |
|
|
59 |
|
|
60 |
class TestApprovalTerms(TestCase): |
|
61 |
def tearDown(self): |
|
62 |
os.remove('terms') |
|
63 |
|
|
64 |
ApprovalTerms.objects.get(location='terms').delete() |
|
65 |
|
|
66 |
def test_approval_terms(self): |
|
67 |
r = self.client.get(reverse('latest_terms'), follow=True) |
|
68 |
self.assertEqual(r.status_code, 200) |
|
69 |
self.assertContains(r, _(astakos_messages.NO_APPROVAL_TERMS)) |
|
70 |
|
|
71 |
r = self.client.post(reverse('latest_terms'), follow=True) |
|
72 |
self.assertEqual(r.status_code, 200) |
|
73 |
self.assertContains(r, _(astakos_messages.NO_APPROVAL_TERMS)) |
|
74 |
|
|
75 |
# add terms |
|
76 |
f = open('terms', 'w+') |
|
77 |
f.write('This are some terms') |
|
78 |
f.close() |
|
79 |
|
|
80 |
terms = ApprovalTerms(location='terms') |
|
81 |
terms.save() |
|
82 |
|
|
83 |
self.user = get_local_user('user@synnefo.org') |
|
84 |
self.assertTrue(not self.user.signed_terms) |
|
85 |
self.assertTrue(self.user.date_signed_terms is None) |
|
86 |
self.user_client = get_user_client(self.user.username) |
|
87 |
|
|
88 |
r = self.client.get(reverse('latest_terms')) |
|
89 |
self.assertEqual(r.status_code, 200) |
|
90 |
self.assertTemplateUsed(r, 'im/approval_terms.html') |
|
91 |
# assert there is no form |
|
92 |
self.assertNotContains(r, 'I agree with the terms') |
|
93 |
|
|
94 |
r = self.client.post(reverse('latest_terms'), follow=False) |
|
95 |
self.assertEqual(r.status_code, 302) |
|
96 |
# assert redirect to login |
|
97 |
self.assertTrue('Location' in r) |
|
98 |
self.assertTrue(r['Location'].find(reverse('login')) != -1) |
|
99 |
|
|
100 |
r = self.user_client.get(reverse('latest_terms'), follow=True) |
|
101 |
self.assertEqual(r.status_code, 200) |
|
102 |
self.assertTemplateUsed(r, 'im/approval_terms.html') |
|
103 |
# assert there is form |
|
104 |
self.assertContains(r, 'I agree with the terms') |
|
105 |
|
|
106 |
r = self.user_client.post(reverse('latest_terms'), follow=True) |
|
107 |
self.assertEqual(r.status_code, 200) |
|
108 |
self.assertFormError(r, 'approval_terms_form', 'has_signed_terms', |
|
109 |
_(astakos_messages.SIGN_TERMS)) |
|
110 |
|
|
111 |
r = self.user_client.post(reverse('latest_terms'), |
|
112 |
{'has_signed_terms': True}, |
|
113 |
follow=True) |
|
114 |
self.assertEqual(r.status_code, 200) |
|
115 |
|
|
116 |
user = AstakosUser.objects.get(username=self.user.username) |
|
117 |
self.assertTrue(user.signed_terms) |
b/snf-astakos-app/astakos/im/views/im.py | ||
---|---|---|
663 | 663 |
return response |
664 | 664 |
|
665 | 665 |
|
666 |
@login_required |
|
667 |
def _approval_terms_post(request, template_name, terms, extra_context): |
|
668 |
next = restrict_next( |
|
669 |
request.POST.get('next'), |
|
670 |
domain=settings.COOKIE_DOMAIN |
|
671 |
) |
|
672 |
if not next: |
|
673 |
next = reverse('index') |
|
674 |
form = SignApprovalTermsForm(request.POST, instance=request.user) |
|
675 |
if not form.is_valid(): |
|
676 |
return render_response(template_name, |
|
677 |
terms=terms, |
|
678 |
approval_terms_form=form, |
|
679 |
context_instance=get_context(request, |
|
680 |
extra_context)) |
|
681 |
user = form.save() |
|
682 |
return HttpResponseRedirect(next) |
|
683 |
|
|
684 |
|
|
666 | 685 |
@require_http_methods(["GET", "POST"]) |
667 | 686 |
@cookie_fix |
668 | 687 |
def approval_terms(request, term_id=None, |
669 | 688 |
template_name='im/approval_terms.html', extra_context=None): |
670 | 689 |
extra_context = extra_context or {} |
671 |
term = None |
|
690 |
terms_record = None
|
|
672 | 691 |
terms = None |
673 | 692 |
if not term_id: |
674 | 693 |
try: |
675 |
term = ApprovalTerms.objects.order_by('-id')[0] |
|
694 |
terms_record = ApprovalTerms.objects.order_by('-id')[0]
|
|
676 | 695 |
except IndexError: |
677 | 696 |
pass |
678 | 697 |
else: |
679 | 698 |
try: |
680 |
term = ApprovalTerms.objects.get(id=term_id) |
|
699 |
terms_record = ApprovalTerms.objects.get(id=term_id)
|
|
681 | 700 |
except ApprovalTerms.DoesNotExist, e: |
682 | 701 |
pass |
683 | 702 |
|
684 |
if not term: |
|
703 |
if not terms_record:
|
|
685 | 704 |
messages.error(request, _(astakos_messages.NO_APPROVAL_TERMS)) |
686 | 705 |
return HttpResponseRedirect(reverse('index')) |
687 | 706 |
try: |
688 |
f = open(term.location, 'r') |
|
707 |
f = open(terms_record.location, 'r')
|
|
689 | 708 |
except IOError: |
690 | 709 |
messages.error(request, _(astakos_messages.GENERIC_ERROR)) |
691 | 710 |
return render_response( |
... | ... | |
695 | 714 |
terms = f.read() |
696 | 715 |
|
697 | 716 |
if request.method == 'POST': |
698 |
next = restrict_next( |
|
699 |
request.POST.get('next'), |
|
700 |
domain=settings.COOKIE_DOMAIN |
|
701 |
) |
|
702 |
if not next: |
|
703 |
next = reverse('index') |
|
704 |
form = SignApprovalTermsForm(request.POST, instance=request.user) |
|
705 |
if not form.is_valid(): |
|
706 |
return render_response(template_name, |
|
707 |
terms=terms, |
|
708 |
approval_terms_form=form, |
|
709 |
context_instance=get_context(request, |
|
710 |
extra_context)) |
|
711 |
user = form.save() |
|
712 |
return HttpResponseRedirect(next) |
|
717 |
return _approval_terms_post(request, template_name, terms, |
|
718 |
extra_context) |
|
713 | 719 |
else: |
714 | 720 |
form = None |
715 | 721 |
if request.user.is_authenticated() and not request.user.signed_terms: |
Also available in: Unified diff