~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to djangoratings/tests.py

  • Committer: franku
  • Date: 2018-05-06 08:20:39 UTC
  • mto: This revision was merged to the branch mainline in revision 494.
  • Revision ID: somal@arcor.de-20180506082039-v8n40alffhi2ulct
This is an Attribute error

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import unittest
 
2
import random
 
3
 
 
4
from django.db import models
 
5
from django.contrib.auth.models import User
 
6
from django.contrib.contenttypes.models import ContentType
 
7
from django.conf import settings
 
8
 
 
9
from exceptions import *
 
10
from models import Vote, SimilarUser, IgnoredObject
 
11
from fields import AnonymousRatingField, RatingField
 
12
 
 
13
settings.RATINGS_VOTES_PER_IP = 1
 
14
 
 
15
 
 
16
class RatingTestModel(models.Model):
 
17
    rating = AnonymousRatingField(range=2, can_change_vote=True)
 
18
    rating2 = RatingField(range=2, can_change_vote=False)
 
19
 
 
20
    def __unicode__(self):
 
21
        return unicode(self.pk)
 
22
 
 
23
 
 
24
class RatingTestCase(unittest.TestCase):
 
25
 
 
26
    def testRatings(self):
 
27
        instance = RatingTestModel.objects.create()
 
28
 
 
29
        # Test adding votes
 
30
        instance.rating.add(score=1, user=None, ip_address='127.0.0.1')
 
31
        self.assertEquals(instance.rating.score, 1)
 
32
        self.assertEquals(instance.rating.votes, 1)
 
33
 
 
34
        # Test adding votes
 
35
        instance.rating.add(score=2, user=None, ip_address='127.0.0.2')
 
36
        self.assertEquals(instance.rating.score, 3)
 
37
        self.assertEquals(instance.rating.votes, 2)
 
38
 
 
39
        # Test changing of votes
 
40
        instance.rating.add(score=2, user=None, ip_address='127.0.0.1')
 
41
        self.assertEquals(instance.rating.score, 4)
 
42
        self.assertEquals(instance.rating.votes, 2)
 
43
 
 
44
        # Test users
 
45
        user = User.objects.create(username=str(random.randint(0, 100000000)))
 
46
        user2 = User.objects.create(username=str(random.randint(0, 100000000)))
 
47
 
 
48
        instance.rating.add(score=2, user=user, ip_address='127.0.0.3')
 
49
        self.assertEquals(instance.rating.score, 6)
 
50
        self.assertEquals(instance.rating.votes, 3)
 
51
 
 
52
        instance.rating2.add(score=2, user=user, ip_address='127.0.0.3')
 
53
        self.assertEquals(instance.rating2.score, 2)
 
54
        self.assertEquals(instance.rating2.votes, 1)
 
55
 
 
56
        self.assertRaises(IPLimitReached, instance.rating2.add,
 
57
                          score=2, user=user2, ip_address='127.0.0.3')
 
58
 
 
59
        # Test deletion hooks
 
60
        Vote.objects.filter(ip_address='127.0.0.3').delete()
 
61
 
 
62
        instance = RatingTestModel.objects.get(pk=instance.pk)
 
63
 
 
64
        self.assertEquals(instance.rating.score, 4)
 
65
        self.assertEquals(instance.rating.votes, 2)
 
66
        self.assertEquals(instance.rating2.score, 0)
 
67
        self.assertEquals(instance.rating2.votes, 0)
 
68
 
 
69
 
 
70
class RecommendationsTestCase(unittest.TestCase):
 
71
 
 
72
    def setUp(self):
 
73
        self.instance = RatingTestModel.objects.create()
 
74
        self.instance2 = RatingTestModel.objects.create()
 
75
        self.instance3 = RatingTestModel.objects.create()
 
76
        self.instance4 = RatingTestModel.objects.create()
 
77
        self.instance5 = RatingTestModel.objects.create()
 
78
 
 
79
        # Test users
 
80
        self.user = User.objects.create(
 
81
            username=str(random.randint(0, 100000000)))
 
82
        self.user2 = User.objects.create(
 
83
            username=str(random.randint(0, 100000000)))
 
84
 
 
85
    def testExclusions(self):
 
86
        Vote.objects.all().delete()
 
87
 
 
88
        self.instance.rating.add(
 
89
            score=1, user=self.user, ip_address='127.0.0.1')
 
90
        self.instance2.rating.add(
 
91
            score=1, user=self.user, ip_address='127.0.0.1')
 
92
        self.instance3.rating.add(
 
93
            score=1, user=self.user, ip_address='127.0.0.1')
 
94
        self.instance4.rating.add(
 
95
            score=1, user=self.user, ip_address='127.0.0.1')
 
96
        self.instance5.rating.add(
 
97
            score=1, user=self.user, ip_address='127.0.0.1')
 
98
        self.instance.rating.add(
 
99
            score=1, user=self.user2, ip_address='127.0.0.2')
 
100
 
 
101
        # we should only need to call this once
 
102
        SimilarUser.objects.update_recommendations()
 
103
 
 
104
        self.assertEquals(SimilarUser.objects.count(), 2)
 
105
 
 
106
        recs = list(SimilarUser.objects.get_recommendations(
 
107
            self.user2, RatingTestModel))
 
108
        self.assertEquals(len(recs), 4)
 
109
 
 
110
        ct = ContentType.objects.get_for_model(RatingTestModel)
 
111
 
 
112
        IgnoredObject.objects.create(
 
113
            user=self.user2, content_type=ct, object_id=self.instance2.pk)
 
114
 
 
115
        recs = list(SimilarUser.objects.get_recommendations(
 
116
            self.user2, RatingTestModel))
 
117
        self.assertEquals(len(recs), 3)
 
118
 
 
119
        IgnoredObject.objects.create(
 
120
            user=self.user2, content_type=ct, object_id=self.instance3.pk)
 
121
        IgnoredObject.objects.create(
 
122
            user=self.user2, content_type=ct, object_id=self.instance4.pk)
 
123
 
 
124
        recs = list(SimilarUser.objects.get_recommendations(
 
125
            self.user2, RatingTestModel))
 
126
        self.assertEquals(len(recs), 1)
 
127
        self.assertEquals(recs, [self.instance5])
 
128
 
 
129
        self.instance5.rating.add(
 
130
            score=1, user=self.user2, ip_address='127.0.0.2')
 
131
        recs = list(SimilarUser.objects.get_recommendations(
 
132
            self.user2, RatingTestModel))
 
133
        self.assertEquals(len(recs), 0)
 
134
 
 
135
    def testSimilarUsers(self):
 
136
        Vote.objects.all().delete()
 
137
 
 
138
        self.instance.rating.add(
 
139
            score=1, user=self.user, ip_address='127.0.0.1')
 
140
        self.instance2.rating.add(
 
141
            score=1, user=self.user, ip_address='127.0.0.1')
 
142
        self.instance3.rating.add(
 
143
            score=1, user=self.user, ip_address='127.0.0.1')
 
144
        self.instance4.rating.add(
 
145
            score=1, user=self.user, ip_address='127.0.0.1')
 
146
        self.instance5.rating.add(
 
147
            score=1, user=self.user, ip_address='127.0.0.1')
 
148
        self.instance.rating.add(
 
149
            score=1, user=self.user2, ip_address='127.0.0.2')
 
150
        self.instance2.rating.add(
 
151
            score=1, user=self.user2, ip_address='127.0.0.2')
 
152
        self.instance3.rating.add(
 
153
            score=1, user=self.user2, ip_address='127.0.0.2')
 
154
 
 
155
        SimilarUser.objects.update_recommendations()
 
156
 
 
157
        self.assertEquals(SimilarUser.objects.count(), 2)
 
158
 
 
159
        recs = list(SimilarUser.objects.get_recommendations(
 
160
            self.user2, RatingTestModel))
 
161
        self.assertEquals(len(recs), 2)
 
162
 
 
163
        self.instance4.rating.add(
 
164
            score=1, user=self.user2, ip_address='127.0.0.2')
 
165
 
 
166
        SimilarUser.objects.update_recommendations()
 
167
 
 
168
        self.assertEquals(SimilarUser.objects.count(), 2)
 
169
 
 
170
        recs = list(SimilarUser.objects.get_recommendations(
 
171
            self.user2, RatingTestModel))
 
172
        self.assertEquals(len(recs), 1)
 
173
        self.assertEquals(recs, [self.instance5])
 
174
 
 
175
        self.instance5.rating.add(
 
176
            score=1, user=self.user2, ip_address='127.0.0.2')
 
177
 
 
178
        SimilarUser.objects.update_recommendations()
 
179
 
 
180
        self.assertEquals(SimilarUser.objects.count(), 2)
 
181
 
 
182
        recs = list(SimilarUser.objects.get_recommendations(
 
183
            self.user2, RatingTestModel))
 
184
        self.assertEquals(len(recs), 0)