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
15
class RatingTestModel(models.Model):
16
rating = AnonymousRatingField(range=2, can_change_vote=True)
17
rating2 = RatingField(range=2, can_change_vote=False)
19
def __unicode__(self):
20
return unicode(self.pk)
22
class RatingTestCase(unittest.TestCase):
23
def testRatings(self):
24
instance = RatingTestModel.objects.create()
27
instance.rating.add(score=1, user=None, ip_address='127.0.0.1')
28
self.assertEquals(instance.rating.score, 1)
29
self.assertEquals(instance.rating.votes, 1)
32
instance.rating.add(score=2, user=None, ip_address='127.0.0.2')
33
self.assertEquals(instance.rating.score, 3)
34
self.assertEquals(instance.rating.votes, 2)
36
# Test changing of votes
37
instance.rating.add(score=2, user=None, ip_address='127.0.0.1')
38
self.assertEquals(instance.rating.score, 4)
39
self.assertEquals(instance.rating.votes, 2)
42
user = User.objects.create(username=str(random.randint(0, 100000000)))
43
user2 = User.objects.create(username=str(random.randint(0, 100000000)))
45
instance.rating.add(score=2, user=user, ip_address='127.0.0.3')
46
self.assertEquals(instance.rating.score, 6)
47
self.assertEquals(instance.rating.votes, 3)
49
instance.rating2.add(score=2, user=user, ip_address='127.0.0.3')
50
self.assertEquals(instance.rating2.score, 2)
51
self.assertEquals(instance.rating2.votes, 1)
53
self.assertRaises(IPLimitReached, instance.rating2.add, score=2, user=user2, ip_address='127.0.0.3')
56
Vote.objects.filter(ip_address='127.0.0.3').delete()
58
instance = RatingTestModel.objects.get(pk=instance.pk)
60
self.assertEquals(instance.rating.score, 4)
61
self.assertEquals(instance.rating.votes, 2)
62
self.assertEquals(instance.rating2.score, 0)
63
self.assertEquals(instance.rating2.votes, 0)
65
class RecommendationsTestCase(unittest.TestCase):
67
self.instance = RatingTestModel.objects.create()
68
self.instance2 = RatingTestModel.objects.create()
69
self.instance3 = RatingTestModel.objects.create()
70
self.instance4 = RatingTestModel.objects.create()
71
self.instance5 = RatingTestModel.objects.create()
74
self.user = User.objects.create(username=str(random.randint(0, 100000000)))
75
self.user2 = User.objects.create(username=str(random.randint(0, 100000000)))
77
def testExclusions(self):
78
Vote.objects.all().delete()
80
self.instance.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
81
self.instance2.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
82
self.instance3.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
83
self.instance4.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
84
self.instance5.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
85
self.instance.rating.add(score=1, user=self.user2, ip_address='127.0.0.2')
87
# we should only need to call this once
88
SimilarUser.objects.update_recommendations()
90
self.assertEquals(SimilarUser.objects.count(), 2)
92
recs = list(SimilarUser.objects.get_recommendations(self.user2, RatingTestModel))
93
self.assertEquals(len(recs), 4)
95
ct = ContentType.objects.get_for_model(RatingTestModel)
97
IgnoredObject.objects.create(user=self.user2, content_type=ct, object_id=self.instance2.pk)
99
recs = list(SimilarUser.objects.get_recommendations(self.user2, RatingTestModel))
100
self.assertEquals(len(recs), 3)
102
IgnoredObject.objects.create(user=self.user2, content_type=ct, object_id=self.instance3.pk)
103
IgnoredObject.objects.create(user=self.user2, content_type=ct, object_id=self.instance4.pk)
105
recs = list(SimilarUser.objects.get_recommendations(self.user2, RatingTestModel))
106
self.assertEquals(len(recs), 1)
107
self.assertEquals(recs, [self.instance5])
109
self.instance5.rating.add(score=1, user=self.user2, ip_address='127.0.0.2')
110
recs = list(SimilarUser.objects.get_recommendations(self.user2, RatingTestModel))
111
self.assertEquals(len(recs), 0)
113
def testSimilarUsers(self):
114
Vote.objects.all().delete()
116
self.instance.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
117
self.instance2.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
118
self.instance3.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
119
self.instance4.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
120
self.instance5.rating.add(score=1, user=self.user, ip_address='127.0.0.1')
121
self.instance.rating.add(score=1, user=self.user2, ip_address='127.0.0.2')
122
self.instance2.rating.add(score=1, user=self.user2, ip_address='127.0.0.2')
123
self.instance3.rating.add(score=1, user=self.user2, ip_address='127.0.0.2')
125
SimilarUser.objects.update_recommendations()
127
self.assertEquals(SimilarUser.objects.count(), 2)
129
recs = list(SimilarUser.objects.get_recommendations(self.user2, RatingTestModel))
130
self.assertEquals(len(recs), 2)
132
self.instance4.rating.add(score=1, user=self.user2, ip_address='127.0.0.2')
134
SimilarUser.objects.update_recommendations()
136
self.assertEquals(SimilarUser.objects.count(), 2)
138
recs = list(SimilarUser.objects.get_recommendations(self.user2, RatingTestModel))
139
self.assertEquals(len(recs), 1)
140
self.assertEquals(recs, [self.instance5])
142
self.instance5.rating.add(score=1, user=self.user2, ip_address='127.0.0.2')
144
SimilarUser.objects.update_recommendations()
146
self.assertEquals(SimilarUser.objects.count(), 2)
148
recs = list(SimilarUser.objects.get_recommendations(self.user2, RatingTestModel))
149
self.assertEquals(len(recs), 0)
b'\\ No newline at end of file'