Reduced User#is_guest?, User#is_admin?, User#is_mod? calls
[punbbonrails.git] / test / unit / forum_test.rb
blob3d5ecd8a9775974ce2c8106ccd005285b20f429d
1 require File.dirname(__FILE__) + '/../test_helper'
3 require 'forum'
4 require 'topic'
5 require 'category'
7 class ForumTest < Test::Unit::TestCase
8   fixtures :forums, :topics, :categories, :settings, :users, :groups, :forum_perms
10   def test_topics
11     assert_equal forums(:f1).topics.length, 2
12     assert_equal forums(:f2).topics.length, 2
13     assert_equal forums(:f3).topics.length, 0
14   end
16   def test_category
17     assert_equal forums(:f1).category.cat_name, 'category one'
18     assert_equal forums(:f2).category.cat_name, 'category two'
19     assert_equal forums(:f3).category.cat_name, 'category one'
20   end
22   def test_update_on_forum
23     f = Forum.find_by_id 1
24     f.update_on_topic
25     assert_equal f.num_topics, 2
26     assert_equal f.num_posts, 5
27     assert_equal f.last_post, topics(:f12).last_post
28     assert_equal f.last_post_id, 12
29     assert_equal f.last_poster, 'f12'
31     f = Forum.find_by_id 2
32     f.update_on_topic
33     assert_equal f.num_topics, 2
34     assert_equal f.num_posts, 9
35     assert_equal f.last_post, topics(:f22).last_post
36     assert_equal f.last_post_id, 22
37     assert_equal f.last_poster, 'f22'
39     f = Forum.find_by_id 3
40     f.update_on_topic
41     assert_equal f.num_topics, 0
42     assert_equal f.num_posts, 0
43     assert_nil f.last_post
44     assert_nil f.last_post_id
45     assert_nil f.last_poster
46   end
48   def test_can_post?
49     f = Forum.new
50     f.category = categories(:cat1)
51     f.forum_name = 'blah'
52     f.redirect_url = 'blah'
53     f.save!
54     for u in [users(:guest), users(:mod), users(:admin)]
55       assert_equal false,f.can_post?(u)
56       uu = u.clone
57       uu.group = groups(:can_post_topics)
58       assert_equal false, f.can_post?(uu)
59       uu.group = groups(:cant_post_topics)
60       assert_equal false, f.can_post?(uu)
61     end
62     fp = ForumPerm.new
63     fp.forum_id = f.id
64     fp.group_id = users(:u100).group.id
65     users(:u100).group.g_post_topics = true
66     fp.read_forum = true
67     fp.save!
68     for url in [nil, '']
69       f.redirect_url = url
70       assert_equal true, f.can_post?(users(:admin))
71       assert_equal true, f.can_post?(users(:mod))
72       uu = users(:guest).clone
73       uu.group = groups(:can_post_topics)
74       assert_equal true, f.can_post?(uu)
75       uu.group = groups(:cant_post_topics)
76       assert_equal false, f.can_post?(uu)
78       fp.post_topics = true
79       fp.save!
80       assert_equal true, f.can_post?(users(:u100))
81       fp.post_topics = false
82       fp.save!
83       assert_equal false, f.can_post?(users(:u100))
84     end
85   end
87   def test_can_view?
88     f = forums(:f1)
89     assert_equal true, f.can_view?(users(:u100))
90     fp = ForumPerm.new
91     fp.forum_id = f.id
92     fp.group_id = users(:u100).group.id
93     fp.read_forum = true
94     fp.save!
95     assert_equal true, f.can_view?(users(:u100))
96     fp.read_forum = false
97     fp.save!
98     assert_equal false, f.can_view?(users(:u100))
99   end
101   def test_delete
102     forums(:f1).destroy
103     assert_raise(ActiveRecord::RecordNotFound) {Topic.find_by_id(topics(:f11).id)}
104     assert_raise(ActiveRecord::RecordNotFound) { Topic.find_by_id(topics(:f12).id)}
105     assert_not_nil Topic.find_by_id(topics(:f21).id)
106     assert_not_nil Topic.find_by_id(topics(:f22).id)
107   end
109   def test_forum_name
110     a = Forum.new
111     a.category = categories(:cat1)
112     a.forum_name = 'a'
113     assert_equal true, a.save
114     a.forum_name = 'a'*80
115     assert_equal true, a.save
116     a.forum_name = ''
117     assert_equal false, a.save
118     a.forum_name = 'a'*81
119     assert_equal false, a.save
120   end
122   def test_redirect_url
123     a = Forum.new
124     a.category = categories(:cat1)
125     assert_equal true, a.save
126     a.redirect_url = 'a'
127     assert_equal true, a.save
128     a.redirect_url = 'a'*100
129     assert_equal true, a.save
130     a.redirect_url = ''
131     assert_equal true, a.save
132     a.redirect_url = 'a'*101
133     assert_equal false, a.save
134   end
136   def test_last_poster
137     a = Forum.new
138     a.category = categories(:cat1)
139     assert_equal true, a.save
140     a.last_poster = 'a'
141     assert_equal true, a.save
142     a.last_poster = 'a'*200
143     assert_equal true, a.save
144     a.last_poster = ''
145     assert_equal true, a.save
146     a.last_poster = 'a'*201
147     assert_equal false, a.save
148   end
150   def test_remove_moderator
151     f = forums(:f1)
152     f.moderators = {users(:u100).id => 'u100', users(:u101).id => 'u101'}
153     f.save!
154     Forum.remove_moderator(users(:u100))
155     f.reload
156     assert_not_nil f.moderators[users(:u101).id]
157     assert_nil     f.moderators[users(:u100).id]
158   end