##// END OF EJS Templates
Fixed the tests. Added exists() method for the post.
neko259 -
r8:b62ef70f default
parent child Browse files
Show More
@@ -1,72 +1,78 b''
1 from django.db import models
1 from django.db import models
2 from django.utils import timezone
2 from django.utils import timezone
3
3
4 NO_PARENT = -1
4 NO_PARENT = -1
5 NO_IP = '0.0.0.0'
5 NO_IP = '0.0.0.0'
6 UNKNOWN_UA = ''
6 UNKNOWN_UA = ''
7 DIR_IMAGES = 'images'
7 DIR_IMAGES = 'images'
8
8
9 class PostManager(models.Manager):
9 class PostManager(models.Manager):
10
10
11 def create_post(self, title, text, image = None, parent_id = NO_PARENT,
11 def create_post(self, title, text, image = None, parent_id = NO_PARENT,
12 ip = NO_IP):
12 ip = NO_IP):
13 post = self.create(title = title,
13 post = self.create(title = title,
14 text = text,
14 text = text,
15 pub_time = timezone.now(),
15 pub_time = timezone.now(),
16 parent = parent_id,
16 parent = parent_id,
17 image = image,
17 image = image,
18 poster_ip = ip,
18 poster_ip = ip,
19 poster_user_agent = UNKNOWN_UA)
19 poster_user_agent = UNKNOWN_UA)
20
20
21 return post
21 return post
22
22
23 def delete_post(self, post):
23 def delete_post(self, post):
24 children = self.filter(parent = post.id)
24 children = self.filter(parent = post.id)
25 for child in children:
25 for child in children:
26 self.delete_post(child)
26 self.delete_post(child)
27 post.delete()
27 post.delete()
28
28
29 def delete_posts_by_ip(self, ip):
29 def delete_posts_by_ip(self, ip):
30 posts = self.filter(poster_ip = ip)
30 posts = self.filter(poster_ip = ip)
31 for post in posts:
31 for post in posts:
32 self.delete_post(post)
32 self.delete_post(post)
33
33
34 def get_threads(self, tag = None):
34 def get_threads(self, tag = None):
35 if tag is None:
35 if tag is None:
36 threads = self.filter(parent = NO_PARENT)
36 threads = self.filter(parent = NO_PARENT)
37 else:
37 else:
38 threads = self.filter(parent = NO_PARENT, tag = tag)
38 threads = self.filter(parent = NO_PARENT, tag = tag)
39
39
40 return threads
40 return threads
41
41
42 def get_thread(self, opening_post_id):
42 def get_thread(self, opening_post_id):
43 opening_post = self.get(opening_post_id)
43 opening_post = self.get(opening_post_id)
44 replies = self.filter(parent = opening_post_id)
44 replies = self.filter(parent = opening_post_id)
45
45
46 return [opening_post, replies]
46 return [opening_post, replies]
47
47
48 def exists(self, post_id):
49 posts = Post.objects.filter(id = post_id)
50
51 return len(posts) == 0
52
48
53
49 class Tag(models.Model):
54 class Tag(models.Model):
50 """
55 """
51 A tag is a text node assigned to the post. The tag serves as a board
56 A tag is a text node assigned to the post. The tag serves as a board
52 section. There can be multiple tags for each message
57 section. There can be multiple tags for each message
53 """
58 """
54
59
55 name = models.CharField(max_length = 100)
60 name = models.CharField(max_length = 100)
56
61
62
57 class Post(models.Model):
63 class Post(models.Model):
58 """A post is a message."""
64 """A post is a message."""
59
65
60 objects = PostManager()
66 objects = PostManager()
61
67
62 title = models.CharField(max_length = 100)
68 title = models.CharField(max_length = 100)
63 pub_time = models.DateTimeField()
69 pub_time = models.DateTimeField()
64 text = models.TextField()
70 text = models.TextField()
65 image = models.ImageField(upload_to = DIR_IMAGES)
71 image = models.ImageField(upload_to = DIR_IMAGES)
66 poster_ip = models.IPAddressField()
72 poster_ip = models.IPAddressField()
67 poster_user_agent = models.TextField()
73 poster_user_agent = models.TextField()
68 parent = models.BigIntegerField()
74 parent = models.BigIntegerField()
69 tags = models.ManyToManyField(Tag)
75 tags = models.ManyToManyField(Tag)
70
76
71 def __unicode__(self):
77 def __unicode__(self):
72 return self.title + ' (' + self.text + ')' No newline at end of file
78 return self.title + ' (' + self.text + ')'
@@ -1,30 +1,33 b''
1 from django.test import TestCase
1 from django.test import TestCase
2 import boards
2 import boards
3
3
4 from boards.models import Post
4 from boards.models import Post
5
5
6
6 class BoardTests(TestCase):
7 class BoardTests(TestCase):
7
8
8 def create_post(self):
9 def create_post(self):
9 return Post.objects.create_post(title = 'title',
10 return Post.objects.create_post(title = 'title',
10 text = 'text')
11 text = 'text')
11
12
12 def test_post_add(self):
13 def test_post_add(self):
13 post = self.create_post()
14 post = self.create_post()
14
15
15 self.assertIsNotNone(post)
16 self.assertIsNotNone(post)
16 self.assertEqual(boards.models.NO_PARENT, post.parent)
17 self.assertEqual(boards.models.NO_PARENT, post.parent)
17
18
18 def test_delete_post(self):
19 def test_delete_post(self):
19 post = self.create_post()
20 post = self.create_post()
21 post_id = post.id
20
22
21 Post.objects.delete_post(post)
23 Post.objects.delete_post(post)
22
24
23 self.assertIsNone(post)
25 self.assertTrue(Post.objects.exists(post_id))
24
26
25 def test_delete_posts_by_ip(self):
27 def test_delete_posts_by_ip(self):
26 post = self.create_post()
28 post = self.create_post()
29 post_id = post.id
27
30
28 Post.objects.delete_posts_by_ip('0.0.0.0')
31 Post.objects.delete_posts_by_ip('0.0.0.0')
29
32
30 self.assertIsNone(post)
33 self.assertTrue(Post.objects.exists(post_id))
General Comments 0
You need to be logged in to leave comments. Login now