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