Completed
Pull Request — master (#345)
by
unknown
29s
created

ViewsTest.test_follow_unfollow_with_flag()   A

Complexity

Conditions 1

Size

Total Lines 20

Duplication

Lines 20
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
dl 20
loc 20
rs 9.4285
1
from django.core.urlresolvers import reverse
2
from django.utils.six.moves.urllib.parse import urlencode
3
4
from actstream import models
5
from actstream.tests.base import DataTestCase
6
7
8
class ViewsTest(DataTestCase):
9
    def setUp(self):
10
        super(ViewsTest, self).setUp()
11
        self.client.login(username='admin', password='admin')
12
13
    def get(self, viewname, *args, **params):
14
        return self.client.get('%s?%s' % (reverse(viewname, args=args),
15
                                          urlencode(params)))
16
17
    def assertQSEqual(self, qs1, qs2):
18
        attrs = lambda item: dict([(key, value)
19
                                   for key, value in item.__dict__.items()
20
                                   if not key.startswith('_')])
21
        self.assertEqual(len(qs1), len(qs2))
22
        for i, item in enumerate(qs1):
23
            self.assertDictEqual(attrs(item), attrs(qs2[i]))
24
25 View Code Duplication
    def test_follow_unfollow(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
26
        response = self.get('actstream_follow', self.user_ct.pk, self.user3.pk)
27
        self.assertEqual(response.status_code, 201)
28
        self.assertEqual(len(response.templates), 0)
29
        follow = {'user': self.user1, 'content_type': self.user_ct,
30
                  'object_id': self.user3.pk}
31
        action = {'actor_content_type': self.user_ct, 'actor_object_id': self.user1.pk,
32
                  'target_content_type': self.user_ct, 'target_object_id': self.user3.pk,
33
                  'verb': 'started following'}
34
        models.Follow.objects.get(**follow)
35
        models.Action.objects.get(**action)
36
37
        response = self.get('actstream_unfollow', self.user_ct.pk, self.user3.pk)
38
        self.assertEqual(response.status_code, 204)
39
        self.assertEqual(len(response.templates), 0)
40
        self.assertRaises(models.Follow.DoesNotExist, models.Follow.objects.get, **follow)
41
42
        response = self.get('actstream_unfollow', self.user_ct.pk, self.user3.pk, next='/redirect/')
43
        self.assertEqual(response.status_code, 302)
44
        self.assertTrue(response['Location'].endswith('/redirect/'))
45
46 View Code Duplication
    def test_follow_unfollow_with_flag(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
47
        response = self.get('actstream_follow', self.user_ct.pk, self.user3.pk, 'watching')
48
        self.assertEqual(response.status_code, 201)
49
        self.assertEqual(len(response.templates), 0)
50
        follow = {'user': self.user1, 'content_type': self.user_ct,
51
                  'object_id': self.user3.pk, 'flag': 'watching'}
52
        action = {'actor_content_type': self.user_ct, 'actor_object_id': self.user1.pk,
53
                  'target_content_type': self.user_ct, 'target_object_id': self.user3.pk,
54
                  'verb': 'started watching'}
55
        models.Follow.objects.get(**follow)
56
        models.Action.objects.get(**action)
57
58
        response = self.get('actstream_unfollow', self.user_ct.pk, self.user3.pk, 'watching')
59
        self.assertEqual(response.status_code, 204)
60
        self.assertEqual(len(response.templates), 0)
61
        self.assertRaises(models.Follow.DoesNotExist, models.Follow.objects.get, **follow)
62
63
        response = self.get('actstream_unfollow', self.user_ct.pk, self.user3.pk, 'watching', next='/redirect/')
64
        self.assertEqual(response.status_code, 302)
65
        self.assertTrue(response['Location'].endswith('/redirect/'))
66
67
    def test_stream(self):
68
        response = self.get('actstream')
69
        self.assertTemplateUsed(response, 'actstream/actor.html')
70
        self.assertTemplateUsed(response, 'base.html')
71
        self.assertEqual(response.context['actor'], self.user1)
72
        self.assertEqual(response.context['ctype'], self.user_ct)
73
        self.assertQSEqual(response.context['action_list'],
74
                           models.user_stream(self.user1))
75
76
    def test_followers_following(self):
77
        response = self.get('actstream_followers', self.user_ct.pk, self.user2.pk)
78
        self.assertTemplateUsed(response, 'actstream/followers.html')
79
        self.assertEqual(response.context['user'], self.user1)
80
        self.assertQSEqual(response.context['followers'],
81
                           models.followers(self.user2))
82
83
        response = self.get('actstream_following', self.user2.pk)
84
        self.assertTemplateUsed(response, 'actstream/following.html')
85
        self.assertEqual(response.context['user'], self.user2)
86
        self.assertQSEqual(response.context['following'],
87
                           models.following(self.user2))
88
89
    def test_followers_following_with_flag(self):
90
        response = self.get('actstream_followers', self.user_ct.pk, self.user2.pk, 'watching')
91
        self.assertTemplateUsed(response, 'actstream/followers.html')
92
        self.assertEqual(response.context['user'], self.user1)
93
        self.assertQSEqual(response.context['followers'],
94
                           models.followers(self.user2, flag='watching'))
95
96
        response = self.get('actstream_following', self.user2.pk, 'watching')
97
        self.assertTemplateUsed(response, 'actstream/following.html')
98
        self.assertEqual(response.context['user'], self.user2)
99
        self.assertQSEqual(response.context['following'],
100
                           models.following(self.user2, flag='watching'))
101
102
    def test_user(self):
103
        response = self.get('actstream_user', self.user2.username)
104
        self.assertTemplateUsed(response, 'actstream/actor.html')
105
        self.assertEqual(response.context['ctype'], self.user_ct)
106
        self.assertEqual(response.context['actor'], self.user2)
107
        self.assertQSEqual(response.context['action_list'],
108
                           models.user_stream(self.user2))
109
110
    def test_detail(self):
111
        response = self.get('actstream_detail', self.join_action.pk)
112
        self.assertTemplateUsed(response, 'actstream/detail.html')
113
        self.assertTemplateUsed(response, 'actstream/action.html')
114
        self.assertEqual(response.context['action'], self.join_action)
115
116
    def test_actor(self):
117
        response = self.get('actstream_actor', self.user_ct.pk, self.user2.pk)
118
        self.assertTemplateUsed(response, 'actstream/actor.html')
119
        self.assertTemplateUsed(response, 'base.html')
120
        self.assertEqual(response.context['ctype'], self.user_ct)
121
        self.assertEqual(response.context['actor'], self.user2)
122
        self.assertQSEqual(response.context['action_list'],
123
                           models.actor_stream(self.user2))
124
125
    def test_model(self):
126
        response = self.get('actstream_model', self.user_ct.pk)
127
        self.assertTemplateUsed(response, 'actstream/actor.html')
128
        self.assertTemplateUsed(response, 'base.html')
129
        self.assertEqual(response.context['ctype'], self.user_ct)
130
        self.assertEqual(response.context['actor'], self.user_ct.model_class())
131
        self.assertQSEqual(response.context['action_list'],
132
                           models.model_stream(self.user1))
133