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
9
from exceptions import *
10
from models import Vote, SimilarUser, IgnoredObject
11
from fields import AnonymousRatingField, RatingField
13
settings.RATINGS_VOTES_PER_IP = 1
16
class RatingTestModel(models.Model):
17
rating = AnonymousRatingField(range=2, can_change_vote=True)
18
rating2 = RatingField(range=2, can_change_vote=False)
20
def __unicode__(self):
21
return unicode(self.pk)
24
class RatingTestCase(unittest.TestCase):
26
def testRatings(self):
27
instance = RatingTestModel.objects.create()
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)
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)
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)
45
user = User.objects.create(username=str(random.randint(0, 100000000)))
46
user2 = User.objects.create(username=str(random.randint(0, 100000000)))
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)
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)
56
self.assertRaises(IPLimitReached, instance.rating2.add,
57
score=2, user=user2, ip_address='127.0.0.3')
60
Vote.objects.filter(ip_address='127.0.0.3').delete()
62
instance = RatingTestModel.objects.get(pk=instance.pk)
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)
70
class RecommendationsTestCase(unittest.TestCase):
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()
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)))
85
def testExclusions(self):
86
Vote.objects.all().delete()
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')
101
# we should only need to call this once
102
SimilarUser.objects.update_recommendations()
104
self.assertEquals(SimilarUser.objects.count(), 2)
106
recs = list(SimilarUser.objects.get_recommendations(
107
self.user2, RatingTestModel))
108
self.assertEquals(len(recs), 4)
110
ct = ContentType.objects.get_for_model(RatingTestModel)
112
IgnoredObject.objects.create(
113
user=self.user2, content_type=ct, object_id=self.instance2.pk)
115
recs = list(SimilarUser.objects.get_recommendations(
116
self.user2, RatingTestModel))
117
self.assertEquals(len(recs), 3)
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)
124
recs = list(SimilarUser.objects.get_recommendations(
125
self.user2, RatingTestModel))
126
self.assertEquals(len(recs), 1)
127
self.assertEquals(recs, [self.instance5])
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)
135
def testSimilarUsers(self):
136
Vote.objects.all().delete()
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')
155
SimilarUser.objects.update_recommendations()
157
self.assertEquals(SimilarUser.objects.count(), 2)
159
recs = list(SimilarUser.objects.get_recommendations(
160
self.user2, RatingTestModel))
161
self.assertEquals(len(recs), 2)
163
self.instance4.rating.add(
164
score=1, user=self.user2, ip_address='127.0.0.2')
166
SimilarUser.objects.update_recommendations()
168
self.assertEquals(SimilarUser.objects.count(), 2)
170
recs = list(SimilarUser.objects.get_recommendations(
171
self.user2, RatingTestModel))
172
self.assertEquals(len(recs), 1)
173
self.assertEquals(recs, [self.instance5])
175
self.instance5.rating.add(
176
score=1, user=self.user2, ip_address='127.0.0.2')
178
SimilarUser.objects.update_recommendations()
180
self.assertEquals(SimilarUser.objects.count(), 2)
182
recs = list(SimilarUser.objects.get_recommendations(
183
self.user2, RatingTestModel))
184
self.assertEquals(len(recs), 0)