Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / tests / views.py @ 2dc27ac1

History | View | Annotate | Download (4.5 kB)

1 630e6b6d Kostas Papadimitriou
# Copyright 2011 GRNET S.A. All rights reserved.
2 630e6b6d Kostas Papadimitriou
#
3 630e6b6d Kostas Papadimitriou
# Redistribution and use in source and binary forms, with or
4 630e6b6d Kostas Papadimitriou
# without modification, are permitted provided that the following
5 630e6b6d Kostas Papadimitriou
# conditions are met:
6 630e6b6d Kostas Papadimitriou
#
7 630e6b6d Kostas Papadimitriou
#   1. Redistributions of source code must retain the above
8 630e6b6d Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
9 630e6b6d Kostas Papadimitriou
#      disclaimer.
10 630e6b6d Kostas Papadimitriou
#
11 630e6b6d Kostas Papadimitriou
#   2. Redistributions in binary form must reproduce the above
12 630e6b6d Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
13 630e6b6d Kostas Papadimitriou
#      disclaimer in the documentation and/or other materials
14 630e6b6d Kostas Papadimitriou
#      provided with the distribution.
15 630e6b6d Kostas Papadimitriou
#
16 630e6b6d Kostas Papadimitriou
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 630e6b6d Kostas Papadimitriou
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 630e6b6d Kostas Papadimitriou
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 630e6b6d Kostas Papadimitriou
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 630e6b6d Kostas Papadimitriou
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 630e6b6d Kostas Papadimitriou
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 630e6b6d Kostas Papadimitriou
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 630e6b6d Kostas Papadimitriou
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 630e6b6d Kostas Papadimitriou
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 630e6b6d Kostas Papadimitriou
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 630e6b6d Kostas Papadimitriou
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 630e6b6d Kostas Papadimitriou
# POSSIBILITY OF SUCH DAMAGE.
28 630e6b6d Kostas Papadimitriou
#
29 630e6b6d Kostas Papadimitriou
# The views and conclusions contained in the software and
30 630e6b6d Kostas Papadimitriou
# documentation are those of the authors and should not be
31 630e6b6d Kostas Papadimitriou
# interpreted as representing official policies, either expressed
32 630e6b6d Kostas Papadimitriou
# or implied, of GRNET S.A.
33 630e6b6d Kostas Papadimitriou
34 3d08cdca Sofia Papagiannaki
import astakos.im.messages as astakos_messages
35 3d08cdca Sofia Papagiannaki
36 3d08cdca Sofia Papagiannaki
from astakos.im.models import ApprovalTerms
37 630e6b6d Kostas Papadimitriou
from astakos.im.tests.common import *
38 3d08cdca Sofia Papagiannaki
39 630e6b6d Kostas Papadimitriou
from django.core import urlresolvers
40 3d08cdca Sofia Papagiannaki
from django.utils.translation import ugettext as _
41 3d08cdca Sofia Papagiannaki
42 3d08cdca Sofia Papagiannaki
import os
43 630e6b6d Kostas Papadimitriou
44 630e6b6d Kostas Papadimitriou
45 630e6b6d Kostas Papadimitriou
class TestViews(TestCase):
46 630e6b6d Kostas Papadimitriou
47 630e6b6d Kostas Papadimitriou
    def test_user_views(self):
48 630e6b6d Kostas Papadimitriou
        user = get_local_user('user@synnefo.org')
49 630e6b6d Kostas Papadimitriou
        r = self.client.get(reverse('api_access'), follow=True)
50 630e6b6d Kostas Papadimitriou
        self.assertRedirects(r, reverse_with_next('api_access'))
51 630e6b6d Kostas Papadimitriou
52 630e6b6d Kostas Papadimitriou
        self.client.login(username='user@synnefo.org', password='password')
53 630e6b6d Kostas Papadimitriou
        r = self.client.get(reverse('api_access'), follow=True)
54 630e6b6d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
55 630e6b6d Kostas Papadimitriou
56 630e6b6d Kostas Papadimitriou
        r = self.client.get(reverse('api_access_config'))
57 630e6b6d Kostas Papadimitriou
        self.assertContains(r, user.auth_token)
58 3d08cdca Sofia Papagiannaki
59 3d08cdca Sofia Papagiannaki
60 3d08cdca Sofia Papagiannaki
class TestApprovalTerms(TestCase):
61 3d08cdca Sofia Papagiannaki
    def tearDown(self):
62 3d08cdca Sofia Papagiannaki
        os.remove('terms')
63 3d08cdca Sofia Papagiannaki
64 3d08cdca Sofia Papagiannaki
        ApprovalTerms.objects.get(location='terms').delete()
65 3d08cdca Sofia Papagiannaki
66 3d08cdca Sofia Papagiannaki
    def test_approval_terms(self):
67 3d08cdca Sofia Papagiannaki
        r = self.client.get(reverse('latest_terms'), follow=True)
68 3d08cdca Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
69 3d08cdca Sofia Papagiannaki
        self.assertContains(r, _(astakos_messages.NO_APPROVAL_TERMS))
70 3d08cdca Sofia Papagiannaki
71 3d08cdca Sofia Papagiannaki
        r = self.client.post(reverse('latest_terms'), follow=True)
72 3d08cdca Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
73 3d08cdca Sofia Papagiannaki
        self.assertContains(r, _(astakos_messages.NO_APPROVAL_TERMS))
74 3d08cdca Sofia Papagiannaki
75 3d08cdca Sofia Papagiannaki
        # add terms
76 3d08cdca Sofia Papagiannaki
        f = open('terms', 'w+')
77 3d08cdca Sofia Papagiannaki
        f.write('This are some terms')
78 3d08cdca Sofia Papagiannaki
        f.close()
79 3d08cdca Sofia Papagiannaki
80 3d08cdca Sofia Papagiannaki
        terms = ApprovalTerms(location='terms')
81 3d08cdca Sofia Papagiannaki
        terms.save()
82 3d08cdca Sofia Papagiannaki
83 3d08cdca Sofia Papagiannaki
        self.user = get_local_user('user@synnefo.org')
84 3d08cdca Sofia Papagiannaki
        self.assertTrue(not self.user.signed_terms)
85 3d08cdca Sofia Papagiannaki
        self.assertTrue(self.user.date_signed_terms is None)
86 3d08cdca Sofia Papagiannaki
        self.user_client = get_user_client(self.user.username)
87 3d08cdca Sofia Papagiannaki
88 3d08cdca Sofia Papagiannaki
        r = self.client.get(reverse('latest_terms'))
89 3d08cdca Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
90 3d08cdca Sofia Papagiannaki
        self.assertTemplateUsed(r, 'im/approval_terms.html')
91 3d08cdca Sofia Papagiannaki
        # assert there is no form
92 3d08cdca Sofia Papagiannaki
        self.assertNotContains(r, 'I agree with the terms')
93 3d08cdca Sofia Papagiannaki
94 3d08cdca Sofia Papagiannaki
        r = self.client.post(reverse('latest_terms'), follow=False)
95 3d08cdca Sofia Papagiannaki
        self.assertEqual(r.status_code, 302)
96 3d08cdca Sofia Papagiannaki
        # assert redirect to login
97 3d08cdca Sofia Papagiannaki
        self.assertTrue('Location' in r)
98 3d08cdca Sofia Papagiannaki
        self.assertTrue(r['Location'].find(reverse('login')) != -1)
99 3d08cdca Sofia Papagiannaki
100 3d08cdca Sofia Papagiannaki
        r = self.user_client.get(reverse('latest_terms'), follow=True)
101 3d08cdca Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
102 3d08cdca Sofia Papagiannaki
        self.assertTemplateUsed(r, 'im/approval_terms.html')
103 3d08cdca Sofia Papagiannaki
        # assert there is form
104 3d08cdca Sofia Papagiannaki
        self.assertContains(r, 'I agree with the terms')
105 3d08cdca Sofia Papagiannaki
106 3d08cdca Sofia Papagiannaki
        r = self.user_client.post(reverse('latest_terms'), follow=True)
107 3d08cdca Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
108 3d08cdca Sofia Papagiannaki
        self.assertFormError(r, 'approval_terms_form', 'has_signed_terms',
109 3d08cdca Sofia Papagiannaki
                             _(astakos_messages.SIGN_TERMS))
110 3d08cdca Sofia Papagiannaki
111 3d08cdca Sofia Papagiannaki
        r = self.user_client.post(reverse('latest_terms'),
112 3d08cdca Sofia Papagiannaki
                                  {'has_signed_terms': True},
113 3d08cdca Sofia Papagiannaki
                                  follow=True)
114 3d08cdca Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
115 3d08cdca Sofia Papagiannaki
116 3d08cdca Sofia Papagiannaki
        user = AstakosUser.objects.get(username=self.user.username)
117 3d08cdca Sofia Papagiannaki
        self.assertTrue(user.signed_terms)