LTE.__repr__()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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