Completed
Pull Request — master (#388)
by
unknown
24s
created

TestVerbTransformer   A

Complexity

Total Complexity 0

Size/Duplication

Total Lines 4
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
rs 10
wmc 0
1
from json import loads
2
from datetime import datetime
3
from inspect import getargspec
4
5
from django.apps import apps
6
from django.test import TestCase
7
from django.template import Template, Context
8
from django.utils.six import text_type
9
from django.utils.timesince import timesince
10
from django.contrib.sites.models import Site
11
from django.contrib.auth import get_user_model
12
from django.contrib.auth.models import Group
13
from django.contrib.contenttypes.models import ContentType
14
15
try:
16
    from django.core.urlresolvers import reverse
17
except ImportError:
18
    from django.urls import reverse
19
20
from actstream.models import Action, Follow
21
from actstream.registry import register, unregister
22
from actstream.actions import follow
23
from actstream.signals import action
24
from actstream.transformers import DefaultVerbTransformer
25
26
27
def render(src, **ctx):
28
    return Template('{% load activity_tags %}' + src).render(Context(ctx))
29
30
31
class LTE(int):
32
    def __new__(cls, n):
33
        obj = super(LTE, cls).__new__(cls, n)
34
        obj.n = n
35
        return obj
36
37
    def __eq__(self, other):
38
        return other <= self.n
39
40
    def __repr__(self):
41
        return "<= %s" % self.n
42
43
44
class TestVerbTransformer(DefaultVerbTransformer):
45
    verb_map = {
46
        'block': 'blocking',
47
        'quit': 'quiting',
48
    }
49
50
51
class ActivityBaseTestCase(TestCase):
52
    actstream_models = ()
53
    maxDiff = None
54
55
    def setUp(self):
56
        self.User = get_user_model()
57
        self.user_ct = ContentType.objects.get_for_model(self.User)
58
        register(self.User)
59
        for model in self.actstream_models:
60
            register(model)
61
62
    def assertSetEqual(self, l1, l2, msg=None, domap=True):
63
        if domap:
64
            l1 = map(text_type, l1)
65
        self.assertSequenceEqual(set(l1), set(l2), msg)
66
67
    def assertAllIn(self, bits, string):
68
        for bit in bits:
69
            self.assertIn(bit, string)
70
71
    def assertJSON(self, string):
72
        return loads(string)
73
74
    def tearDown(self):
75
        for model in self.actstream_models:
76
            model = apps.get_model(*model.split('.'))
77
            unregister(model)
78
            model.objects.all().delete()
79
        Action.objects.all().delete()
80
        Follow.objects.all().delete()
81
        self.User.objects.all().delete()
82
83
    def capture(self, viewname, *args):
84
        response = self.client.get(reverse(viewname, args=args))
85
        content = response.content.decode()
86
        if response['Content-Type'] == 'application/json':
87
            return loads(content)
88
        return content
89
90
91
class DataTestCase(ActivityBaseTestCase):
92
    actstream_models = ('auth.Group', 'sites.Site')
93
94
    def setUp(self):
95
        self.testdate = datetime(2000, 1, 1)
96
        self.timesince = timesince(self.testdate).encode('utf8').replace(
97
            b'\xc2\xa0', b' ').decode()
98
        self.group_ct = ContentType.objects.get_for_model(Group)
99
        super(DataTestCase, self).setUp()
100
        self.group = Group.objects.create(name='CoolGroup')
101
        self.another_group = Group.objects.create(name='NiceGroup')
102
        if 'email' in getargspec(self.User.objects.create_superuser).args:
103
            self.user1 = self.User.objects.create_superuser('admin', '[email protected]', 'admin')
104
            self.user2 = self.User.objects.create_user('Two', '[email protected]')
105
            self.user3 = self.User.objects.create_user('Three', '[email protected]')
106
            self.user4 = self.User.objects.create_user('Four', '[email protected]')
107
        else:
108
            self.user1 = self.User.objects.create_superuser('admin', 'admin')
109
            self.user2 = self.User.objects.create_user('Two')
110
            self.user3 = self.User.objects.create_user('Three')
111
            self.user4 = self.User.objects.create_user('Four')
112
        # User1 joins group
113
        self.user1.groups.add(self.group)
114
        self.join_action = action.send(self.user1, verb='joined',
115
                                       target=self.group,
116
                                       timestamp=self.testdate)[0][1]
117
118
        # User1 follows User2
119
        follow(self.user1, self.user2, timestamp=self.testdate)
120
121
        # User2 joins group
122
        self.user2.groups.add(self.group)
123
        action.send(self.user2, verb='joined', target=self.group,
124
                    timestamp=self.testdate)
125
126
        # User2 follows group
127
        follow(self.user2, self.group, timestamp=self.testdate)
128
129
        # User1 comments on group
130
        # Use a site object here and predict the "__unicode__ method output"
131
        action.send(self.user1, verb='commented on', target=self.group,
132
                    timestamp=self.testdate)
133
134
        self.comment = Site.objects.create(
135
            domain="admin: Sweet Group!...")
136
137
        # Group responds to comment
138
        action.send(self.group, verb='responded to', target=self.comment,
139
                    timestamp=self.testdate)
140
141
        # User 3 did something but doesn't following someone
142
        action.send(self.user3, verb='liked actstream', timestamp=self.testdate)
143
144
        # User4 likes group
145
        follow(self.user4, self.another_group, timestamp=self.testdate, flag='liking')
146
        # User4 watches group
147
        follow(self.user4, self.another_group, timestamp=self.testdate, flag='watching')
148
        # User4 likes User1
149
        follow(self.user4, self.user1, timestamp=self.testdate, flag='liking')
150
        # User4 blacklist user3
151
        follow(self.user4, self.user3, timestamp=self.testdate, flag='blacklisting')
152
153
        # create a new object to don't interfere with previous tests
154
        self.another_user = self.User.objects.create_user('Another')
155
        self.another_comment = Site.objects.create(
156
            domain="admin: Sweet Comment!...")
157