Completed
Push — master ( 6b05c7...3c8f2c )
by
unknown
8s
created

DataTestCase   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 61
rs 10
wmc 2

1 Method

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