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
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
|
|||
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 | View Code Duplication | def test_followers_following(self): |
|
0 ignored issues
–
show
|
|||
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 | View Code Duplication | def test_actor(self): |
|
0 ignored issues
–
show
|
|||
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 | View Code Duplication | def test_model(self): |
|
0 ignored issues
–
show
|
|||
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 |