comments_test.rb
5.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require_relative 'test_helper'
class CommentsTest < ActiveSupport::TestCase
def setup
login_api
end
should 'not list comments if user has no permission to view the source article' do
person = fast_create(Person)
article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false)
assert !article.published?
get "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
assert_equal 403, last_response.status
end
should 'not return comment if user has no permission to view the source article' do
person = fast_create(Person)
article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false)
comment = article.comments.create!(:body => "another comment", :author => user.person)
assert !article.published?
get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}"
assert_equal 403, last_response.status
end
should 'not comment an article if user has no permission to view it' do
person = fast_create(Person)
article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false)
assert !article.published?
post "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
assert_equal 403, last_response.status
end
should 'return comments of an article' do
article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
article.comments.create!(:body => "some comment", :author => user.person)
article.comments.create!(:body => "another comment", :author => user.person)
get "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
json = JSON.parse(last_response.body)
assert_equal 200, last_response.status
assert_equal 2, json["comments"].length
end
should 'return comment of an article' do
article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
comment = article.comments.create!(:body => "another comment", :author => user.person)
get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}"
json = JSON.parse(last_response.body)
assert_equal 200, last_response.status
assert_equal comment.id, json['comment']['id']
end
should 'comment an article' do
article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
body = 'My comment'
params.merge!({:body => body})
post "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
json = JSON.parse(last_response.body)
assert_equal 201, last_response.status
assert_equal body, json['comment']['body']
end
should 'comment creation define the source' do
amount = Comment.count
article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
body = 'My comment'
params.merge!({:body => body})
post "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
assert_equal amount + 1, Comment.count
comment = Comment.last
assert_not_nil comment.source
end
should 'paginate comments' do
article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
5.times { article.comments.create!(:body => "some comment", :author => user.person) }
params[:per_page] = 3
get "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
json = JSON.parse(last_response.body)
assert_equal 200, last_response.status
assert_equal 3, json["comments"].length
end
should 'return only root comments' do
article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
comment1 = article.comments.create!(:body => "some comment", :author => user.person)
comment2 = article.comments.create!(:body => "another comment", :author => user.person, :reply_of_id => comment1.id)
params[:without_reply] = true
get "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
json = JSON.parse(last_response.body)
assert_equal 200, last_response.status
assert_equal [comment1.id], json["comments"].map { |c| c['id'] }
end
should 'call plugin hotspot to filter unavailable comments' do
class Plugin1 < Noosfero::Plugin
def unavailable_comments(scope)
scope.where(:user_agent => 'Jack')
end
end
Noosfero::Plugin.stubs(:all).returns([Plugin1.name])
Environment.default.enable_plugin(Plugin1)
article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
c1 = fast_create(Comment, source_id: article.id, body: "comment 1")
c2 = fast_create(Comment, source_id: article.id, body: "comment 2", :user_agent => 'Jack')
get "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
json = JSON.parse(last_response.body)
assert_equal ["comment 2"], json["comments"].map {|c| c["body"]}
end
should 'do not return comments marked as spam' do
article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
c1 = fast_create(Comment, source_id: article.id, body: "comment 1", spam: true)
c2 = fast_create(Comment, source_id: article.id, body: "comment 2")
get "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
json = JSON.parse(last_response.body)
assert_equal ["comment 2"], json["comments"].map {|c| c["body"]}
end
end