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