Commit 043be0b11be290f4e68b24f7c29e36af15cdb1cd
1 parent
0694e6bf
Exists in
staging
and in
32 other branches
Separate api tests
Showing
38 changed files
with
2480 additions
and
2467 deletions
Show diff stats
.gitlab-ci.yml
.travis.yml
lib/tasks/test.rake
script/ci
... | ... | @@ -0,0 +1,22 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class ActivitiesTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + login_api | |
7 | + end | |
8 | + | |
9 | + should 'get activity from profile' do | |
10 | + person = fast_create(Person) | |
11 | + organization = fast_create(Organization) | |
12 | + assert_difference 'organization.activities_count' do | |
13 | + ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => organization | |
14 | + organization.reload | |
15 | + end | |
16 | + get "/api/v1/profiles/#{organization.id}/activities?#{params.to_query}" | |
17 | + json = JSON.parse(last_response.body) | |
18 | + assert 1, json["activities"].count | |
19 | + assert_equal organization.activities.map(&:activity).first.id, json["activities"].first["id"] | |
20 | + end | |
21 | + | |
22 | +end | ... | ... |
... | ... | @@ -0,0 +1,29 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class MyPlugin < Noosfero::Plugin;end | |
4 | +class MyPlugin::API;end | |
5 | + | |
6 | +class APITest < ActiveSupport::TestCase | |
7 | + | |
8 | + should 'endpoint should not be available if its plugin is unavailable' do | |
9 | + endpoint = mock() | |
10 | + environment = Environment.default | |
11 | + environment.stubs(:plugin_enabled?).returns(false) | |
12 | + endpoint.stubs(:options).returns({:for => MyPlugin::API}) | |
13 | + | |
14 | + assert Noosfero::API::API.endpoint_unavailable?(endpoint, environment) | |
15 | + end | |
16 | + | |
17 | + should 'endpoint should be available if its plugin is available' do | |
18 | + class MyPlugin < Noosfero::Plugin;end | |
19 | + class MyPlugin::API;end | |
20 | + | |
21 | + endpoint = mock() | |
22 | + environment = Environment.default | |
23 | + environment.stubs(:plugin_enabled?).returns(true) | |
24 | + endpoint.stubs(:options).returns({:for => MyPlugin::API}) | |
25 | + | |
26 | + assert !Noosfero::API::API.endpoint_unavailable?(endpoint, environment) | |
27 | + end | |
28 | + | |
29 | +end | ... | ... |
... | ... | @@ -0,0 +1,667 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class ArticlesTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + login_api | |
7 | + end | |
8 | + | |
9 | + should 'list articles' do | |
10 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
11 | + get "/api/v1/articles/?#{params.to_query}" | |
12 | + json = JSON.parse(last_response.body) | |
13 | + assert_includes json["articles"].map { |a| a["id"] }, article.id | |
14 | + end | |
15 | + | |
16 | + should 'get profile homepage' do | |
17 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
18 | + person.home_page=article | |
19 | + person.save! | |
20 | + | |
21 | + get "/api/v1/profiles/#{person.id}/home_page?#{params.to_query}" | |
22 | + json = JSON.parse(last_response.body) | |
23 | + assert_equal article.id, json["article"]["id"] | |
24 | + end | |
25 | + | |
26 | + should 'not list forbidden article when listing articles' do | |
27 | + person = fast_create(Person) | |
28 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
29 | + assert !article.published? | |
30 | + | |
31 | + get "/api/v1/articles?#{params.to_query}" | |
32 | + json = JSON.parse(last_response.body) | |
33 | + assert_not_includes json['articles'].map {|a| a['id']}, article.id | |
34 | + end | |
35 | + | |
36 | + should 'return article by id' do | |
37 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
38 | + get "/api/v1/articles/#{article.id}?#{params.to_query}" | |
39 | + json = JSON.parse(last_response.body) | |
40 | + assert_equal article.id, json["article"]["id"] | |
41 | + end | |
42 | + | |
43 | + should 'not return article if user has no permission to view it' do | |
44 | + person = fast_create(Person, :environment_id => environment.id) | |
45 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
46 | + assert !article.published? | |
47 | + | |
48 | + get "/api/v1/articles/#{article.id}?#{params.to_query}" | |
49 | + assert_equal 403, last_response.status | |
50 | + end | |
51 | + | |
52 | + should 'follow a article identified by id' do | |
53 | + article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
54 | + post "/api/v1/articles/#{article.id}/follow?#{params.to_query}" | |
55 | + json = JSON.parse(last_response.body) | |
56 | + | |
57 | + assert_not_equal 401, last_response.status | |
58 | + assert_equal true, json['success'] | |
59 | + end | |
60 | + | |
61 | + should 'return the followers count of an article' do | |
62 | + article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
63 | + article.person_followers << @person | |
64 | + | |
65 | + get "/api/v1/articles/#{article.id}?#{params.to_query}" | |
66 | + json = JSON.parse(last_response.body) | |
67 | + | |
68 | + assert_equal 200, last_response.status | |
69 | + assert_equal 1, json['article']['followers_count'] | |
70 | + end | |
71 | + | |
72 | + should 'return the followers of a article identified by id' do | |
73 | + article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
74 | + | |
75 | + article_follower = ArticleFollower.new | |
76 | + article_follower.article = article | |
77 | + article_follower.person = @person | |
78 | + article_follower.save! | |
79 | + | |
80 | + get "/api/v1/articles/#{article.id}/followers?#{params.to_query}" | |
81 | + json = JSON.parse(last_response.body) | |
82 | + | |
83 | + assert_equal 200, last_response.status | |
84 | + assert_equal 1, json['total_followers'] | |
85 | + end | |
86 | + | |
87 | + should 'list articles followed by me' do | |
88 | + article1 = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
89 | + fast_create(Article, :profile_id => user.person.id, :name => "Some other thing") | |
90 | + article1.person_followers << @person | |
91 | + get "/api/v1/articles/followed_by_me?#{params.to_query}" | |
92 | + json = JSON.parse(last_response.body) | |
93 | + assert_equal [article1.id], json['articles'].map { |a| a['id'] } | |
94 | + end | |
95 | + | |
96 | + | |
97 | + should 'list article children' do | |
98 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
99 | + child1 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
100 | + child2 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
101 | + get "/api/v1/articles/#{article.id}/children?#{params.to_query}" | |
102 | + json = JSON.parse(last_response.body) | |
103 | + assert_equivalent [child1.id, child2.id], json["articles"].map { |a| a["id"] } | |
104 | + end | |
105 | + | |
106 | + should 'list public article children for not logged in access' do | |
107 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
108 | + child1 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
109 | + child2 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
110 | + get "/api/v1/articles/#{article.id}/children" | |
111 | + json = JSON.parse(last_response.body) | |
112 | + assert_equivalent [child1.id, child2.id], json["articles"].map { |a| a["id"] } | |
113 | + end | |
114 | + | |
115 | + should 'not list children of forbidden article' do | |
116 | + person = fast_create(Person, :environment_id => environment.id) | |
117 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
118 | + child1 = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing") | |
119 | + child2 = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing") | |
120 | + get "/api/v1/articles/#{article.id}/children?#{params.to_query}" | |
121 | + assert_equal 403, last_response.status | |
122 | + end | |
123 | + | |
124 | + should 'not return child of forbidden article' do | |
125 | + person = fast_create(Person, :environment_id => environment.id) | |
126 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
127 | + child = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing") | |
128 | + get "/api/v1/articles/#{article.id}/children/#{child.id}?#{params.to_query}" | |
129 | + assert_equal 403, last_response.status | |
130 | + end | |
131 | + | |
132 | + should 'not return private child' do | |
133 | + person = fast_create(Person, :environment_id => environment.id) | |
134 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing") | |
135 | + child = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing", :published => false) | |
136 | + get "/api/v1/articles/#{article.id}/children/#{child.id}?#{params.to_query}" | |
137 | + assert_equal 403, last_response.status | |
138 | + end | |
139 | + | |
140 | + should 'not list private child' do | |
141 | + person = fast_create(Person, :environment_id => environment.id) | |
142 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing") | |
143 | + child = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing", :published => false) | |
144 | + get "/api/v1/articles/#{article.id}/children?#{params.to_query}" | |
145 | + json = JSON.parse(last_response.body) | |
146 | + assert_not_includes json['articles'].map {|a| a['id']}, child.id | |
147 | + end | |
148 | + | |
149 | + should 'perform a vote in a article identified by id' do | |
150 | + article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
151 | + @params[:value] = 1 | |
152 | + | |
153 | + post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
154 | + json = JSON.parse(last_response.body) | |
155 | + | |
156 | + assert_not_equal 401, last_response.status | |
157 | + assert_equal true, json['vote'] | |
158 | + end | |
159 | + | |
160 | + expose_attributes = %w(id body abstract created_at title author profile categories image votes_for votes_against setting position hits start_date end_date tag_list parent children children_count) | |
161 | + | |
162 | + expose_attributes.each do |attr| | |
163 | + should "expose article #{attr} attribute by default" do | |
164 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
165 | + get "/api/v1/articles/?#{params.to_query}" | |
166 | + json = JSON.parse(last_response.body) | |
167 | + assert json["articles"].last.has_key?(attr) | |
168 | + end | |
169 | + end | |
170 | + | |
171 | + should 'not perform a vote twice in same article' do | |
172 | + article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
173 | + @params[:value] = 1 | |
174 | + ## Perform a vote twice in API should compute only one vote | |
175 | + post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
176 | + post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
177 | + | |
178 | + total = article.votes_total | |
179 | + | |
180 | + assert_equal 1, total | |
181 | + end | |
182 | + | |
183 | + should 'not perform a vote in favor and against a proposal' do | |
184 | + article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
185 | + @params[:value] = 1 | |
186 | + ## Perform a vote in favor a proposal | |
187 | + post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
188 | + json = JSON.parse(last_response.body) | |
189 | + assert_equal 201, last_response.status | |
190 | + ## Perform a vote against a proposal | |
191 | + @params[:value] = -1 | |
192 | + post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
193 | + json = JSON.parse(last_response.body) | |
194 | + ## The api should not allow to save this vote | |
195 | + assert_equal 400, last_response.status | |
196 | + end | |
197 | + | |
198 | + should "update body of article created by me" do | |
199 | + new_value = "Another body" | |
200 | + params[:article] = {:body => new_value} | |
201 | + article = fast_create(Article, :profile_id => person.id) | |
202 | + post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
203 | + json = JSON.parse(last_response.body) | |
204 | + assert_equal new_value, json["article"]["body"] | |
205 | + end | |
206 | + | |
207 | + should "update title of article created by me" do | |
208 | + new_value = "Another name" | |
209 | + params[:article] = {:name => new_value} | |
210 | + article = fast_create(Article, :profile_id => person.id) | |
211 | + post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
212 | + json = JSON.parse(last_response.body) | |
213 | + assert_equal new_value, json["article"]["title"] | |
214 | + end | |
215 | + | |
216 | + should 'not update article of another user' do | |
217 | + another_person = fast_create(Person, :environment_id => environment.id) | |
218 | + article = fast_create(Article, :profile_id => another_person.id) | |
219 | + params[:article] = {:title => 'Some title'} | |
220 | + post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
221 | + assert_equal 403, last_response.status | |
222 | + end | |
223 | + | |
224 | + should 'not update article without permission in community' do | |
225 | + community = fast_create(Community, :environment_id => environment.id) | |
226 | + article = fast_create(Article, :profile_id => community.id) | |
227 | + params[:article] = {:name => 'New title'} | |
228 | + post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
229 | + assert_equal 403, last_response.status | |
230 | + end | |
231 | + | |
232 | + | |
233 | + should 'update article of community if user has permission' do | |
234 | + community = fast_create(Community, :environment_id => environment.id) | |
235 | + give_permission(person, 'post_content', community) | |
236 | + article = fast_create(Article, :profile_id => community.id) | |
237 | + new_value = "Another body" | |
238 | + params[:article] = {:body => new_value} | |
239 | + post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
240 | + json = JSON.parse(last_response.body) | |
241 | + assert_equal new_value, json["article"]["body"] | |
242 | + end | |
243 | + | |
244 | + should 'list articles with pagination' do | |
245 | + Article.destroy_all | |
246 | + article_one = fast_create(Article, :profile_id => user.person.id, :name => "Another thing", :created_at => 2.days.ago) | |
247 | + article_two = fast_create(Article, :profile_id => user.person.id, :name => "Some thing", :created_at => 1.day.ago) | |
248 | + | |
249 | + params[:page] = 1 | |
250 | + params[:per_page] = 1 | |
251 | + get "/api/v1/articles/?#{params.to_query}" | |
252 | + json_page_one = JSON.parse(last_response.body) | |
253 | + | |
254 | + params[:page] = 2 | |
255 | + params[:per_page] = 1 | |
256 | + get "/api/v1/articles/?#{params.to_query}" | |
257 | + json_page_two = JSON.parse(last_response.body) | |
258 | + | |
259 | + assert_includes json_page_one["articles"].map { |a| a["id"] }, article_two.id | |
260 | + assert_not_includes json_page_one["articles"].map { |a| a["id"] }, article_one.id | |
261 | + | |
262 | + assert_includes json_page_two["articles"].map { |a| a["id"] }, article_one.id | |
263 | + assert_not_includes json_page_two["articles"].map { |a| a["id"] }, article_two.id | |
264 | + end | |
265 | + | |
266 | + should 'list articles with timestamp' do | |
267 | + article_one = fast_create(Article, :profile_id => user.person.id, :name => "Another thing") | |
268 | + article_two = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
269 | + | |
270 | + article_one.updated_at = Time.now + 3.hours | |
271 | + article_one.save! | |
272 | + | |
273 | + params[:timestamp] = Time.now + 1.hours | |
274 | + get "/api/v1/articles/?#{params.to_query}" | |
275 | + json = JSON.parse(last_response.body) | |
276 | + | |
277 | + assert_includes json["articles"].map { |a| a["id"] }, article_one.id | |
278 | + assert_not_includes json["articles"].map { |a| a["id"] }, article_two.id | |
279 | + end | |
280 | + | |
281 | + ############################# | |
282 | + # Profile Articles # | |
283 | + ############################# | |
284 | + | |
285 | + profile_kinds = %w(community person enterprise) | |
286 | + profile_kinds.each do |kind| | |
287 | + should "return article by #{kind}" do | |
288 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
289 | + article = fast_create(Article, :profile_id => profile.id, :name => "Some thing") | |
290 | + get "/api/v1/#{kind.pluralize}/#{profile.id}/articles/#{article.id}?#{params.to_query}" | |
291 | + json = JSON.parse(last_response.body) | |
292 | + assert_equal article.id, json["article"]["id"] | |
293 | + end | |
294 | + | |
295 | + should "not return article by #{kind} if user has no permission to view it" do | |
296 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
297 | + article = fast_create(Article, :profile_id => profile.id, :name => "Some thing", :published => false) | |
298 | + assert !article.published? | |
299 | + | |
300 | + get "/api/v1/#{kind.pluralize}/#{profile.id}/articles/#{article.id}?#{params.to_query}" | |
301 | + assert_equal 403, last_response.status | |
302 | + end | |
303 | + | |
304 | + should "not list forbidden article when listing articles by #{kind}" do | |
305 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
306 | + article = fast_create(Article, :profile_id => profile.id, :name => "Some thing", :published => false) | |
307 | + assert !article.published? | |
308 | + | |
309 | + get "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
310 | + json = JSON.parse(last_response.body) | |
311 | + assert_not_includes json['articles'].map {|a| a['id']}, article.id | |
312 | + end | |
313 | + | |
314 | + should "return article by #{kind} and path" do | |
315 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
316 | + parent_article = Folder.create!(:profile => profile, :name => "Parent Folder") | |
317 | + article = Article.create!(:profile => profile, :name => "Some thing", :parent => parent_article) | |
318 | + | |
319 | + params[:path] = parent_article.slug+'/'+article.slug | |
320 | + get "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
321 | + json = JSON.parse(last_response.body) | |
322 | + assert_equal article.id, json["article"]["id"] | |
323 | + end | |
324 | + | |
325 | + should "not return article by #{kind} and path if user has no permission to view it" do | |
326 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
327 | + parent_article = Folder.create!(:profile => profile, :name => "Parent Folder") | |
328 | + article = Article.create!(:profile => profile, :name => "Some thing", :parent => parent_article, :published => false) | |
329 | + | |
330 | + assert !article.published? | |
331 | + | |
332 | + params[:path] = parent_article.slug+'/'+article.slug | |
333 | + get "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
334 | + assert_equal 403, last_response.status | |
335 | + end | |
336 | + end | |
337 | + | |
338 | + ############################# | |
339 | + # Group Profile Articles # | |
340 | + ############################# | |
341 | + | |
342 | + group_kinds = %w(community enterprise) | |
343 | + group_kinds.each do |kind| | |
344 | + should "#{kind}: create article" do | |
345 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
346 | + give_permission(user.person, 'post_content', profile) | |
347 | + params[:article] = {:name => "Title"} | |
348 | + post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
349 | + json = JSON.parse(last_response.body) | |
350 | + assert_equal "Title", json["article"]["title"] | |
351 | + end | |
352 | + | |
353 | + should "#{kind}: do not create article if user has no permission to post content" do | |
354 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
355 | + give_permission(user.person, 'invite_members', profile) | |
356 | + params[:article] = {:name => "Title"} | |
357 | + post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
358 | + assert_equal 403, last_response.status | |
359 | + end | |
360 | + | |
361 | + should "#{kind} create article with parent" do | |
362 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
363 | + Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
364 | + article = fast_create(Article) | |
365 | + | |
366 | + params[:article] = {:name => "Title", :parent_id => article.id} | |
367 | + post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
368 | + json = JSON.parse(last_response.body) | |
369 | + assert_equal article.id, json["article"]["parent"]["id"] | |
370 | + end | |
371 | + | |
372 | + should "#{kind} create article with content type passed as parameter" do | |
373 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
374 | + Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
375 | + | |
376 | + Article.delete_all | |
377 | + params[:article] = {:name => "Title"} | |
378 | + params[:content_type] = 'TextArticle' | |
379 | + post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
380 | + json = JSON.parse(last_response.body) | |
381 | + | |
382 | + assert_kind_of TextArticle, Article.last | |
383 | + end | |
384 | + | |
385 | + should "#{kind}: create article of TinyMceArticle type if no content type is passed as parameter" do | |
386 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
387 | + Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
388 | + | |
389 | + params[:article] = {:name => "Title"} | |
390 | + post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
391 | + json = JSON.parse(last_response.body) | |
392 | + | |
393 | + assert_kind_of TinyMceArticle, Article.last | |
394 | + end | |
395 | + | |
396 | + should "#{kind}: not create article with invalid article content type" do | |
397 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
398 | + profile.add_member(user.person) | |
399 | + | |
400 | + params[:article] = {:name => "Title"} | |
401 | + params[:content_type] = 'Person' | |
402 | + post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
403 | + json = JSON.parse(last_response.body) | |
404 | + | |
405 | + assert_equal 403, last_response.status | |
406 | + end | |
407 | + | |
408 | + should "#{kind} create article defining the correct profile" do | |
409 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
410 | + Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
411 | + | |
412 | + params[:article] = {:name => "Title"} | |
413 | + post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
414 | + json = JSON.parse(last_response.body) | |
415 | + | |
416 | + assert_equal profile.id, json['article']['profile']['id'] | |
417 | + end | |
418 | + | |
419 | + should "#{kind}: create article defining the created_by" do | |
420 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
421 | + Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
422 | + | |
423 | + params[:article] = {:name => "Title"} | |
424 | + post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
425 | + json = JSON.parse(last_response.body) | |
426 | + | |
427 | + assert_equal user.person, Article.last.created_by | |
428 | + end | |
429 | + | |
430 | + should "#{kind}: create article defining the last_changed_by" do | |
431 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
432 | + Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
433 | + | |
434 | + params[:article] = {:name => "Title"} | |
435 | + post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
436 | + json = JSON.parse(last_response.body) | |
437 | + | |
438 | + assert_equal user.person, Article.last.last_changed_by | |
439 | + end | |
440 | + end | |
441 | + | |
442 | + ############################# | |
443 | + # Person Articles # | |
444 | + ############################# | |
445 | + | |
446 | + should 'create article in a person' do | |
447 | + params[:article] = {:name => "Title"} | |
448 | + post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
449 | + json = JSON.parse(last_response.body) | |
450 | + assert_equal "Title", json["article"]["title"] | |
451 | + end | |
452 | + | |
453 | + should 'person do not create article if user has no permission to post content' do | |
454 | + person = fast_create(Person, :environment_id => environment.id) | |
455 | + params[:article] = {:name => "Title"} | |
456 | + post "/api/v1/people/#{person.id}/articles?#{params.to_query}" | |
457 | + assert_equal 403, last_response.status | |
458 | + end | |
459 | + | |
460 | + should 'person create article with parent' do | |
461 | + article = fast_create(Article) | |
462 | + | |
463 | + params[:article] = {:name => "Title", :parent_id => article.id} | |
464 | + post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
465 | + json = JSON.parse(last_response.body) | |
466 | + assert_equal article.id, json["article"]["parent"]["id"] | |
467 | + end | |
468 | + | |
469 | + should 'person create article with content type passed as parameter' do | |
470 | + Article.delete_all | |
471 | + params[:article] = {:name => "Title"} | |
472 | + params[:content_type] = 'TextArticle' | |
473 | + post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
474 | + json = JSON.parse(last_response.body) | |
475 | + | |
476 | + assert_kind_of TextArticle, Article.last | |
477 | + end | |
478 | + | |
479 | + should 'person create article of TinyMceArticle type if no content type is passed as parameter' do | |
480 | + params[:article] = {:name => "Title"} | |
481 | + post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
482 | + json = JSON.parse(last_response.body) | |
483 | + | |
484 | + assert_kind_of TinyMceArticle, Article.last | |
485 | + end | |
486 | + | |
487 | + should 'person not create article with invalid article content type' do | |
488 | + params[:article] = {:name => "Title"} | |
489 | + params[:content_type] = 'Person' | |
490 | + post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
491 | + json = JSON.parse(last_response.body) | |
492 | + | |
493 | + assert_equal 403, last_response.status | |
494 | + end | |
495 | + | |
496 | + should 'person create article defining the correct profile' do | |
497 | + params[:article] = {:name => "Title"} | |
498 | + post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
499 | + json = JSON.parse(last_response.body) | |
500 | + | |
501 | + assert_equal user.person, Article.last.profile | |
502 | + end | |
503 | + | |
504 | + should 'person create article defining the created_by' do | |
505 | + params[:article] = {:name => "Title"} | |
506 | + post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
507 | + json = JSON.parse(last_response.body) | |
508 | + | |
509 | + assert_equal user.person, Article.last.created_by | |
510 | + end | |
511 | + | |
512 | + should 'person create article defining the last_changed_by' do | |
513 | + params[:article] = {:name => "Title"} | |
514 | + post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
515 | + json = JSON.parse(last_response.body) | |
516 | + | |
517 | + assert_equal user.person, Article.last.last_changed_by | |
518 | + end | |
519 | + | |
520 | + should 'list article children with partial fields' do | |
521 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
522 | + child1 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
523 | + params[:fields] = [:title] | |
524 | + get "/api/v1/articles/#{article.id}/children?#{params.to_query}" | |
525 | + json = JSON.parse(last_response.body) | |
526 | + assert_equal ['title'], json['articles'].first.keys | |
527 | + end | |
528 | + | |
529 | + should 'suggest article children' do | |
530 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
531 | + params[:target_id] = user.person.id | |
532 | + params[:article] = {:name => "Article name", :body => "Article body"} | |
533 | + assert_difference "SuggestArticle.count" do | |
534 | + post "/api/v1/articles/#{article.id}/children/suggest?#{params.to_query}" | |
535 | + end | |
536 | + json = JSON.parse(last_response.body) | |
537 | + assert_equal 'SuggestArticle', json['task']['type'] | |
538 | + end | |
539 | + | |
540 | + should 'suggest event children' do | |
541 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
542 | + params[:target_id] = user.person.id | |
543 | + params[:article] = {:name => "Article name", :body => "Article body", :type => "Event"} | |
544 | + assert_difference "SuggestArticle.count" do | |
545 | + post "/api/v1/articles/#{article.id}/children/suggest?#{params.to_query}" | |
546 | + end | |
547 | + json = JSON.parse(last_response.body) | |
548 | + assert_equal 'SuggestArticle', json['task']['type'] | |
549 | + end | |
550 | + | |
551 | + should 'update hit attribute of article children' do | |
552 | + a1 = fast_create(Article, :profile_id => user.person.id) | |
553 | + a2 = fast_create(Article, :parent_id => a1.id, :profile_id => user.person.id) | |
554 | + a3 = fast_create(Article, :parent_id => a1.id, :profile_id => user.person.id) | |
555 | + get "/api/v1/articles/#{a1.id}/children?#{params.to_query}" | |
556 | + json = JSON.parse(last_response.body) | |
557 | + assert_equal [1, 1], json['articles'].map { |a| a['hits']} | |
558 | + assert_equal [0, 1, 1], [a1.reload.hits, a2.reload.hits, a3.reload.hits] | |
559 | + end | |
560 | + | |
561 | + should 'update hit attribute of article specific children' do | |
562 | + a1 = fast_create(Article, :profile_id => user.person.id) | |
563 | + a2 = fast_create(Article, :parent_id => a1.id, :profile_id => user.person.id) | |
564 | + get "/api/v1/articles/#{a1.id}/children/#{a2.id}?#{params.to_query}" | |
565 | + json = JSON.parse(last_response.body) | |
566 | + assert_equal 1, json['article']['hits'] | |
567 | + end | |
568 | + | |
569 | + should 'list all events of a community in a given category' do | |
570 | + co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
571 | + c1 = Category.create(environment: Environment.default, name: 'my-category') | |
572 | + c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
573 | + e1 = fast_create(Event, :profile_id => co.id) | |
574 | + e2 = fast_create(Event, :profile_id => co.id) | |
575 | + e1.categories << c1 | |
576 | + e2.categories << c2 | |
577 | + e1.save! | |
578 | + e2.save! | |
579 | + params['content_type']='Event' | |
580 | + get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
581 | + json = JSON.parse(last_response.body) | |
582 | + assert_equal json['articles'].count, 2 | |
583 | + end | |
584 | + | |
585 | + should 'list a event of a community in a given category' do | |
586 | + co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
587 | + c1 = Category.create(environment: Environment.default, name: 'my-category') | |
588 | + c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
589 | + e1 = fast_create(Event, :profile_id => co.id) | |
590 | + e2 = fast_create(Event, :profile_id => co.id) | |
591 | + e1.categories << c1 | |
592 | + e2.categories << c2 | |
593 | + e1.save! | |
594 | + e2.save! | |
595 | + params['category_ids[]']=c1.id | |
596 | + params['content_type']='Event' | |
597 | + get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
598 | + json = JSON.parse(last_response.body) | |
599 | + #should show only one article, since the other not in the same category | |
600 | + assert_equal 1, json['articles'].count | |
601 | + assert_equal e1.id, json['articles'][0]['id'] | |
602 | + end | |
603 | + | |
604 | + should 'not list uncategorized event of a community if a category is given' do | |
605 | + co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
606 | + c1 = Category.create(environment: Environment.default, name: 'my-category') | |
607 | + c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
608 | + e1 = fast_create(Event, :profile_id => co.id) | |
609 | + e2 = fast_create(Event, :profile_id => co.id) | |
610 | + e3 = fast_create(Event, :profile_id => co.id) | |
611 | + e1.categories << c1 | |
612 | + e2.categories << c2 | |
613 | + params['category_ids[]']=c1.id | |
614 | + params['content_type']='Event' | |
615 | + get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
616 | + json = JSON.parse(last_response.body) | |
617 | + assert_equal 1, json['articles'].count | |
618 | + assert_equal e1.id, json['articles'][0]['id'] | |
619 | + end | |
620 | + | |
621 | + should 'list events of a community in a given 2 categories' do | |
622 | + co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
623 | + c1 = Category.create(environment: Environment.default, name: 'my-category') | |
624 | + c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
625 | + e1 = fast_create(Event, :profile_id => co.id) | |
626 | + e2 = fast_create(Event, :profile_id => co.id) | |
627 | + e1.categories << c1 | |
628 | + e2.categories << c2 | |
629 | + e1.save! | |
630 | + e2.save! | |
631 | + params['content_type']='Event' | |
632 | + params['categories_ids'] = [c1.id, c2.id] | |
633 | + get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
634 | + json = JSON.parse(last_response.body) | |
635 | + assert_equal json['articles'].count, 2 | |
636 | + end | |
637 | + | |
638 | + should 'Show 2 events since it uses an IN operator for category instead of an OR' do | |
639 | + co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
640 | + c1 = Category.create(environment: Environment.default, name: 'my-category') | |
641 | + c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
642 | + c3 = Category.create(environment: Environment.default, name: 'extra-category') | |
643 | + e1 = fast_create(Event, :profile_id => co.id) | |
644 | + e2 = fast_create(Event, :profile_id => co.id) | |
645 | + e1.categories << c1 | |
646 | + e2.categories << c2 | |
647 | + e1.save! | |
648 | + e2.save! | |
649 | + params['content_type']='Event' | |
650 | + params['categories_ids'] = [c1.id, c2.id, c3.id] | |
651 | + get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
652 | + json = JSON.parse(last_response.body) | |
653 | + assert_equal json['articles'].count, 2 | |
654 | + end | |
655 | + | |
656 | + ARTICLE_ATTRIBUTES = %w(votes_count comments_count) | |
657 | + | |
658 | + ARTICLE_ATTRIBUTES.map do |attribute| | |
659 | + | |
660 | + define_method "test_should_expose_#{attribute}_attribute_in_article_enpoints" do | |
661 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
662 | + get "/api/v1/articles/#{article.id}?#{params.to_query}" | |
663 | + json = JSON.parse(last_response.body) | |
664 | + assert_not_nil json['article'][attribute] | |
665 | + end | |
666 | + end | |
667 | +end | ... | ... |
... | ... | @@ -0,0 +1,42 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class BoxesTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + @controller = AccountController.new | |
7 | + @request = ActionController::TestRequest.new | |
8 | + login_api | |
9 | +# @request = ActionController::TestRequest.new | |
10 | + end | |
11 | + | |
12 | + kinds= %w[Profile Community Person Enterprise Environment] | |
13 | + kinds.each do |kind| | |
14 | + should "get_boxes_from_#{kind.downcase.pluralize}" do | |
15 | + context_obj = fast_create(kind.constantize) | |
16 | + box = fast_create(Box, :owner_id => context_obj.id, :owner_type => (kind == 'Environment') ? 'Environment' : 'Profile') | |
17 | + get "/api/v1/#{kind.downcase.pluralize}/#{context_obj.id}/boxes?#{params.to_query}" | |
18 | + json = JSON.parse(last_response.body) | |
19 | + assert_equal box.id, json["boxes"].first["id"] | |
20 | + end | |
21 | + end | |
22 | + | |
23 | + should 'get boxes from default environment' do | |
24 | + Environment.delete_all | |
25 | + environment = fast_create(Environment, :is_default => true) | |
26 | + box = fast_create(Box, :owner_id => environment.id, :owner_type => 'Environment') | |
27 | + get "/api/v1/environments/default/boxes?#{params.to_query}" | |
28 | + json = JSON.parse(last_response.body) | |
29 | + assert_equal box.id, json["boxes"].first["id"] | |
30 | + end | |
31 | + | |
32 | + should 'get boxes from context environment' do | |
33 | + env = fast_create(Environment, :is_default => true) | |
34 | + env2 = fast_create(Environment).domains << Domain.new(:name => 'test.host') | |
35 | + box = fast_create(Box, :owner_id => environment.id, :owner_type => 'Environment') | |
36 | + get "/api/v1/environments/context/boxes?#{params.to_query}" | |
37 | + | |
38 | + json = JSON.parse(last_response.body) | |
39 | + assert_equal box.id, json["boxes"].first["id"] | |
40 | + end | |
41 | + | |
42 | +end | ... | ... |
... | ... | @@ -0,0 +1,97 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class CategoriesTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + login_api | |
7 | + end | |
8 | + | |
9 | + should 'list categories' do | |
10 | + category = fast_create(Category, :environment_id => environment.id) | |
11 | + get "/api/v1/categories/?#{params.to_query}" | |
12 | + json = JSON.parse(last_response.body) | |
13 | + assert_includes json["categories"].map { |c| c["name"] }, category.name | |
14 | + end | |
15 | + | |
16 | + should 'get category by id' do | |
17 | + category = fast_create(Category, :environment_id => environment.id) | |
18 | + get "/api/v1/categories/#{category.id}/?#{params.to_query}" | |
19 | + json = JSON.parse(last_response.body) | |
20 | + assert_equal category.name, json["category"]["name"] | |
21 | + end | |
22 | + | |
23 | + should 'list parent and children when get category by id' do | |
24 | + parent = fast_create(Category, :environment_id => environment.id) | |
25 | + child_1 = fast_create(Category, :environment_id => environment.id) | |
26 | + child_2 = fast_create(Category, :environment_id => environment.id) | |
27 | + | |
28 | + category = fast_create(Category, :environment_id => environment.id) | |
29 | + category.parent = parent | |
30 | + category.children << child_1 | |
31 | + category.children << child_2 | |
32 | + category.save | |
33 | + | |
34 | + get "/api/v1/categories/#{category.id}/?#{params.to_query}" | |
35 | + json = JSON.parse(last_response.body) | |
36 | + assert_equal({'id' => parent.id, 'name' => parent.name, 'slug' => parent.slug}, json['category']['parent']) | |
37 | + assert_equivalent [child_1.id, child_2.id], json['category']['children'].map { |c| c['id'] } | |
38 | + end | |
39 | + | |
40 | + should 'include parent in categories list if params is true' do | |
41 | + parent_1 = fast_create(Category, :environment_id => environment.id) # parent_1 has no parent category | |
42 | + child_1 = fast_create(Category, :environment_id => environment.id) | |
43 | + child_2 = fast_create(Category, :environment_id => environment.id) | |
44 | + | |
45 | + parent_2 = fast_create(Category, :environment_id => environment.id) | |
46 | + parent_2.parent = parent_1 | |
47 | + parent_2.children << child_1 | |
48 | + parent_2.children << child_2 | |
49 | + parent_2.save | |
50 | + | |
51 | + get "/api/v1/categories/?#{params.to_query}" | |
52 | + json = JSON.parse(last_response.body) | |
53 | + assert_equal [nil], json['categories'].map { |c| c['parent'] }.uniq | |
54 | + | |
55 | + params[:include_parent] = true | |
56 | + get "/api/v1/categories/?#{params.to_query}" | |
57 | + json = JSON.parse(last_response.body) | |
58 | + assert_equivalent [parent_1.parent, parent_2.parent.id, child_1.parent.id, child_2.parent.id], | |
59 | + json["categories"].map { |c| c['parent'] && c['parent']['id'] } | |
60 | + end | |
61 | + | |
62 | + should 'include children in categories list if params is true' do | |
63 | + category = fast_create(Category, :environment_id => environment.id) | |
64 | + child_1 = fast_create(Category, :environment_id => environment.id) | |
65 | + child_2 = fast_create(Category, :environment_id => environment.id) | |
66 | + child_3 = fast_create(Category, :environment_id => environment.id) | |
67 | + | |
68 | + category.children << child_1 | |
69 | + category.children << child_2 | |
70 | + category.save | |
71 | + | |
72 | + child_1.children << child_3 | |
73 | + child_1.save | |
74 | + | |
75 | + get "/api/v1/categories/?#{params.to_query}" | |
76 | + json = JSON.parse(last_response.body) | |
77 | + assert_equal [nil], json['categories'].map { |c| c['children'] }.uniq | |
78 | + | |
79 | + params[:include_children] = true | |
80 | + get "/api/v1/categories/?#{params.to_query}" | |
81 | + json = JSON.parse(last_response.body) | |
82 | + assert_equivalent [category.children.map(&:id).sort, child_1.children.map(&:id).sort, child_2.children.map(&:id).sort, child_3.children.map(&:id).sort], | |
83 | + json["categories"].map{ |c| c['children'].map{ |child| child['id'] }.sort } | |
84 | + end | |
85 | + | |
86 | + expose_attributes = %w(id name full_name image display_color) | |
87 | + | |
88 | + expose_attributes.each do |attr| | |
89 | + should "expose category #{attr} attribute by default" do | |
90 | + category = fast_create(Category, :environment_id => environment.id) | |
91 | + get "/api/v1/categories/?#{params.to_query}" | |
92 | + json = JSON.parse(last_response.body) | |
93 | + assert json["categories"].last.has_key?(attr) | |
94 | + end | |
95 | + end | |
96 | + | |
97 | +end | ... | ... |
... | ... | @@ -0,0 +1,81 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class CommentsTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + login_api | |
7 | + end | |
8 | + | |
9 | + should 'not list comments if user has no permission to view the source article' do | |
10 | + person = fast_create(Person) | |
11 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
12 | + assert !article.published? | |
13 | + | |
14 | + get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
15 | + assert_equal 403, last_response.status | |
16 | + end | |
17 | + | |
18 | + should 'not return comment if user has no permission to view the source article' do | |
19 | + person = fast_create(Person) | |
20 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
21 | + comment = article.comments.create!(:body => "another comment", :author => user.person) | |
22 | + assert !article.published? | |
23 | + | |
24 | + get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}" | |
25 | + assert_equal 403, last_response.status | |
26 | + end | |
27 | + | |
28 | + should 'not comment an article if user has no permission to view it' do | |
29 | + person = fast_create(Person) | |
30 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
31 | + assert !article.published? | |
32 | + | |
33 | + post "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
34 | + assert_equal 403, last_response.status | |
35 | + end | |
36 | + | |
37 | + should 'return comments of an article' do | |
38 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
39 | + article.comments.create!(:body => "some comment", :author => user.person) | |
40 | + article.comments.create!(:body => "another comment", :author => user.person) | |
41 | + | |
42 | + get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
43 | + json = JSON.parse(last_response.body) | |
44 | + assert_equal 200, last_response.status | |
45 | + assert_equal 2, json["comments"].length | |
46 | + end | |
47 | + | |
48 | + should 'return comment of an article' do | |
49 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
50 | + comment = article.comments.create!(:body => "another comment", :author => user.person) | |
51 | + | |
52 | + get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}" | |
53 | + json = JSON.parse(last_response.body) | |
54 | + assert_equal 200, last_response.status | |
55 | + assert_equal comment.id, json['comment']['id'] | |
56 | + end | |
57 | + | |
58 | + should 'comment an article' do | |
59 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
60 | + body = 'My comment' | |
61 | + params.merge!({:body => body}) | |
62 | + | |
63 | + post "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
64 | + json = JSON.parse(last_response.body) | |
65 | + assert_equal 201, last_response.status | |
66 | + assert_equal body, json['comment']['body'] | |
67 | + end | |
68 | + | |
69 | + should 'comment creation define the source' do | |
70 | + amount = Comment.count | |
71 | + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
72 | + body = 'My comment' | |
73 | + params.merge!({:body => body}) | |
74 | + | |
75 | + post "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
76 | + assert_equal amount + 1, Comment.count | |
77 | + comment = Comment.last | |
78 | + assert_not_nil comment.source | |
79 | + end | |
80 | + | |
81 | +end | ... | ... |
... | ... | @@ -0,0 +1,160 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class CommunitiesTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + Community.delete_all | |
7 | + login_api | |
8 | + end | |
9 | + | |
10 | + should 'list only communities' do | |
11 | + community = fast_create(Community, :environment_id => environment.id) | |
12 | + enterprise = fast_create(Enterprise, :environment_id => environment.id) # should not list this enterprise | |
13 | + get "/api/v1/communities?#{params.to_query}" | |
14 | + json = JSON.parse(last_response.body) | |
15 | + assert_not_includes json['communities'].map {|c| c['id']}, enterprise.id | |
16 | + assert_includes json['communities'].map {|c| c['id']}, community.id | |
17 | + end | |
18 | + | |
19 | + should 'list all communities' do | |
20 | + community1 = fast_create(Community, :environment_id => environment.id, :public_profile => true) | |
21 | + community2 = fast_create(Community, :environment_id => environment.id) | |
22 | + get "/api/v1/communities?#{params.to_query}" | |
23 | + json = JSON.parse(last_response.body) | |
24 | + assert_equivalent [community1.id, community2.id], json['communities'].map {|c| c['id']} | |
25 | + end | |
26 | + | |
27 | + should 'not list invisible communities' do | |
28 | + community1 = fast_create(Community, :environment_id => environment.id) | |
29 | + fast_create(Community, :environment_id => environment.id, :visible => false) | |
30 | + | |
31 | + get "/api/v1/communities?#{params.to_query}" | |
32 | + json = JSON.parse(last_response.body) | |
33 | + assert_equal [community1.id], json['communities'].map {|c| c['id']} | |
34 | + end | |
35 | + | |
36 | + should 'not list private communities without permission' do | |
37 | + community1 = fast_create(Community, :environment_id => environment.id) | |
38 | + fast_create(Community, :environment_id => environment.id, :public_profile => false) | |
39 | + | |
40 | + get "/api/v1/communities?#{params.to_query}" | |
41 | + json = JSON.parse(last_response.body) | |
42 | + assert_equal [community1.id], json['communities'].map {|c| c['id']} | |
43 | + end | |
44 | + | |
45 | + should 'list private community for members' do | |
46 | + c1 = fast_create(Community, :environment_id => environment.id) | |
47 | + c2 = fast_create(Community, :environment_id => environment.id, :public_profile => false) | |
48 | + c2.add_member(person) | |
49 | + | |
50 | + get "/api/v1/communities?#{params.to_query}" | |
51 | + json = JSON.parse(last_response.body) | |
52 | + assert_equivalent [c1.id, c2.id], json['communities'].map {|c| c['id']} | |
53 | + end | |
54 | + | |
55 | + should 'create a community' do | |
56 | + params[:community] = {:name => 'some'} | |
57 | + post "/api/v1/communities?#{params.to_query}" | |
58 | + json = JSON.parse(last_response.body) | |
59 | + assert_equal 'some', json['community']['name'] | |
60 | + end | |
61 | + | |
62 | + should 'return 400 status for invalid community creation' do | |
63 | + post "/api/v1/communities?#{params.to_query}" | |
64 | + json = JSON.parse(last_response.body) | |
65 | + assert_equal 400, last_response.status | |
66 | + end | |
67 | + | |
68 | + should 'get community' do | |
69 | + community = fast_create(Community, :environment_id => environment.id) | |
70 | + | |
71 | + get "/api/v1/communities/#{community.id}?#{params.to_query}" | |
72 | + json = JSON.parse(last_response.body) | |
73 | + assert_equal community.id, json['community']['id'] | |
74 | + end | |
75 | + | |
76 | + should 'not get invisible community' do | |
77 | + community = fast_create(Community, :environment_id => environment.id, :visible => false) | |
78 | + | |
79 | + get "/api/v1/communities/#{community.id}?#{params.to_query}" | |
80 | + json = JSON.parse(last_response.body) | |
81 | + assert json['community'].blank? | |
82 | + end | |
83 | + | |
84 | + should 'not get private communities without permission' do | |
85 | + community = fast_create(Community, :environment_id => environment.id) | |
86 | + fast_create(Community, :environment_id => environment.id, :public_profile => false) | |
87 | + | |
88 | + get "/api/v1/communities/#{community.id}?#{params.to_query}" | |
89 | + json = JSON.parse(last_response.body) | |
90 | + assert_equal community.id, json['community']['id'] | |
91 | + end | |
92 | + | |
93 | + should 'get private community for members' do | |
94 | + community = fast_create(Community, :environment_id => environment.id, :public_profile => false, :visible => true) | |
95 | + community.add_member(person) | |
96 | + | |
97 | + | |
98 | + get "/api/v1/communities/#{community.id}?#{params.to_query}" | |
99 | + json = JSON.parse(last_response.body) | |
100 | + assert_equal community.id, json['community']['id'] | |
101 | + end | |
102 | + | |
103 | + should 'list person communities' do | |
104 | + community = fast_create(Community, :environment_id => environment.id) | |
105 | + fast_create(Community, :environment_id => environment.id) | |
106 | + community.add_member(person) | |
107 | + | |
108 | + get "/api/v1/people/#{person.id}/communities?#{params.to_query}" | |
109 | + json = JSON.parse(last_response.body) | |
110 | + assert_equivalent [community.id], json['communities'].map {|c| c['id']} | |
111 | + end | |
112 | + | |
113 | + should 'not list person communities invisible' do | |
114 | + c1 = fast_create(Community, :environment_id => environment.id) | |
115 | + c2 = fast_create(Community, :environment_id => environment.id, :visible => false) | |
116 | + c1.add_member(person) | |
117 | + c2.add_member(person) | |
118 | + | |
119 | + get "/api/v1/people/#{person.id}/communities?#{params.to_query}" | |
120 | + json = JSON.parse(last_response.body) | |
121 | + assert_equivalent [c1.id], json['communities'].map {|c| c['id']} | |
122 | + end | |
123 | + | |
124 | + should 'list communities with pagination' do | |
125 | + community1 = fast_create(Community, :public_profile => true, :created_at => 1.day.ago) | |
126 | + community2 = fast_create(Community, :created_at => 2.days.ago) | |
127 | + | |
128 | + params[:page] = 2 | |
129 | + params[:per_page] = 1 | |
130 | + get "/api/v1/communities?#{params.to_query}" | |
131 | + json_page_two = JSON.parse(last_response.body) | |
132 | + | |
133 | + params[:page] = 1 | |
134 | + params[:per_page] = 1 | |
135 | + get "/api/v1/communities?#{params.to_query}" | |
136 | + json_page_one = JSON.parse(last_response.body) | |
137 | + | |
138 | + | |
139 | + assert_includes json_page_one["communities"].map { |a| a["id"] }, community1.id | |
140 | + assert_not_includes json_page_one["communities"].map { |a| a["id"] }, community2.id | |
141 | + | |
142 | + assert_includes json_page_two["communities"].map { |a| a["id"] }, community2.id | |
143 | + assert_not_includes json_page_two["communities"].map { |a| a["id"] }, community1.id | |
144 | + end | |
145 | + | |
146 | + should 'list communities with timestamp' do | |
147 | + community1 = fast_create(Community, :public_profile => true) | |
148 | + community2 = fast_create(Community) | |
149 | + | |
150 | + community1.updated_at = Time.now + 3.hours | |
151 | + community1.save! | |
152 | + | |
153 | + params[:timestamp] = Time.now + 1.hours | |
154 | + get "/api/v1/communities/?#{params.to_query}" | |
155 | + json = JSON.parse(last_response.body) | |
156 | + | |
157 | + assert_includes json["communities"].map { |a| a["id"] }, community1.id | |
158 | + assert_not_includes json["communities"].map { |a| a["id"] }, community2.id | |
159 | + end | |
160 | +end | ... | ... |
... | ... | @@ -0,0 +1,110 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class EnterprisesTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + Enterprise.delete_all | |
7 | + login_api | |
8 | + end | |
9 | + | |
10 | + should 'list only enterprises' do | |
11 | + community = fast_create(Community, :environment_id => environment.id) # should not list this community | |
12 | + enterprise = fast_create(Enterprise, :environment_id => environment.id, :public_profile => true) | |
13 | + get "/api/v1/enterprises?#{params.to_query}" | |
14 | + json = JSON.parse(last_response.body) | |
15 | + assert_includes json['enterprises'].map {|c| c['id']}, enterprise.id | |
16 | + assert_not_includes json['enterprises'].map {|c| c['id']}, community.id | |
17 | + end | |
18 | + | |
19 | + should 'list all enterprises' do | |
20 | + enterprise1 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => true) | |
21 | + enterprise2 = fast_create(Enterprise, :environment_id => environment.id) | |
22 | + get "/api/v1/enterprises?#{params.to_query}" | |
23 | + json = JSON.parse(last_response.body) | |
24 | + assert_equivalent [enterprise1.id, enterprise2.id], json['enterprises'].map {|c| c['id']} | |
25 | + end | |
26 | + | |
27 | + should 'not list invisible enterprises' do | |
28 | + enterprise1 = fast_create(Enterprise, :environment_id => environment.id) | |
29 | + fast_create(Enterprise, :visible => false) | |
30 | + | |
31 | + get "/api/v1/enterprises?#{params.to_query}" | |
32 | + json = JSON.parse(last_response.body) | |
33 | + assert_equal [enterprise1.id], json['enterprises'].map {|c| c['id']} | |
34 | + end | |
35 | + | |
36 | + should 'not list private enterprises without permission' do | |
37 | + enterprise1 = fast_create(Enterprise, :environment_id => environment.id) | |
38 | + fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | |
39 | + | |
40 | + get "/api/v1/enterprises?#{params.to_query}" | |
41 | + json = JSON.parse(last_response.body) | |
42 | + assert_equal [enterprise1.id], json['enterprises'].map {|c| c['id']} | |
43 | + end | |
44 | + | |
45 | + should 'list private enterprise for members' do | |
46 | + c1 = fast_create(Enterprise, :environment_id => environment.id) | |
47 | + c2 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | |
48 | + c2.add_member(person) | |
49 | + | |
50 | + get "/api/v1/enterprises?#{params.to_query}" | |
51 | + json = JSON.parse(last_response.body) | |
52 | + assert_equivalent [c1.id, c2.id], json['enterprises'].map {|c| c['id']} | |
53 | + end | |
54 | + | |
55 | + should 'get enterprise' do | |
56 | + enterprise = fast_create(Enterprise, :environment_id => environment.id) | |
57 | + | |
58 | + get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | |
59 | + json = JSON.parse(last_response.body) | |
60 | + assert_equal enterprise.id, json['enterprise']['id'] | |
61 | + end | |
62 | + | |
63 | + should 'not get invisible enterprise' do | |
64 | + enterprise = fast_create(Enterprise, :visible => false) | |
65 | + | |
66 | + get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | |
67 | + json = JSON.parse(last_response.body) | |
68 | + assert json['enterprise'].blank? | |
69 | + end | |
70 | + | |
71 | + should 'not get private enterprises without permission' do | |
72 | + enterprise = fast_create(Enterprise, :environment_id => environment.id) | |
73 | + fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | |
74 | + | |
75 | + get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | |
76 | + json = JSON.parse(last_response.body) | |
77 | + assert_equal enterprise.id, json['enterprise']['id'] | |
78 | + end | |
79 | + | |
80 | + should 'get private enterprise for members' do | |
81 | + enterprise = fast_create(Enterprise, :public_profile => false) | |
82 | + enterprise.add_member(person) | |
83 | + | |
84 | + get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | |
85 | + json = JSON.parse(last_response.body) | |
86 | + assert_equal enterprise.id, json['enterprise']['id'] | |
87 | + end | |
88 | + | |
89 | + should 'list person enterprises' do | |
90 | + enterprise = fast_create(Enterprise, :environment_id => environment.id) | |
91 | + fast_create(Enterprise, :environment_id => environment.id) | |
92 | + enterprise.add_member(person) | |
93 | + | |
94 | + get "/api/v1/people/#{person.id}/enterprises?#{params.to_query}" | |
95 | + json = JSON.parse(last_response.body) | |
96 | + assert_equivalent [enterprise.id], json['enterprises'].map {|c| c['id']} | |
97 | + end | |
98 | + | |
99 | + should 'not list person enterprises invisible' do | |
100 | + c1 = fast_create(Enterprise, :environment_id => environment.id) | |
101 | + c2 = fast_create(Enterprise, :environment_id => environment.id, :visible => false) | |
102 | + c1.add_member(person) | |
103 | + c2.add_member(person) | |
104 | + | |
105 | + get "/api/v1/people/#{person.id}/enterprises?#{params.to_query}" | |
106 | + json = JSON.parse(last_response.body) | |
107 | + assert_equivalent [c1.id], json['enterprises'].map {|c| c['id']} | |
108 | + end | |
109 | + | |
110 | +end | ... | ... |
... | ... | @@ -0,0 +1,38 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class EnvironmentTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + @person = create_user('testing').person | |
7 | + end | |
8 | + attr_reader :person | |
9 | + | |
10 | + should 'return the default environment' do | |
11 | + environment = Environment.default | |
12 | + get "/api/v1/environment/default" | |
13 | + json = JSON.parse(last_response.body) | |
14 | + assert_equal environment.id, json['id'] | |
15 | + end | |
16 | + | |
17 | + should 'return created environment' do | |
18 | + environment = fast_create(Environment) | |
19 | + default_env = Environment.default | |
20 | + assert_not_equal environment.id, default_env.id | |
21 | + get "/api/v1/environment/#{environment.id}" | |
22 | + json = JSON.parse(last_response.body) | |
23 | + assert_equal environment.id, json['id'] | |
24 | + end | |
25 | + | |
26 | + should 'return context environment' do | |
27 | + context_env = fast_create(Environment) | |
28 | + context_env.name = "example org" | |
29 | + context_env.save | |
30 | + context_env.domains<< Domain.new(:name => 'example.org') | |
31 | + default_env = Environment.default | |
32 | + assert_not_equal context_env.id, default_env.id | |
33 | + get "/api/v1/environment/context" | |
34 | + json = JSON.parse(last_response.body) | |
35 | + assert_equal context_env.id, json['id'] | |
36 | + end | |
37 | + | |
38 | +end | ... | ... |
... | ... | @@ -0,0 +1,245 @@ |
1 | +require_relative 'test_helper' | |
2 | +require 'noosfero/api/helpers' | |
3 | + | |
4 | +class APIHelpersTest < ActiveSupport::TestCase | |
5 | + | |
6 | + include Noosfero::API::APIHelpers | |
7 | + | |
8 | + def setup | |
9 | + @headers = {} | |
10 | + end | |
11 | + | |
12 | + attr_accessor :headers | |
13 | + | |
14 | + should 'get the current user with valid token' do | |
15 | + user = create_user('someuser') | |
16 | + user.generate_private_token! | |
17 | + self.params = {:private_token => user.private_token} | |
18 | + assert_equal user, current_user | |
19 | + end | |
20 | + | |
21 | + should 'get the current user with valid token in header' do | |
22 | + user = create_user('someuser') | |
23 | + user.generate_private_token! | |
24 | + headers['Private-Token'] = user.private_token | |
25 | + assert_equal user, current_user | |
26 | + end | |
27 | + | |
28 | + should 'get the current user even with expired token' do | |
29 | + user = create_user('someuser') | |
30 | + user.generate_private_token! | |
31 | + user.private_token_generated_at = DateTime.now.prev_year | |
32 | + user.save | |
33 | + self.params = {:private_token => user.private_token} | |
34 | + assert_equal user, current_user | |
35 | + end | |
36 | + | |
37 | + should 'get the person of current user' do | |
38 | + user = create_user('someuser') | |
39 | + user.generate_private_token! | |
40 | + self.params = {:private_token => user.private_token} | |
41 | + assert_equal user.person, current_person | |
42 | + end | |
43 | + | |
44 | +# #FIXME see how to make this test. Get the current_user variable | |
45 | +# should 'set current_user to nil after logout' do | |
46 | +# user = create_user('someuser') | |
47 | +# user.stubs(:private_token_expired?).returns(false) | |
48 | +# User.stubs(:find_by_private_token).returns(user) | |
49 | +# assert_not_nil current_user | |
50 | +# assert false | |
51 | +# logout | |
52 | +# end | |
53 | + | |
54 | + should 'limit be defined as the params limit value' do | |
55 | + local_limit = 30 | |
56 | + self.params= {:limit => local_limit} | |
57 | + assert_equal local_limit, limit | |
58 | + end | |
59 | + | |
60 | + should 'return default limit if the limit parameter is minor than zero' do | |
61 | + self.params= {:limit => -1} | |
62 | + assert_equal 20, limit | |
63 | + end | |
64 | + | |
65 | + should 'the default limit be 20' do | |
66 | + assert_equal 20, limit | |
67 | + end | |
68 | + | |
69 | + should 'the beginning of the period be the first existent date if no from date is passsed as parameter' do | |
70 | + assert_equal Time.at(0).to_datetime, period(nil, nil).to_a[0] | |
71 | + end | |
72 | + | |
73 | + should 'the beginning of the period be from date passsed as parameter' do | |
74 | + from = DateTime.now | |
75 | + assert_equal from, period(from, nil).min | |
76 | + end | |
77 | + | |
78 | + should 'the end of the period be now if no until date is passsed as parameter' do | |
79 | + assert_in_delta DateTime.now, period(nil, nil).max | |
80 | + end | |
81 | + | |
82 | + should 'the end of the period be until date passsed as parameter' do | |
83 | + until_date = DateTime.now | |
84 | + assert_equal until_date, period(nil, until_date).max | |
85 | + end | |
86 | + | |
87 | + should 'parse_content_type return nil if its blank' do | |
88 | + assert_nil parse_content_type("") | |
89 | + end | |
90 | + | |
91 | + should 'parse_content_type be an array' do | |
92 | + assert_kind_of Array, parse_content_type("text_article") | |
93 | + end | |
94 | + | |
95 | + should 'parse_content_type return all content types as an array' do | |
96 | + assert_equivalent ['TextArticle','TinyMceArticle'], parse_content_type("TextArticle,TinyMceArticle") | |
97 | + end | |
98 | + | |
99 | + should 'find_article return article by id in list passed for user with permission' do | |
100 | + user = create_user('someuser') | |
101 | + a = fast_create(Article, :profile_id => user.person.id) | |
102 | + fast_create(Article, :profile_id => user.person.id) | |
103 | + fast_create(Article, :profile_id => user.person.id) | |
104 | + | |
105 | + user.generate_private_token! | |
106 | + User.expects(:find_by_private_token).returns(user) | |
107 | + assert_equal a, find_article(user.person.articles, a.id) | |
108 | + end | |
109 | + | |
110 | + should 'find_article return forbidden when a user try to access an article without permission' do | |
111 | + user = create_user('someuser') | |
112 | + p = fast_create(Profile) | |
113 | + a = fast_create(Article, :published => false, :profile_id => p.id) | |
114 | + fast_create(Article, :profile_id => p.id) | |
115 | + | |
116 | + user.generate_private_token! | |
117 | + User.expects(:find_by_private_token).returns(user) | |
118 | + assert_equal 403, find_article(p.articles, a.id).last | |
119 | + end | |
120 | + | |
121 | + should 'make_conditions_with_parameter return no created at parameter if it was not defined from or until parameters' do | |
122 | + assert_nil make_conditions_with_parameter[:created_at] | |
123 | + end | |
124 | + | |
125 | + should 'make_conditions_with_parameter return created_at parameter if from period is defined' do | |
126 | + assert_not_nil make_conditions_with_parameter(:from => '2010-10-10')[:created_at] | |
127 | + end | |
128 | + | |
129 | + should 'make_conditions_with_parameter return created_at parameter if from period is defined as string' do | |
130 | + assert_not_nil make_conditions_with_parameter('from' => '2010-10-10')[:created_at] | |
131 | + end | |
132 | + | |
133 | + should 'make_conditions_with_parameter return created_at parameter if until period is defined' do | |
134 | + assert_not_nil make_conditions_with_parameter(:until => '2010-10-10')[:created_at] | |
135 | + end | |
136 | + | |
137 | + should 'make_conditions_with_parameter return created_at parameter if until period is defined as string' do | |
138 | + assert_not_nil make_conditions_with_parameter('until' => '2010-10-10')[:created_at] | |
139 | + end | |
140 | + | |
141 | + should 'make_conditions_with_parameter return created_at as the first existent date as parameter if only until is defined' do | |
142 | + assert_equal Time.at(0).to_datetime, make_conditions_with_parameter(:until => '2010-10-10')[:created_at].min | |
143 | + end | |
144 | + | |
145 | + should 'make_conditions_with_parameter: the minimal created_at date be the from date passed as parameter' do | |
146 | + date = '2010-10-10' | |
147 | + assert_equal DateTime.parse(date), make_conditions_with_parameter(:from => date)[:created_at].min | |
148 | + end | |
149 | + | |
150 | + should 'make_conditions_with_parameter: the maximum created_at date be the until date passed as parameter' do | |
151 | + date = '2010-10-10' | |
152 | + assert_equal DateTime.parse(date), make_conditions_with_parameter(:until => date)[:created_at].max | |
153 | + end | |
154 | + | |
155 | + should 'make_conditions_with_parameter return the until date passed as parameter' do | |
156 | + date = '2010-10-10' | |
157 | + assert_equal DateTime.parse(date), make_conditions_with_parameter(:from => '2010-10-10')[:created_at].min | |
158 | + end | |
159 | + | |
160 | + should 'make_conditions_with_parameter return no type parameter if it was not defined any content type' do | |
161 | + assert_nil make_conditions_with_parameter[:type] | |
162 | + end | |
163 | + | |
164 | + #test_should_make_order_with_parameters_return_order_if attribute_is_found_at_object_association | |
165 | + should 'make_order_with_parameters return order if attribute is found at object association' do | |
166 | + environment = Environment.new | |
167 | + params = {:order => "name ASC"} | |
168 | + assert_equal "name ASC", make_order_with_parameters(environment, "articles", params) | |
169 | + end | |
170 | + | |
171 | + # test added to check for eventual sql injection vunerabillity | |
172 | + #test_should_make_order_with_parameters_return_default_order_if_attributes_not_exists | |
173 | + should 'make_order_with_parameters return default order if attributes not exists' do | |
174 | + environment = Environment.new | |
175 | + params = {:order => "CRAZY_FIELD ASC"} # quote used to check sql injection vunerabillity | |
176 | + assert_equal "created_at DESC", make_order_with_parameters(environment, "articles", params) | |
177 | + end | |
178 | + | |
179 | + should 'make_order_with_parameters return default order if sql injection detected' do | |
180 | + environment = Environment.new | |
181 | + params = {:order => "name' ASC"} # quote used to check sql injection vunerabillity | |
182 | + assert_equal "created_at DESC", make_order_with_parameters(environment, "articles", params) | |
183 | + end | |
184 | + | |
185 | + should 'make_order_with_parameters return RANDOM() if random is passed' do | |
186 | + environment = Environment.new | |
187 | + params = {:order => "random"} # quote used to check sql injection vunerabillity | |
188 | + assert_equal "RANDOM()", make_order_with_parameters(environment, "articles", params) | |
189 | + end | |
190 | + | |
191 | + should 'make_order_with_parameters return RANDOM() if random function is passed' do | |
192 | + environment = Environment.new | |
193 | + params = {:order => "random()"} # quote used to check sql injection vunerabillity | |
194 | + assert_equal "RANDOM()", make_order_with_parameters(environment, "articles", params) | |
195 | + end | |
196 | + | |
197 | + should 'render not_found if endpoint is unavailable' do | |
198 | + Noosfero::API::API.stubs(:endpoint_unavailable?).returns(true) | |
199 | + self.expects(:not_found!) | |
200 | + | |
201 | + filter_disabled_plugins_endpoints | |
202 | + end | |
203 | + | |
204 | + should 'not touch in options when no fields parameter is passed' do | |
205 | + model = mock | |
206 | + expects(:present).with(model, {}) | |
207 | + present_partial(model, {}) | |
208 | + end | |
209 | + | |
210 | + should 'fallback to array when fields parameter is not a json when calling present partial' do | |
211 | + model = mock | |
212 | + params[:fields] = ['name'] | |
213 | + expects(:present).with(model, {:only => ['name']}) | |
214 | + present_partial(model, {}) | |
215 | + end | |
216 | + | |
217 | + should 'fallback to comma separated string when fields parameter is not an array when calling present partial' do | |
218 | + model = mock | |
219 | + params[:fields] = 'name,description' | |
220 | + expects(:present).with(model, {:only => ['name', 'description']}) | |
221 | + present_partial(model, {}) | |
222 | + end | |
223 | + | |
224 | + should 'accept json as fields parameter when calling present partial' do | |
225 | + model = mock | |
226 | + params[:fields] = {only: [:name, {user: [:login]}]}.to_json | |
227 | + expects(:present).with(model, {:only => ['name', {'user' => ['login']}]}) | |
228 | + present_partial(model, {}) | |
229 | + end | |
230 | + | |
231 | + protected | |
232 | + | |
233 | + def error!(info, status) | |
234 | + [info, status] | |
235 | + end | |
236 | + | |
237 | + def params | |
238 | + @params ||= {} | |
239 | + end | |
240 | + | |
241 | + def params= value | |
242 | + @params = value | |
243 | + end | |
244 | + | |
245 | +end | ... | ... |
... | ... | @@ -0,0 +1,258 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class PeopleTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + Person.delete_all | |
7 | + login_api | |
8 | + end | |
9 | + | |
10 | + should 'list all people' do | |
11 | + person1 = fast_create(Person, :public_profile => true) | |
12 | + person2 = fast_create(Person) | |
13 | + get "/api/v1/people?#{params.to_query}" | |
14 | + json = JSON.parse(last_response.body) | |
15 | + assert_equivalent [person1.id, person2.id, person.id], json['people'].map {|c| c['id']} | |
16 | + end | |
17 | + | |
18 | + should 'list all members of a community' do | |
19 | + person1 = fast_create(Person) | |
20 | + person2 = fast_create(Person) | |
21 | + community = fast_create(Community) | |
22 | + community.add_member(person1) | |
23 | + community.add_member(person2) | |
24 | + | |
25 | + get "/api/v1/profiles/#{community.id}/members?#{params.to_query}" | |
26 | + json = JSON.parse(last_response.body) | |
27 | + assert_equal 2, json["people"].count | |
28 | + assert_equivalent [person1.id,person2.id], json["people"].map{|p| p["id"]} | |
29 | + end | |
30 | + | |
31 | + should 'not list invisible people' do | |
32 | + invisible_person = fast_create(Person, :visible => false) | |
33 | + | |
34 | + get "/api/v1/people?#{params.to_query}" | |
35 | + assert_not_includes json_response_ids(:people), invisible_person.id | |
36 | + end | |
37 | + | |
38 | + should 'not list private people without permission' do | |
39 | + private_person = fast_create(Person, :public_profile => false) | |
40 | + | |
41 | + get "/api/v1/people?#{params.to_query}" | |
42 | + assert_not_includes json_response_ids(:people), private_person.id | |
43 | + end | |
44 | + | |
45 | + should 'list private person for friends' do | |
46 | + p1 = fast_create(Person) | |
47 | + p2 = fast_create(Person, :public_profile => false) | |
48 | + person.add_friend(p2) | |
49 | + p2.add_friend(person) | |
50 | + | |
51 | + get "/api/v1/people?#{params.to_query}" | |
52 | + assert_includes json_response_ids(:people), p2.id | |
53 | + end | |
54 | + | |
55 | + should 'get person' do | |
56 | + some_person = fast_create(Person) | |
57 | + | |
58 | + get "/api/v1/people/#{some_person.id}?#{params.to_query}" | |
59 | + json = JSON.parse(last_response.body) | |
60 | + assert_equal some_person.id, json['person']['id'] | |
61 | + end | |
62 | + | |
63 | + should 'people endpoint filter by fields parameter' do | |
64 | + get "/api/v1/people?#{params.to_query}&fields=name" | |
65 | + json = JSON.parse(last_response.body) | |
66 | + expected = {'people' => [{'name' => person.name}]} | |
67 | + assert_equal expected, json | |
68 | + end | |
69 | + | |
70 | + should 'people endpoint filter by fields parameter with hierarchy' do | |
71 | + fields = URI.encode({only: [:name, {user: [:login]}]}.to_json) | |
72 | + get "/api/v1/people?#{params.to_query}&fields=#{fields}" | |
73 | + json = JSON.parse(last_response.body) | |
74 | + expected = {'people' => [{'name' => person.name, 'user' => {'login' => 'testapi'}}]} | |
75 | + assert_equal expected, json | |
76 | + end | |
77 | + | |
78 | + should 'get logged person' do | |
79 | + get "/api/v1/people/me?#{params.to_query}" | |
80 | + json = JSON.parse(last_response.body) | |
81 | + assert_equal person.id, json['person']['id'] | |
82 | + end | |
83 | + | |
84 | + should 'me endpoint filter by fields parameter' do | |
85 | + get "/api/v1/people/me?#{params.to_query}&fields=name" | |
86 | + json = JSON.parse(last_response.body) | |
87 | + expected = {'person' => {'name' => person.name}} | |
88 | + assert_equal expected, json | |
89 | + end | |
90 | + | |
91 | + should 'not get invisible person' do | |
92 | + person = fast_create(Person, :visible => false) | |
93 | + | |
94 | + get "/api/v1/people/#{person.id}?#{params.to_query}" | |
95 | + json = JSON.parse(last_response.body) | |
96 | + assert json['person'].blank? | |
97 | + end | |
98 | + | |
99 | + should 'not get private people without permission' do | |
100 | + private_person = fast_create(Person, :public_profile => false) | |
101 | + | |
102 | + get "/api/v1/people/#{private_person.id}?#{params.to_query}" | |
103 | + json = JSON.parse(last_response.body) | |
104 | + assert json['person'].blank? | |
105 | + end | |
106 | + | |
107 | + should 'get private person for friends' do | |
108 | + private_person = fast_create(Person, :public_profile => false) | |
109 | + person.add_friend(private_person) | |
110 | + private_person.add_friend(person) | |
111 | + | |
112 | + get "/api/v1/people/#{private_person.id}?#{params.to_query}" | |
113 | + json = JSON.parse(last_response.body) | |
114 | + assert_equal private_person.id, json['person']['id'] | |
115 | + end | |
116 | + | |
117 | + should 'list person friends' do | |
118 | + friend = fast_create(Person) | |
119 | + person.add_friend(friend) | |
120 | + friend.add_friend(person) | |
121 | + | |
122 | + get "/api/v1/people/#{friend.id}/friends?#{params.to_query}" | |
123 | + assert_includes json_response_ids(:people), person.id | |
124 | + end | |
125 | + | |
126 | + should 'not list person invisible friends' do | |
127 | + friend = fast_create(Person) | |
128 | + invisible_friend = fast_create(Person, :visible => false) | |
129 | + person.add_friend(friend) | |
130 | + person.add_friend(invisible_friend) | |
131 | + friend.add_friend(person) | |
132 | + invisible_friend.add_friend(person) | |
133 | + | |
134 | + get "/api/v1/people/#{person.id}/friends?#{params.to_query}" | |
135 | + friends = json_response_ids(:people) | |
136 | + assert_includes friends, friend.id | |
137 | + assert_not_includes friends, invisible_friend.id | |
138 | + end | |
139 | + | |
140 | + should 'create a person' do | |
141 | + login = 'some' | |
142 | + params[:person] = {:login => login, :password => '123456', :password_confirmation => '123456', :email => 'some@some.com'} | |
143 | + post "/api/v1/people?#{params.to_query}" | |
144 | + json = JSON.parse(last_response.body) | |
145 | + assert_equal login, json['person']['identifier'] | |
146 | + end | |
147 | + | |
148 | + should 'return 400 status for invalid person creation' do | |
149 | + params[:person] = {:login => 'some'} | |
150 | + post "/api/v1/people?#{params.to_query}" | |
151 | + json = JSON.parse(last_response.body) | |
152 | + assert_equal 400, last_response.status | |
153 | + end | |
154 | + | |
155 | + should 'display permissions' do | |
156 | + community = fast_create(Community) | |
157 | + community.add_member(fast_create(Person)) | |
158 | + community.add_member(person) | |
159 | + permissions = Profile::Roles.member(person.environment.id).permissions | |
160 | + get "/api/v1/people/#{person.id}/permissions?#{params.to_query}" | |
161 | + json = JSON.parse(last_response.body) | |
162 | + | |
163 | + assert_equal json[community.identifier], permissions | |
164 | + end | |
165 | + | |
166 | + should 'display permissions if self' do | |
167 | + get "/api/v1/people/#{person.id}/permissions?#{params.to_query}" | |
168 | + assert_equal 200, last_response.status | |
169 | + end | |
170 | + | |
171 | + should 'display permissions if admin' do | |
172 | + environment = person.environment | |
173 | + environment.add_admin(person) | |
174 | + some_person = fast_create(Person) | |
175 | + | |
176 | + get "/api/v1/people/#{some_person.id}/permissions?#{params.to_query}" | |
177 | + assert_equal 200, last_response.status | |
178 | + end | |
179 | + | |
180 | + should 'not display permissions if not admin or self' do | |
181 | + some_person = create_user('some-person').person | |
182 | + | |
183 | + get "/api/v1/people/#{some_person.id}/permissions?#{params.to_query}" | |
184 | + assert_equal 403, last_response.status | |
185 | + end | |
186 | + | |
187 | + should 'not update another person' do | |
188 | + person = fast_create(Person, :environment_id => environment.id) | |
189 | + post "/api/v1/people/#{person.id}?#{params.to_query}" | |
190 | + assert_equal 403, last_response.status | |
191 | + end | |
192 | + | |
193 | + should 'update yourself' do | |
194 | + another_name = 'Another Name' | |
195 | + params[:person] = {} | |
196 | + params[:person][:name] = another_name | |
197 | + assert_not_equal another_name, person.name | |
198 | + post "/api/v1/people/#{person.id}?#{params.to_query}" | |
199 | + person.reload | |
200 | + assert_equal another_name, person.name | |
201 | + end | |
202 | + | |
203 | + should 'display public custom fields' do | |
204 | + CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | |
205 | + some_person = create_user('some-person').person | |
206 | + some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "true"} } | |
207 | + some_person.save! | |
208 | + | |
209 | + get "/api/v1/people/#{some_person.id}?#{params.to_query}" | |
210 | + json = JSON.parse(last_response.body) | |
211 | + assert json['person']['additional_data'].has_key?('Custom Blog') | |
212 | + assert_equal "www.blog.org", json['person']['additional_data']['Custom Blog'] | |
213 | + end | |
214 | + | |
215 | + should 'not display non-public custom fields' do | |
216 | + CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | |
217 | + some_person = create_user('some-person').person | |
218 | + some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "0"} } | |
219 | + some_person.save! | |
220 | + | |
221 | + get "/api/v1/people/#{some_person.id}?#{params.to_query}" | |
222 | + json = JSON.parse(last_response.body) | |
223 | + assert_equal json['person']['additional_data'], {} | |
224 | + end | |
225 | + | |
226 | + should 'display non-public custom fields to friend' do | |
227 | + CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | |
228 | + some_person = create_user('some-person').person | |
229 | + some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "0"} } | |
230 | + some_person.save! | |
231 | + | |
232 | + f = Friendship.new | |
233 | + f.friend = some_person | |
234 | + f.person = person | |
235 | + f.save! | |
236 | + | |
237 | + get "/api/v1/people/#{some_person.id}?#{params.to_query}" | |
238 | + json = JSON.parse(last_response.body) | |
239 | + assert json['person']['additional_data'].has_key?("Custom Blog") | |
240 | + assert_equal "www.blog.org", json['person']['additional_data']['Custom Blog'] | |
241 | + end | |
242 | + | |
243 | + PERSON_ATTRIBUTES = %w(vote_count comments_count articles_count) | |
244 | + | |
245 | + PERSON_ATTRIBUTES.map do |attribute| | |
246 | + define_method "test_should_not_expose_#{attribute}_attribute_in_person_enpoint_if_field_parameter_does_not_contain_the_attribute" do | |
247 | + get "/api/v1/people/me?#{params.to_query}&fields=name" | |
248 | + json = JSON.parse(last_response.body) | |
249 | + assert_nil json['person'][attribute] | |
250 | + end | |
251 | + | |
252 | + define_method "test_should_expose_#{attribute}_attribute_in_person_enpoints_if_field_parameter_is_passed" do | |
253 | + get "/api/v1/people/me?#{params.to_query}&fields=#{attribute}" | |
254 | + json = JSON.parse(last_response.body) | |
255 | + assert_not_nil json['person'][attribute] | |
256 | + end | |
257 | + end | |
258 | +end | ... | ... |
... | ... | @@ -0,0 +1,32 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class ProfilesTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + Profile.delete_all | |
7 | + login_api | |
8 | + end | |
9 | + | |
10 | + should 'list all profiles' do | |
11 | + person1 = fast_create(Person) | |
12 | + person2 = fast_create(Person) | |
13 | + community = fast_create(Community) | |
14 | + get "/api/v1/profiles?#{params.to_query}" | |
15 | + json = JSON.parse(last_response.body) | |
16 | + assert_equivalent [person.id, person1.id, person2.id, community.id], json.map {|p| p['id']} | |
17 | + end | |
18 | + | |
19 | + should 'get person from profile id' do | |
20 | + some_person = fast_create(Person) | |
21 | + get "/api/v1/profiles/#{some_person.id}?#{params.to_query}" | |
22 | + json = JSON.parse(last_response.body) | |
23 | + assert_equal some_person.id, json['id'] | |
24 | + end | |
25 | + | |
26 | + should 'get community from profile id' do | |
27 | + community = fast_create(Community) | |
28 | + get "/api/v1/profiles/#{community.id}?#{params.to_query}" | |
29 | + json = JSON.parse(last_response.body) | |
30 | + assert_equal community.id, json['id'] | |
31 | + end | |
32 | +end | ... | ... |
... | ... | @@ -0,0 +1,150 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class SearchTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + @person = create_user('testing').person | |
7 | + end | |
8 | + attr_reader :person | |
9 | + | |
10 | + should 'not list unpublished articles' do | |
11 | + Article.delete_all | |
12 | + article = fast_create(Article, :profile_id => person.id, :published => false) | |
13 | + assert !article.published? | |
14 | + get "/api/v1/search/article" | |
15 | + json = JSON.parse(last_response.body) | |
16 | + assert_empty json['articles'] | |
17 | + end | |
18 | + | |
19 | + should 'list articles' do | |
20 | + fast_create(Article, :profile_id => person.id) | |
21 | + get "/api/v1/search/article" | |
22 | + json = JSON.parse(last_response.body) | |
23 | + assert_not_empty json['articles'] | |
24 | + end | |
25 | + | |
26 | + should 'list only articles that has children' do | |
27 | + article = fast_create(Article, :profile_id => person.id) | |
28 | + parent = create(Article, :profile_id => person.id, :name => 'parent article') | |
29 | + child = create(Article, :profile_id => person.id, :parent_id => parent.id, :name => 'child article') | |
30 | + | |
31 | + get "/api/v1/search/article?has_children=true" | |
32 | + json = JSON.parse(last_response.body) | |
33 | + assert_equal parent.id, json['articles'].first['id'] | |
34 | + end | |
35 | + | |
36 | + should 'invalid search string articles' do | |
37 | + fast_create(Article, :profile_id => person.id, :name => 'some article') | |
38 | + get "/api/v1/search/article?query=test" | |
39 | + json = JSON.parse(last_response.body) | |
40 | + assert_empty json['articles'] | |
41 | + end | |
42 | + | |
43 | + should 'not list articles of wrong type' do | |
44 | + Article.delete_all | |
45 | + fast_create(Article, :profile_id => person.id) | |
46 | + get "/api/v1/search/article?type=TinyMceArticle" | |
47 | + json = JSON.parse(last_response.body) | |
48 | + assert_empty json['articles'] | |
49 | + end | |
50 | + | |
51 | + should 'list articles of one type' do | |
52 | + fast_create(Article, :profile_id => person.id) | |
53 | + article = fast_create(TinyMceArticle, :profile_id => person.id) | |
54 | + | |
55 | + get "/api/v1/search/article?type=TinyMceArticle" | |
56 | + json = JSON.parse(last_response.body) | |
57 | + assert_equal article.id, json['articles'].first['id'] | |
58 | + end | |
59 | + | |
60 | + should 'list articles of one type and query string' do | |
61 | + fast_create(Article, :profile_id => person.id, :name => 'some article') | |
62 | + fast_create(Article, :profile_id => person.id, :name => 'Some thing') | |
63 | + article = fast_create(TinyMceArticle, :profile_id => person.id, :name => 'Some thing') | |
64 | + get "/api/v1/search/article?type=TinyMceArticle&query=thing" | |
65 | + json = JSON.parse(last_response.body) | |
66 | + assert_equal 1, json['articles'].count | |
67 | + assert_equal article.id, json['articles'].first['id'] | |
68 | + end | |
69 | + | |
70 | + should 'not return more entries than page limit' do | |
71 | + 1.upto(5).each do |n| | |
72 | + fast_create(Article, :profile_id => person.id, :name => "Article #{n}") | |
73 | + end | |
74 | + | |
75 | + get "/api/v1/search/article?query=Article&per_page=3" | |
76 | + json = JSON.parse(last_response.body) | |
77 | + | |
78 | + assert_equal 3, json['articles'].count | |
79 | + end | |
80 | + | |
81 | + should 'return entries second page' do | |
82 | + 1.upto(5).each do |n| | |
83 | + fast_create(Article, :profile_id => person.id, :name => "Article #{n}") | |
84 | + end | |
85 | + | |
86 | + get "/api/v1/search/article?query=Article&per_page=3&page=2" | |
87 | + json = JSON.parse(last_response.body) | |
88 | + | |
89 | + assert_equal 2, json['articles'].count | |
90 | + end | |
91 | + | |
92 | + should 'search articles in profile' do | |
93 | + person2 = fast_create(Person) | |
94 | + fast_create(Article, :profile_id => person.id) | |
95 | + fast_create(Article, :profile_id => person.id) | |
96 | + article = fast_create(Article, :profile_id => person2.id) | |
97 | + | |
98 | + get "/api/v1/search/article?query=Article&profile_id=#{person2.id}" | |
99 | + json = JSON.parse(last_response.body) | |
100 | + assert_equal article.id, json['articles'].first['id'] | |
101 | + end | |
102 | + | |
103 | + should 'search and return values specified in fields parameter' do | |
104 | + fast_create(Article, :profile_id => person.id) | |
105 | + get "/api/v1/search/article?fields=title" | |
106 | + json = JSON.parse(last_response.body) | |
107 | + assert_not_empty json['articles'] | |
108 | + assert_equal ['title'], json['articles'].first.keys | |
109 | + end | |
110 | + | |
111 | + should 'search with parent' do | |
112 | + parent = fast_create(Folder, :profile_id => person.id) | |
113 | + fast_create(Article, :profile_id => person.id) | |
114 | + article = fast_create(Article, :profile_id => person.id, :parent_id => parent.id) | |
115 | + get "/api/v1/search/article?parent_id=#{parent.id}" | |
116 | + json = JSON.parse(last_response.body) | |
117 | + assert_equal 1, json['articles'].count | |
118 | + assert_equal article.id, json['articles'].first["id"] | |
119 | + end | |
120 | + | |
121 | + should 'search filter by category' do | |
122 | + Article.delete_all | |
123 | + fast_create(Article, :profile_id => person.id) | |
124 | + article = fast_create(Article, :profile_id => person.id) | |
125 | + category = fast_create(Category) | |
126 | + article.categories<< category | |
127 | + get "/api/v1/search/article?category_ids=#{category.id}" | |
128 | + json = JSON.parse(last_response.body) | |
129 | + assert_equal 1, json['articles'].count | |
130 | + assert_equal article.id, json['articles'].first["id"] | |
131 | + end | |
132 | + | |
133 | + should 'search filter by more than one category' do | |
134 | + Article.delete_all | |
135 | + fast_create(Article, :profile_id => person.id) | |
136 | + article1 = fast_create(Article, :profile_id => person.id) | |
137 | + article2 = fast_create(Article, :profile_id => person.id) | |
138 | + category1 = fast_create(Category) | |
139 | + category2 = fast_create(Category) | |
140 | + article1.categories<< category1 | |
141 | + article2.categories<< category2 | |
142 | + get "/api/v1/search/article?category_ids[]=#{category1.id}&category_ids[]=#{category2.id}" | |
143 | + json = JSON.parse(last_response.body) | |
144 | + ids = [article1.id, article2.id] | |
145 | + assert_equal 2, json['articles'].count | |
146 | + assert_includes ids, json['articles'].first["id"] | |
147 | + assert_includes ids, json['articles'].last["id"] | |
148 | + end | |
149 | + | |
150 | +end | ... | ... |
... | ... | @@ -0,0 +1,221 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class SessionTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + login_api | |
7 | + end | |
8 | + | |
9 | + should 'generate private token when login' do | |
10 | + params = {:login => "testapi", :password => "testapi"} | |
11 | + post "/api/v1/login?#{params.to_query}" | |
12 | + json = JSON.parse(last_response.body) | |
13 | + assert !json['user']["private_token"].blank? | |
14 | + end | |
15 | + | |
16 | + should 'return 401 when login fails' do | |
17 | + user.destroy | |
18 | + params = {:login => "testapi", :password => "testapi"} | |
19 | + post "/api/v1/login?#{params.to_query}" | |
20 | + assert_equal 401, last_response.status | |
21 | + end | |
22 | + | |
23 | + should 'register a user' do | |
24 | + Environment.default.enable('skip_new_user_email_confirmation') | |
25 | + params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
26 | + post "/api/v1/register?#{params.to_query}" | |
27 | + assert_equal 201, last_response.status | |
28 | + json = JSON.parse(last_response.body) | |
29 | + assert User['newuserapi'].activated? | |
30 | + assert json['user']['activated'] | |
31 | + assert json['user']['private_token'].present? | |
32 | + end | |
33 | + | |
34 | + should 'register a user with name' do | |
35 | + Environment.default.enable('skip_new_user_email_confirmation') | |
36 | + params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com", :name => "Little John" } | |
37 | + post "/api/v1/register?#{params.to_query}" | |
38 | + assert_equal 201, last_response.status | |
39 | + json = JSON.parse(last_response.body) | |
40 | + assert json['user']['activated'] | |
41 | + assert json['user']['private_token'].present? | |
42 | + end | |
43 | + | |
44 | + should 'register an inactive user' do | |
45 | + params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
46 | + post "/api/v1/register?#{params.to_query}" | |
47 | + assert_equal 201, last_response.status | |
48 | + json = JSON.parse(last_response.body) | |
49 | + assert !json['activated'] | |
50 | + assert json['private_token'].blank? | |
51 | + end | |
52 | + | |
53 | + should 'not register a user with invalid login' do | |
54 | + params = {:login => "c", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
55 | + post "/api/v1/register?#{params.to_query}" | |
56 | + assert_equal 400, last_response.status | |
57 | + json = JSON.parse(last_response.body) | |
58 | + msg = json['message'].split(':') | |
59 | + key = msg[0][2, 5] | |
60 | + val = msg[1][2, 38] | |
61 | + assert_equal "login", key | |
62 | + assert_equal "is too short (minimum is 2 characters)", val | |
63 | + end | |
64 | + | |
65 | + should 'not register a user with invalid login pt' do | |
66 | + I18n.locale = "pt-BR" | |
67 | + params = {:lang => "pt-BR", :login => "c", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
68 | + post "/api/v1/register?#{params.to_query}" | |
69 | + assert_equal 400, last_response.status | |
70 | + json = JSON.parse(last_response.body) | |
71 | + msg = json['message'].split(':') | |
72 | + key = msg[0][2, 5] | |
73 | + val = msg[1][2, 35] | |
74 | + assert_equal "login", key | |
75 | + assert val.include? "muito curto" | |
76 | + end | |
77 | + | |
78 | + should 'not register a user without email' do | |
79 | + params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => nil } | |
80 | + post "/api/v1/register?#{params.to_query}" | |
81 | + assert_equal 400, last_response.status | |
82 | + end | |
83 | + | |
84 | + should 'not register a duplicated user' do | |
85 | + params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
86 | + post "/api/v1/register?#{params.to_query}" | |
87 | + post "/api/v1/register?#{params.to_query}" | |
88 | + assert_equal 400, last_response.status | |
89 | + json = JSON.parse(last_response.body) | |
90 | + end | |
91 | + | |
92 | + # TODO: Add another test cases to check register situations | |
93 | + should 'activate a user' do | |
94 | + params = { | |
95 | + :login => "newuserapi", | |
96 | + :password => "newuserapi", | |
97 | + :password_confirmation => "newuserapi", | |
98 | + :email => "newuserapi@email.com" | |
99 | + } | |
100 | + user = User.new(params) | |
101 | + user.save! | |
102 | + | |
103 | + params = { activation_code: user.activation_code} | |
104 | + patch "/api/v1/activate?#{params.to_query}" | |
105 | + assert_equal 200, last_response.status | |
106 | + end | |
107 | + | |
108 | + should 'do not activate a user if admin must approve him' do | |
109 | + params = { | |
110 | + :login => "newuserapi", | |
111 | + :password => "newuserapi", | |
112 | + :password_confirmation => "newuserapi", | |
113 | + :email => "newuserapi@email.com", | |
114 | + :environment => Environment.default | |
115 | + } | |
116 | + user = User.new(params) | |
117 | + user.environment.enable('admin_must_approve_new_users') | |
118 | + user.save! | |
119 | + | |
120 | + params = { activation_code: user.activation_code} | |
121 | + patch "/api/v1/activate?#{params.to_query}" | |
122 | + assert_equal 202, last_response.status | |
123 | + assert_equal 'Waiting for admin moderate user registration', JSON.parse(last_response.body)["message"] | |
124 | + end | |
125 | + | |
126 | + should 'do not activate a user if the token is invalid' do | |
127 | + params = { | |
128 | + :login => "newuserapi", | |
129 | + :password => "newuserapi", | |
130 | + :password_confirmation => "newuserapi", | |
131 | + :email => "newuserapi@email.com", | |
132 | + :environment => Environment.default | |
133 | + } | |
134 | + user = User.new(params) | |
135 | + user.save! | |
136 | + | |
137 | + params = { activation_code: '70250abe20cc6a67ef9399cf3286cb998b96aeaf'} | |
138 | + patch "/api/v1/activate?#{params.to_query}" | |
139 | + assert_equal 412, last_response.status | |
140 | + end | |
141 | + | |
142 | + should 'create task to change password by user login' do | |
143 | + user = create_user | |
144 | + params = {:value => user.login} | |
145 | + assert_difference 'ChangePassword.count' do | |
146 | + post "/api/v1/forgot_password?#{params.to_query}" | |
147 | + end | |
148 | + end | |
149 | + | |
150 | + should 'not create task to change password when user is not found' do | |
151 | + params = {:value => 'wronglogin'} | |
152 | + assert_no_difference 'ChangePassword.count' do | |
153 | + post "/api/v1/forgot_password?#{params.to_query}" | |
154 | + end | |
155 | + assert_equal 404, last_response.status | |
156 | + end | |
157 | + | |
158 | + should 'change user password and close task' do | |
159 | + task = ChangePassword.create!(:requestor => @person) | |
160 | + params.merge!({:code => task.code, :password => 'secret', :password_confirmation => 'secret'}) | |
161 | + patch "/api/v1/new_password?#{params.to_query}" | |
162 | + assert_equal Task::Status::FINISHED, task.reload.status | |
163 | + assert user.reload.authenticated?('secret') | |
164 | + json = JSON.parse(last_response.body) | |
165 | + assert_equal user.id, json['user']['id'] | |
166 | + end | |
167 | + | |
168 | + should 'do not change user password when password confirmation is wrong' do | |
169 | + user = create_user | |
170 | + user.activate | |
171 | + task = ChangePassword.create!(:requestor => user.person) | |
172 | + params = {:code => task.code, :password => 'secret', :password_confirmation => 's3cret'} | |
173 | + patch "/api/v1/new_password?#{params.to_query}" | |
174 | + assert_equal Task::Status::ACTIVE, task.reload.status | |
175 | + assert !user.reload.authenticated?('secret') | |
176 | + assert_equal 400, last_response.status | |
177 | + end | |
178 | + | |
179 | + should 'render not found when provide a wrong code on password change' do | |
180 | + params = {:code => "wrongcode", :password => 'secret', :password_confirmation => 'secret'} | |
181 | + patch "/api/v1/new_password?#{params.to_query}" | |
182 | + assert_equal 404, last_response.status | |
183 | + end | |
184 | + | |
185 | + should 'not return private token when the registered user is inactive' do | |
186 | + params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
187 | + post "/api/v1/register?#{params.to_query}" | |
188 | + assert_equal 201, last_response.status | |
189 | + json = JSON.parse(last_response.body) | |
190 | + assert !User['newuserapi'].activated? | |
191 | + assert !json['user']['activated'] | |
192 | + assert !json['user']['private_token'].present? | |
193 | + end | |
194 | + | |
195 | + should 'resend activation code for an inactive user' do | |
196 | + user = create_user | |
197 | + params = {:value => user.login} | |
198 | + Delayed::Job.destroy_all | |
199 | + assert_difference 'ActionMailer::Base.deliveries.size' do | |
200 | + post "/api/v1/resend_activation_code?#{params.to_query}" | |
201 | + process_delayed_job_queue | |
202 | + end | |
203 | + json = JSON.parse(last_response.body) | |
204 | + refute json['users'].first['private_token'] | |
205 | + assert_equal user.email, ActionMailer::Base.deliveries.last['to'].to_s | |
206 | + end | |
207 | + | |
208 | + should 'not resend activation code for an active user' do | |
209 | + user = create_user | |
210 | + params = {:value => user.login} | |
211 | + user.activate | |
212 | + Delayed::Job.destroy_all | |
213 | + assert_no_difference 'ActionMailer::Base.deliveries.size' do | |
214 | + post "/api/v1/resend_activation_code?#{params.to_query}" | |
215 | + process_delayed_job_queue | |
216 | + end | |
217 | + json = JSON.parse(last_response.body) | |
218 | + assert json['users'].first['private_token'] | |
219 | + end | |
220 | + | |
221 | +end | ... | ... |
... | ... | @@ -0,0 +1,173 @@ |
1 | +require_relative 'test_helper' | |
2 | + | |
3 | +class TasksTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + login_api | |
7 | + @person = user.person | |
8 | + @community = fast_create(Community) | |
9 | + @environment = Environment.default | |
10 | + end | |
11 | + | |
12 | + attr_accessor :person, :community, :environment | |
13 | + | |
14 | + should 'list tasks of environment' do | |
15 | + environment.add_admin(person) | |
16 | + task = create(Task, :requestor => person, :target => environment) | |
17 | + get "/api/v1/tasks?#{params.to_query}" | |
18 | + json = JSON.parse(last_response.body) | |
19 | + assert_includes json["tasks"].map { |a| a["id"] }, task.id | |
20 | + end | |
21 | + | |
22 | + should 'return environment task by id' do | |
23 | + environment.add_admin(person) | |
24 | + task = create(Task, :requestor => person, :target => environment) | |
25 | + get "/api/v1/tasks/#{task.id}?#{params.to_query}" | |
26 | + json = JSON.parse(last_response.body) | |
27 | + assert_equal task.id, json["task"]["id"] | |
28 | + end | |
29 | + | |
30 | + should 'not return environmet task if user has no permission to view it' do | |
31 | + person = fast_create(Person) | |
32 | + task = create(Task, :requestor => person, :target => environment) | |
33 | + | |
34 | + get "/api/v1/tasks/#{task.id}?#{params.to_query}" | |
35 | + assert_equal 403, last_response.status | |
36 | + end | |
37 | + | |
38 | + ############################# | |
39 | + # Community Tasks # | |
40 | + ############################# | |
41 | + | |
42 | + should 'return task by community' do | |
43 | + community = fast_create(Community) | |
44 | + community.add_admin(person) | |
45 | + | |
46 | + task = create(Task, :requestor => person, :target => community) | |
47 | + assert person.is_member_of?(community) | |
48 | + | |
49 | + get "/api/v1/communities/#{community.id}/tasks/#{task.id}?#{params.to_query}" | |
50 | + json = JSON.parse(last_response.body) | |
51 | + assert_equal task.id, json["task"]["id"] | |
52 | + end | |
53 | + | |
54 | + should 'not return task by community if user has no permission to view it' do | |
55 | + community = fast_create(Community) | |
56 | + task = create(Task, :requestor => person, :target => community) | |
57 | + assert !person.is_member_of?(community) | |
58 | + | |
59 | + get "/api/v1/communities/#{community.id}/tasks/#{task.id}?#{params.to_query}" | |
60 | + assert_equal 403, last_response.status | |
61 | + end | |
62 | + | |
63 | + should 'create task in a community' do | |
64 | + community = fast_create(Community) | |
65 | + give_permission(person, 'perform_task', community) | |
66 | + post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}" | |
67 | + json = JSON.parse(last_response.body) | |
68 | + assert_not_nil json["task"]["id"] | |
69 | + end | |
70 | + | |
71 | + should 'create task defining the requestor as current profile logged in' do | |
72 | + community = fast_create(Community) | |
73 | + community.add_member(person) | |
74 | + | |
75 | + post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}" | |
76 | + json = JSON.parse(last_response.body) | |
77 | + | |
78 | + assert_equal person, Task.last.requestor | |
79 | + end | |
80 | + | |
81 | + should 'create task defining the target as the community' do | |
82 | + community = fast_create(Community) | |
83 | + community.add_member(person) | |
84 | + | |
85 | + post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}" | |
86 | + json = JSON.parse(last_response.body) | |
87 | + | |
88 | + assert_equal community, Task.last.target | |
89 | + end | |
90 | + | |
91 | + ############################# | |
92 | + # Person Tasks # | |
93 | + ############################# | |
94 | + | |
95 | + should 'return task by person' do | |
96 | + task = create(Task, :requestor => person, :target => person) | |
97 | + get "/api/v1/people/#{person.id}/tasks/#{task.id}?#{params.to_query}" | |
98 | + json = JSON.parse(last_response.body) | |
99 | + assert_equal task.id, json["task"]["id"] | |
100 | + end | |
101 | + | |
102 | + should 'not return task by person if user has no permission to view it' do | |
103 | + some_person = fast_create(Person) | |
104 | + task = create(Task, :requestor => person, :target => some_person) | |
105 | + | |
106 | + get "/api/v1/people/#{some_person.id}/tasks/#{task.id}?#{params.to_query}" | |
107 | + assert_equal 403, last_response.status | |
108 | + end | |
109 | + | |
110 | + should 'create task for person' do | |
111 | + post "/api/v1/people/#{person.id}/tasks?#{params.to_query}" | |
112 | + json = JSON.parse(last_response.body) | |
113 | + assert_not_nil json["task"]["id"] | |
114 | + end | |
115 | + | |
116 | + should 'create task for another person' do | |
117 | + some_person = fast_create(Person) | |
118 | + post "/api/v1/people/#{some_person.id}/tasks?#{params.to_query}" | |
119 | + json = JSON.parse(last_response.body) | |
120 | + | |
121 | + assert_equal some_person, Task.last.target | |
122 | + end | |
123 | + | |
124 | + should 'create task defining the target as a person' do | |
125 | + post "/api/v1/people/#{person.id}/tasks?#{params.to_query}" | |
126 | + json = JSON.parse(last_response.body) | |
127 | + | |
128 | + assert_equal person, Task.last.target | |
129 | + end | |
130 | + | |
131 | + ############################# | |
132 | + # Enterprise Tasks # | |
133 | + ############################# | |
134 | + | |
135 | + should 'return task by enterprise' do | |
136 | + enterprise = fast_create(Enterprise) | |
137 | + enterprise.add_admin(person) | |
138 | + | |
139 | + task = create(Task, :requestor => person, :target => enterprise) | |
140 | + assert person.is_member_of?(enterprise) | |
141 | + | |
142 | + get "/api/v1/enterprises/#{enterprise.id}/tasks/#{task.id}?#{params.to_query}" | |
143 | + json = JSON.parse(last_response.body) | |
144 | + assert_equal task.id, json["task"]["id"] | |
145 | + end | |
146 | + | |
147 | + should 'not return task by enterprise if user has no permission to view it' do | |
148 | + enterprise = fast_create(Enterprise) | |
149 | + task = create(Task, :requestor => person, :target => enterprise) | |
150 | + assert !person.is_member_of?(enterprise) | |
151 | + | |
152 | + get "/api/v1/enterprises/#{enterprise.id}/tasks/#{task.id}?#{params.to_query}" | |
153 | + assert_equal 403, last_response.status | |
154 | + end | |
155 | + | |
156 | + should 'create task in a enterprise' do | |
157 | + enterprise = fast_create(Enterprise) | |
158 | + give_permission(person, 'perform_task', enterprise) | |
159 | + post "/api/v1/enterprises/#{enterprise.id}/tasks?#{params.to_query}" | |
160 | + json = JSON.parse(last_response.body) | |
161 | + assert_not_nil json["task"]["id"] | |
162 | + end | |
163 | + | |
164 | + should 'create task defining the target as the enterprise' do | |
165 | + enterprise = fast_create(Enterprise) | |
166 | + enterprise.add_member(person) | |
167 | + | |
168 | + post "/api/v1/enterprises/#{enterprise.id}/tasks?#{params.to_query}" | |
169 | + json = JSON.parse(last_response.body) | |
170 | + | |
171 | + assert_equal enterprise, Task.last.target | |
172 | + end | |
173 | +end | ... | ... |
... | ... | @@ -0,0 +1,36 @@ |
1 | +require 'test_helper' | |
2 | + | |
3 | +class ActiveSupport::TestCase | |
4 | + | |
5 | + include Rack::Test::Methods | |
6 | + | |
7 | + def app | |
8 | + Noosfero::API::API | |
9 | + end | |
10 | + | |
11 | + def login_api | |
12 | + @environment = Environment.default | |
13 | + @user = User.create!(:login => 'testapi', :password => 'testapi', :password_confirmation => 'testapi', :email => 'test@test.org', :environment => @environment) | |
14 | + @user.activate | |
15 | + @person = @user.person | |
16 | + | |
17 | + post "/api/v1/login?login=testapi&password=testapi" | |
18 | + json = JSON.parse(last_response.body) | |
19 | + @private_token = json["private_token"] | |
20 | + unless @private_token | |
21 | + @user.generate_private_token! | |
22 | + @private_token = @user.private_token | |
23 | + end | |
24 | + | |
25 | + @params = {:private_token => @private_token} | |
26 | + end | |
27 | + attr_accessor :private_token, :user, :person, :params, :environment | |
28 | + | |
29 | + private | |
30 | + | |
31 | + def json_response_ids(kind) | |
32 | + json = JSON.parse(last_response.body) | |
33 | + json[kind.to_s].map {|c| c['id']} | |
34 | + end | |
35 | + | |
36 | +end | ... | ... |
... | ... | @@ -0,0 +1,105 @@ |
1 | +# encoding: UTF-8 | |
2 | +require_relative 'test_helper' | |
3 | + | |
4 | +class UsersTest < ActiveSupport::TestCase | |
5 | + | |
6 | + def setup | |
7 | + login_api | |
8 | + end | |
9 | + | |
10 | + should 'list users' do | |
11 | + get "/api/v1/users/?#{params.to_query}" | |
12 | + json = JSON.parse(last_response.body) | |
13 | + assert_includes json["users"].map { |a| a["login"] }, user.login | |
14 | + end | |
15 | + | |
16 | + should 'get user' do | |
17 | + get "/api/v1/users/#{user.id}?#{params.to_query}" | |
18 | + json = JSON.parse(last_response.body) | |
19 | + assert_equal user.id, json['user']['id'] | |
20 | + end | |
21 | + | |
22 | + should 'list user permissions' do | |
23 | + community = fast_create(Community) | |
24 | + community.add_admin(person) | |
25 | + get "/api/v1/users/#{user.id}/?#{params.to_query}" | |
26 | + json = JSON.parse(last_response.body) | |
27 | + assert_includes json["user"]["permissions"], community.identifier | |
28 | + end | |
29 | + | |
30 | + should 'get logged user' do | |
31 | + get "/api/v1/users/me?#{params.to_query}" | |
32 | + json = JSON.parse(last_response.body) | |
33 | + assert_equal user.id, json['user']['id'] | |
34 | + end | |
35 | + | |
36 | + should 'not show permissions to logged user' do | |
37 | + target_person = create_user('some-user').person | |
38 | + get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
39 | + json = JSON.parse(last_response.body) | |
40 | + refute json["user"].has_key?("permissions") | |
41 | + end | |
42 | + | |
43 | + should 'show permissions to self' do | |
44 | + get "/api/v1/users/#{user.id}/?#{params.to_query}" | |
45 | + json = JSON.parse(last_response.body) | |
46 | + assert json["user"].has_key?("permissions") | |
47 | + end | |
48 | + | |
49 | + should 'not show permissions to friend' do | |
50 | + target_person = create_user('some-user').person | |
51 | + | |
52 | + f = Friendship.new | |
53 | + f.friend = target_person | |
54 | + f.person = person | |
55 | + f.save! | |
56 | + | |
57 | + get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
58 | + json = JSON.parse(last_response.body) | |
59 | + refute json["user"].has_key?("permissions") | |
60 | + end | |
61 | + | |
62 | + should 'not show private attribute to logged user' do | |
63 | + target_person = create_user('some-user').person | |
64 | + get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
65 | + json = JSON.parse(last_response.body) | |
66 | + refute json["user"].has_key?("email") | |
67 | + end | |
68 | + | |
69 | + should 'show private attr to friend' do | |
70 | + target_person = create_user('some-user').person | |
71 | + f = Friendship.new | |
72 | + f.friend = target_person | |
73 | + f.person = person | |
74 | + f.save! | |
75 | + get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
76 | + json = JSON.parse(last_response.body) | |
77 | + assert json["user"].has_key?("email") | |
78 | + assert_equal target_person.email, json["user"]["email"] | |
79 | + end | |
80 | + | |
81 | + should 'show public attribute to logged user' do | |
82 | + target_person = create_user('some-user').person | |
83 | + target_person.fields_privacy={:email=> 'public'} | |
84 | + target_person.save! | |
85 | + get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
86 | + json = JSON.parse(last_response.body) | |
87 | + assert json["user"].has_key?("email") | |
88 | + assert_equal json["user"]["email"],target_person.email | |
89 | + end | |
90 | + | |
91 | + should 'show public and private field to admin' do | |
92 | + Environment.default.add_admin(person) | |
93 | + | |
94 | + target_person = create_user('some-user').person | |
95 | + target_person.fields_privacy={:email=> 'public'} | |
96 | + target_person.save! | |
97 | + | |
98 | + get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
99 | + json = JSON.parse(last_response.body) | |
100 | + assert json["user"].has_key?("email") | |
101 | + assert json["user"].has_key?("permissions") | |
102 | + assert json["user"].has_key?("activated") | |
103 | + end | |
104 | + | |
105 | +end | ... | ... |
test/unit/api/activities_test.rb
... | ... | @@ -1,22 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class ActivitiesTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - login_api | |
7 | - end | |
8 | - | |
9 | - should 'get activity from profile' do | |
10 | - person = fast_create(Person) | |
11 | - organization = fast_create(Organization) | |
12 | - assert_difference 'organization.activities_count' do | |
13 | - ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => organization | |
14 | - organization.reload | |
15 | - end | |
16 | - get "/api/v1/profiles/#{organization.id}/activities?#{params.to_query}" | |
17 | - json = JSON.parse(last_response.body) | |
18 | - assert 1, json["activities"].count | |
19 | - assert_equal organization.activities.map(&:activity).first.id, json["activities"].first["id"] | |
20 | - end | |
21 | - | |
22 | -end |
test/unit/api/api_test.rb
... | ... | @@ -1,29 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class MyPlugin < Noosfero::Plugin;end | |
4 | -class MyPlugin::API;end | |
5 | - | |
6 | -class APITest < ActiveSupport::TestCase | |
7 | - | |
8 | - should 'endpoint should not be available if its plugin is unavailable' do | |
9 | - endpoint = mock() | |
10 | - environment = Environment.default | |
11 | - environment.stubs(:plugin_enabled?).returns(false) | |
12 | - endpoint.stubs(:options).returns({:for => MyPlugin::API}) | |
13 | - | |
14 | - assert Noosfero::API::API.endpoint_unavailable?(endpoint, environment) | |
15 | - end | |
16 | - | |
17 | - should 'endpoint should be available if its plugin is available' do | |
18 | - class MyPlugin < Noosfero::Plugin;end | |
19 | - class MyPlugin::API;end | |
20 | - | |
21 | - endpoint = mock() | |
22 | - environment = Environment.default | |
23 | - environment.stubs(:plugin_enabled?).returns(true) | |
24 | - endpoint.stubs(:options).returns({:for => MyPlugin::API}) | |
25 | - | |
26 | - assert !Noosfero::API::API.endpoint_unavailable?(endpoint, environment) | |
27 | - end | |
28 | - | |
29 | -end |
test/unit/api/articles_test.rb
... | ... | @@ -1,667 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class ArticlesTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - login_api | |
7 | - end | |
8 | - | |
9 | - should 'list articles' do | |
10 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
11 | - get "/api/v1/articles/?#{params.to_query}" | |
12 | - json = JSON.parse(last_response.body) | |
13 | - assert_includes json["articles"].map { |a| a["id"] }, article.id | |
14 | - end | |
15 | - | |
16 | - should 'get profile homepage' do | |
17 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
18 | - person.home_page=article | |
19 | - person.save! | |
20 | - | |
21 | - get "/api/v1/profiles/#{person.id}/home_page?#{params.to_query}" | |
22 | - json = JSON.parse(last_response.body) | |
23 | - assert_equal article.id, json["article"]["id"] | |
24 | - end | |
25 | - | |
26 | - should 'not list forbidden article when listing articles' do | |
27 | - person = fast_create(Person) | |
28 | - article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
29 | - assert !article.published? | |
30 | - | |
31 | - get "/api/v1/articles?#{params.to_query}" | |
32 | - json = JSON.parse(last_response.body) | |
33 | - assert_not_includes json['articles'].map {|a| a['id']}, article.id | |
34 | - end | |
35 | - | |
36 | - should 'return article by id' do | |
37 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
38 | - get "/api/v1/articles/#{article.id}?#{params.to_query}" | |
39 | - json = JSON.parse(last_response.body) | |
40 | - assert_equal article.id, json["article"]["id"] | |
41 | - end | |
42 | - | |
43 | - should 'not return article if user has no permission to view it' do | |
44 | - person = fast_create(Person, :environment_id => environment.id) | |
45 | - article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
46 | - assert !article.published? | |
47 | - | |
48 | - get "/api/v1/articles/#{article.id}?#{params.to_query}" | |
49 | - assert_equal 403, last_response.status | |
50 | - end | |
51 | - | |
52 | - should 'follow a article identified by id' do | |
53 | - article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
54 | - post "/api/v1/articles/#{article.id}/follow?#{params.to_query}" | |
55 | - json = JSON.parse(last_response.body) | |
56 | - | |
57 | - assert_not_equal 401, last_response.status | |
58 | - assert_equal true, json['success'] | |
59 | - end | |
60 | - | |
61 | - should 'return the followers count of an article' do | |
62 | - article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
63 | - article.person_followers << @person | |
64 | - | |
65 | - get "/api/v1/articles/#{article.id}?#{params.to_query}" | |
66 | - json = JSON.parse(last_response.body) | |
67 | - | |
68 | - assert_equal 200, last_response.status | |
69 | - assert_equal 1, json['article']['followers_count'] | |
70 | - end | |
71 | - | |
72 | - should 'return the followers of a article identified by id' do | |
73 | - article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
74 | - | |
75 | - article_follower = ArticleFollower.new | |
76 | - article_follower.article = article | |
77 | - article_follower.person = @person | |
78 | - article_follower.save! | |
79 | - | |
80 | - get "/api/v1/articles/#{article.id}/followers?#{params.to_query}" | |
81 | - json = JSON.parse(last_response.body) | |
82 | - | |
83 | - assert_equal 200, last_response.status | |
84 | - assert_equal 1, json['total_followers'] | |
85 | - end | |
86 | - | |
87 | - should 'list articles followed by me' do | |
88 | - article1 = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
89 | - fast_create(Article, :profile_id => user.person.id, :name => "Some other thing") | |
90 | - article1.person_followers << @person | |
91 | - get "/api/v1/articles/followed_by_me?#{params.to_query}" | |
92 | - json = JSON.parse(last_response.body) | |
93 | - assert_equal [article1.id], json['articles'].map { |a| a['id'] } | |
94 | - end | |
95 | - | |
96 | - | |
97 | - should 'list article children' do | |
98 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
99 | - child1 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
100 | - child2 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
101 | - get "/api/v1/articles/#{article.id}/children?#{params.to_query}" | |
102 | - json = JSON.parse(last_response.body) | |
103 | - assert_equivalent [child1.id, child2.id], json["articles"].map { |a| a["id"] } | |
104 | - end | |
105 | - | |
106 | - should 'list public article children for not logged in access' do | |
107 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
108 | - child1 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
109 | - child2 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
110 | - get "/api/v1/articles/#{article.id}/children" | |
111 | - json = JSON.parse(last_response.body) | |
112 | - assert_equivalent [child1.id, child2.id], json["articles"].map { |a| a["id"] } | |
113 | - end | |
114 | - | |
115 | - should 'not list children of forbidden article' do | |
116 | - person = fast_create(Person, :environment_id => environment.id) | |
117 | - article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
118 | - child1 = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing") | |
119 | - child2 = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing") | |
120 | - get "/api/v1/articles/#{article.id}/children?#{params.to_query}" | |
121 | - assert_equal 403, last_response.status | |
122 | - end | |
123 | - | |
124 | - should 'not return child of forbidden article' do | |
125 | - person = fast_create(Person, :environment_id => environment.id) | |
126 | - article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
127 | - child = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing") | |
128 | - get "/api/v1/articles/#{article.id}/children/#{child.id}?#{params.to_query}" | |
129 | - assert_equal 403, last_response.status | |
130 | - end | |
131 | - | |
132 | - should 'not return private child' do | |
133 | - person = fast_create(Person, :environment_id => environment.id) | |
134 | - article = fast_create(Article, :profile_id => person.id, :name => "Some thing") | |
135 | - child = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing", :published => false) | |
136 | - get "/api/v1/articles/#{article.id}/children/#{child.id}?#{params.to_query}" | |
137 | - assert_equal 403, last_response.status | |
138 | - end | |
139 | - | |
140 | - should 'not list private child' do | |
141 | - person = fast_create(Person, :environment_id => environment.id) | |
142 | - article = fast_create(Article, :profile_id => person.id, :name => "Some thing") | |
143 | - child = fast_create(Article, :parent_id => article.id, :profile_id => person.id, :name => "Some thing", :published => false) | |
144 | - get "/api/v1/articles/#{article.id}/children?#{params.to_query}" | |
145 | - json = JSON.parse(last_response.body) | |
146 | - assert_not_includes json['articles'].map {|a| a['id']}, child.id | |
147 | - end | |
148 | - | |
149 | - should 'perform a vote in a article identified by id' do | |
150 | - article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
151 | - @params[:value] = 1 | |
152 | - | |
153 | - post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
154 | - json = JSON.parse(last_response.body) | |
155 | - | |
156 | - assert_not_equal 401, last_response.status | |
157 | - assert_equal true, json['vote'] | |
158 | - end | |
159 | - | |
160 | - expose_attributes = %w(id body abstract created_at title author profile categories image votes_for votes_against setting position hits start_date end_date tag_list parent children children_count) | |
161 | - | |
162 | - expose_attributes.each do |attr| | |
163 | - should "expose article #{attr} attribute by default" do | |
164 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
165 | - get "/api/v1/articles/?#{params.to_query}" | |
166 | - json = JSON.parse(last_response.body) | |
167 | - assert json["articles"].last.has_key?(attr) | |
168 | - end | |
169 | - end | |
170 | - | |
171 | - should 'not perform a vote twice in same article' do | |
172 | - article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
173 | - @params[:value] = 1 | |
174 | - ## Perform a vote twice in API should compute only one vote | |
175 | - post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
176 | - post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
177 | - | |
178 | - total = article.votes_total | |
179 | - | |
180 | - assert_equal 1, total | |
181 | - end | |
182 | - | |
183 | - should 'not perform a vote in favor and against a proposal' do | |
184 | - article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | |
185 | - @params[:value] = 1 | |
186 | - ## Perform a vote in favor a proposal | |
187 | - post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
188 | - json = JSON.parse(last_response.body) | |
189 | - assert_equal 201, last_response.status | |
190 | - ## Perform a vote against a proposal | |
191 | - @params[:value] = -1 | |
192 | - post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
193 | - json = JSON.parse(last_response.body) | |
194 | - ## The api should not allow to save this vote | |
195 | - assert_equal 400, last_response.status | |
196 | - end | |
197 | - | |
198 | - should "update body of article created by me" do | |
199 | - new_value = "Another body" | |
200 | - params[:article] = {:body => new_value} | |
201 | - article = fast_create(Article, :profile_id => person.id) | |
202 | - post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
203 | - json = JSON.parse(last_response.body) | |
204 | - assert_equal new_value, json["article"]["body"] | |
205 | - end | |
206 | - | |
207 | - should "update title of article created by me" do | |
208 | - new_value = "Another name" | |
209 | - params[:article] = {:name => new_value} | |
210 | - article = fast_create(Article, :profile_id => person.id) | |
211 | - post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
212 | - json = JSON.parse(last_response.body) | |
213 | - assert_equal new_value, json["article"]["title"] | |
214 | - end | |
215 | - | |
216 | - should 'not update article of another user' do | |
217 | - another_person = fast_create(Person, :environment_id => environment.id) | |
218 | - article = fast_create(Article, :profile_id => another_person.id) | |
219 | - params[:article] = {:title => 'Some title'} | |
220 | - post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
221 | - assert_equal 403, last_response.status | |
222 | - end | |
223 | - | |
224 | - should 'not update article without permission in community' do | |
225 | - community = fast_create(Community, :environment_id => environment.id) | |
226 | - article = fast_create(Article, :profile_id => community.id) | |
227 | - params[:article] = {:name => 'New title'} | |
228 | - post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
229 | - assert_equal 403, last_response.status | |
230 | - end | |
231 | - | |
232 | - | |
233 | - should 'update article of community if user has permission' do | |
234 | - community = fast_create(Community, :environment_id => environment.id) | |
235 | - give_permission(person, 'post_content', community) | |
236 | - article = fast_create(Article, :profile_id => community.id) | |
237 | - new_value = "Another body" | |
238 | - params[:article] = {:body => new_value} | |
239 | - post "/api/v1/articles/#{article.id}?#{params.to_query}" | |
240 | - json = JSON.parse(last_response.body) | |
241 | - assert_equal new_value, json["article"]["body"] | |
242 | - end | |
243 | - | |
244 | - should 'list articles with pagination' do | |
245 | - Article.destroy_all | |
246 | - article_one = fast_create(Article, :profile_id => user.person.id, :name => "Another thing", :created_at => 2.days.ago) | |
247 | - article_two = fast_create(Article, :profile_id => user.person.id, :name => "Some thing", :created_at => 1.day.ago) | |
248 | - | |
249 | - params[:page] = 1 | |
250 | - params[:per_page] = 1 | |
251 | - get "/api/v1/articles/?#{params.to_query}" | |
252 | - json_page_one = JSON.parse(last_response.body) | |
253 | - | |
254 | - params[:page] = 2 | |
255 | - params[:per_page] = 1 | |
256 | - get "/api/v1/articles/?#{params.to_query}" | |
257 | - json_page_two = JSON.parse(last_response.body) | |
258 | - | |
259 | - assert_includes json_page_one["articles"].map { |a| a["id"] }, article_two.id | |
260 | - assert_not_includes json_page_one["articles"].map { |a| a["id"] }, article_one.id | |
261 | - | |
262 | - assert_includes json_page_two["articles"].map { |a| a["id"] }, article_one.id | |
263 | - assert_not_includes json_page_two["articles"].map { |a| a["id"] }, article_two.id | |
264 | - end | |
265 | - | |
266 | - should 'list articles with timestamp' do | |
267 | - article_one = fast_create(Article, :profile_id => user.person.id, :name => "Another thing") | |
268 | - article_two = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
269 | - | |
270 | - article_one.updated_at = Time.now + 3.hours | |
271 | - article_one.save! | |
272 | - | |
273 | - params[:timestamp] = Time.now + 1.hours | |
274 | - get "/api/v1/articles/?#{params.to_query}" | |
275 | - json = JSON.parse(last_response.body) | |
276 | - | |
277 | - assert_includes json["articles"].map { |a| a["id"] }, article_one.id | |
278 | - assert_not_includes json["articles"].map { |a| a["id"] }, article_two.id | |
279 | - end | |
280 | - | |
281 | - ############################# | |
282 | - # Profile Articles # | |
283 | - ############################# | |
284 | - | |
285 | - profile_kinds = %w(community person enterprise) | |
286 | - profile_kinds.each do |kind| | |
287 | - should "return article by #{kind}" do | |
288 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
289 | - article = fast_create(Article, :profile_id => profile.id, :name => "Some thing") | |
290 | - get "/api/v1/#{kind.pluralize}/#{profile.id}/articles/#{article.id}?#{params.to_query}" | |
291 | - json = JSON.parse(last_response.body) | |
292 | - assert_equal article.id, json["article"]["id"] | |
293 | - end | |
294 | - | |
295 | - should "not return article by #{kind} if user has no permission to view it" do | |
296 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
297 | - article = fast_create(Article, :profile_id => profile.id, :name => "Some thing", :published => false) | |
298 | - assert !article.published? | |
299 | - | |
300 | - get "/api/v1/#{kind.pluralize}/#{profile.id}/articles/#{article.id}?#{params.to_query}" | |
301 | - assert_equal 403, last_response.status | |
302 | - end | |
303 | - | |
304 | - should "not list forbidden article when listing articles by #{kind}" do | |
305 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
306 | - article = fast_create(Article, :profile_id => profile.id, :name => "Some thing", :published => false) | |
307 | - assert !article.published? | |
308 | - | |
309 | - get "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
310 | - json = JSON.parse(last_response.body) | |
311 | - assert_not_includes json['articles'].map {|a| a['id']}, article.id | |
312 | - end | |
313 | - | |
314 | - should "return article by #{kind} and path" do | |
315 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
316 | - parent_article = Folder.create!(:profile => profile, :name => "Parent Folder") | |
317 | - article = Article.create!(:profile => profile, :name => "Some thing", :parent => parent_article) | |
318 | - | |
319 | - params[:path] = parent_article.slug+'/'+article.slug | |
320 | - get "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
321 | - json = JSON.parse(last_response.body) | |
322 | - assert_equal article.id, json["article"]["id"] | |
323 | - end | |
324 | - | |
325 | - should "not return article by #{kind} and path if user has no permission to view it" do | |
326 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
327 | - parent_article = Folder.create!(:profile => profile, :name => "Parent Folder") | |
328 | - article = Article.create!(:profile => profile, :name => "Some thing", :parent => parent_article, :published => false) | |
329 | - | |
330 | - assert !article.published? | |
331 | - | |
332 | - params[:path] = parent_article.slug+'/'+article.slug | |
333 | - get "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
334 | - assert_equal 403, last_response.status | |
335 | - end | |
336 | - end | |
337 | - | |
338 | - ############################# | |
339 | - # Group Profile Articles # | |
340 | - ############################# | |
341 | - | |
342 | - group_kinds = %w(community enterprise) | |
343 | - group_kinds.each do |kind| | |
344 | - should "#{kind}: create article" do | |
345 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
346 | - give_permission(user.person, 'post_content', profile) | |
347 | - params[:article] = {:name => "Title"} | |
348 | - post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
349 | - json = JSON.parse(last_response.body) | |
350 | - assert_equal "Title", json["article"]["title"] | |
351 | - end | |
352 | - | |
353 | - should "#{kind}: do not create article if user has no permission to post content" do | |
354 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
355 | - give_permission(user.person, 'invite_members', profile) | |
356 | - params[:article] = {:name => "Title"} | |
357 | - post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
358 | - assert_equal 403, last_response.status | |
359 | - end | |
360 | - | |
361 | - should "#{kind} create article with parent" do | |
362 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
363 | - Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
364 | - article = fast_create(Article) | |
365 | - | |
366 | - params[:article] = {:name => "Title", :parent_id => article.id} | |
367 | - post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
368 | - json = JSON.parse(last_response.body) | |
369 | - assert_equal article.id, json["article"]["parent"]["id"] | |
370 | - end | |
371 | - | |
372 | - should "#{kind} create article with content type passed as parameter" do | |
373 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
374 | - Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
375 | - | |
376 | - Article.delete_all | |
377 | - params[:article] = {:name => "Title"} | |
378 | - params[:content_type] = 'TextArticle' | |
379 | - post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
380 | - json = JSON.parse(last_response.body) | |
381 | - | |
382 | - assert_kind_of TextArticle, Article.last | |
383 | - end | |
384 | - | |
385 | - should "#{kind}: create article of TinyMceArticle type if no content type is passed as parameter" do | |
386 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
387 | - Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
388 | - | |
389 | - params[:article] = {:name => "Title"} | |
390 | - post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
391 | - json = JSON.parse(last_response.body) | |
392 | - | |
393 | - assert_kind_of TinyMceArticle, Article.last | |
394 | - end | |
395 | - | |
396 | - should "#{kind}: not create article with invalid article content type" do | |
397 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
398 | - profile.add_member(user.person) | |
399 | - | |
400 | - params[:article] = {:name => "Title"} | |
401 | - params[:content_type] = 'Person' | |
402 | - post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
403 | - json = JSON.parse(last_response.body) | |
404 | - | |
405 | - assert_equal 403, last_response.status | |
406 | - end | |
407 | - | |
408 | - should "#{kind} create article defining the correct profile" do | |
409 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
410 | - Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
411 | - | |
412 | - params[:article] = {:name => "Title"} | |
413 | - post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
414 | - json = JSON.parse(last_response.body) | |
415 | - | |
416 | - assert_equal profile.id, json['article']['profile']['id'] | |
417 | - end | |
418 | - | |
419 | - should "#{kind}: create article defining the created_by" do | |
420 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
421 | - Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
422 | - | |
423 | - params[:article] = {:name => "Title"} | |
424 | - post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
425 | - json = JSON.parse(last_response.body) | |
426 | - | |
427 | - assert_equal user.person, Article.last.created_by | |
428 | - end | |
429 | - | |
430 | - should "#{kind}: create article defining the last_changed_by" do | |
431 | - profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
432 | - Person.any_instance.stubs(:can_post_content?).with(profile).returns(true) | |
433 | - | |
434 | - params[:article] = {:name => "Title"} | |
435 | - post "/api/v1/#{kind.pluralize}/#{profile.id}/articles?#{params.to_query}" | |
436 | - json = JSON.parse(last_response.body) | |
437 | - | |
438 | - assert_equal user.person, Article.last.last_changed_by | |
439 | - end | |
440 | - end | |
441 | - | |
442 | - ############################# | |
443 | - # Person Articles # | |
444 | - ############################# | |
445 | - | |
446 | - should 'create article in a person' do | |
447 | - params[:article] = {:name => "Title"} | |
448 | - post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
449 | - json = JSON.parse(last_response.body) | |
450 | - assert_equal "Title", json["article"]["title"] | |
451 | - end | |
452 | - | |
453 | - should 'person do not create article if user has no permission to post content' do | |
454 | - person = fast_create(Person, :environment_id => environment.id) | |
455 | - params[:article] = {:name => "Title"} | |
456 | - post "/api/v1/people/#{person.id}/articles?#{params.to_query}" | |
457 | - assert_equal 403, last_response.status | |
458 | - end | |
459 | - | |
460 | - should 'person create article with parent' do | |
461 | - article = fast_create(Article) | |
462 | - | |
463 | - params[:article] = {:name => "Title", :parent_id => article.id} | |
464 | - post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
465 | - json = JSON.parse(last_response.body) | |
466 | - assert_equal article.id, json["article"]["parent"]["id"] | |
467 | - end | |
468 | - | |
469 | - should 'person create article with content type passed as parameter' do | |
470 | - Article.delete_all | |
471 | - params[:article] = {:name => "Title"} | |
472 | - params[:content_type] = 'TextArticle' | |
473 | - post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
474 | - json = JSON.parse(last_response.body) | |
475 | - | |
476 | - assert_kind_of TextArticle, Article.last | |
477 | - end | |
478 | - | |
479 | - should 'person create article of TinyMceArticle type if no content type is passed as parameter' do | |
480 | - params[:article] = {:name => "Title"} | |
481 | - post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
482 | - json = JSON.parse(last_response.body) | |
483 | - | |
484 | - assert_kind_of TinyMceArticle, Article.last | |
485 | - end | |
486 | - | |
487 | - should 'person not create article with invalid article content type' do | |
488 | - params[:article] = {:name => "Title"} | |
489 | - params[:content_type] = 'Person' | |
490 | - post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
491 | - json = JSON.parse(last_response.body) | |
492 | - | |
493 | - assert_equal 403, last_response.status | |
494 | - end | |
495 | - | |
496 | - should 'person create article defining the correct profile' do | |
497 | - params[:article] = {:name => "Title"} | |
498 | - post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
499 | - json = JSON.parse(last_response.body) | |
500 | - | |
501 | - assert_equal user.person, Article.last.profile | |
502 | - end | |
503 | - | |
504 | - should 'person create article defining the created_by' do | |
505 | - params[:article] = {:name => "Title"} | |
506 | - post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
507 | - json = JSON.parse(last_response.body) | |
508 | - | |
509 | - assert_equal user.person, Article.last.created_by | |
510 | - end | |
511 | - | |
512 | - should 'person create article defining the last_changed_by' do | |
513 | - params[:article] = {:name => "Title"} | |
514 | - post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}" | |
515 | - json = JSON.parse(last_response.body) | |
516 | - | |
517 | - assert_equal user.person, Article.last.last_changed_by | |
518 | - end | |
519 | - | |
520 | - should 'list article children with partial fields' do | |
521 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
522 | - child1 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") | |
523 | - params[:fields] = [:title] | |
524 | - get "/api/v1/articles/#{article.id}/children?#{params.to_query}" | |
525 | - json = JSON.parse(last_response.body) | |
526 | - assert_equal ['title'], json['articles'].first.keys | |
527 | - end | |
528 | - | |
529 | - should 'suggest article children' do | |
530 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
531 | - params[:target_id] = user.person.id | |
532 | - params[:article] = {:name => "Article name", :body => "Article body"} | |
533 | - assert_difference "SuggestArticle.count" do | |
534 | - post "/api/v1/articles/#{article.id}/children/suggest?#{params.to_query}" | |
535 | - end | |
536 | - json = JSON.parse(last_response.body) | |
537 | - assert_equal 'SuggestArticle', json['task']['type'] | |
538 | - end | |
539 | - | |
540 | - should 'suggest event children' do | |
541 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
542 | - params[:target_id] = user.person.id | |
543 | - params[:article] = {:name => "Article name", :body => "Article body", :type => "Event"} | |
544 | - assert_difference "SuggestArticle.count" do | |
545 | - post "/api/v1/articles/#{article.id}/children/suggest?#{params.to_query}" | |
546 | - end | |
547 | - json = JSON.parse(last_response.body) | |
548 | - assert_equal 'SuggestArticle', json['task']['type'] | |
549 | - end | |
550 | - | |
551 | - should 'update hit attribute of article children' do | |
552 | - a1 = fast_create(Article, :profile_id => user.person.id) | |
553 | - a2 = fast_create(Article, :parent_id => a1.id, :profile_id => user.person.id) | |
554 | - a3 = fast_create(Article, :parent_id => a1.id, :profile_id => user.person.id) | |
555 | - get "/api/v1/articles/#{a1.id}/children?#{params.to_query}" | |
556 | - json = JSON.parse(last_response.body) | |
557 | - assert_equal [1, 1], json['articles'].map { |a| a['hits']} | |
558 | - assert_equal [0, 1, 1], [a1.reload.hits, a2.reload.hits, a3.reload.hits] | |
559 | - end | |
560 | - | |
561 | - should 'update hit attribute of article specific children' do | |
562 | - a1 = fast_create(Article, :profile_id => user.person.id) | |
563 | - a2 = fast_create(Article, :parent_id => a1.id, :profile_id => user.person.id) | |
564 | - get "/api/v1/articles/#{a1.id}/children/#{a2.id}?#{params.to_query}" | |
565 | - json = JSON.parse(last_response.body) | |
566 | - assert_equal 1, json['article']['hits'] | |
567 | - end | |
568 | - | |
569 | - should 'list all events of a community in a given category' do | |
570 | - co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
571 | - c1 = Category.create(environment: Environment.default, name: 'my-category') | |
572 | - c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
573 | - e1 = fast_create(Event, :profile_id => co.id) | |
574 | - e2 = fast_create(Event, :profile_id => co.id) | |
575 | - e1.categories << c1 | |
576 | - e2.categories << c2 | |
577 | - e1.save! | |
578 | - e2.save! | |
579 | - params['content_type']='Event' | |
580 | - get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
581 | - json = JSON.parse(last_response.body) | |
582 | - assert_equal json['articles'].count, 2 | |
583 | - end | |
584 | - | |
585 | - should 'list a event of a community in a given category' do | |
586 | - co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
587 | - c1 = Category.create(environment: Environment.default, name: 'my-category') | |
588 | - c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
589 | - e1 = fast_create(Event, :profile_id => co.id) | |
590 | - e2 = fast_create(Event, :profile_id => co.id) | |
591 | - e1.categories << c1 | |
592 | - e2.categories << c2 | |
593 | - e1.save! | |
594 | - e2.save! | |
595 | - params['category_ids[]']=c1.id | |
596 | - params['content_type']='Event' | |
597 | - get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
598 | - json = JSON.parse(last_response.body) | |
599 | - #should show only one article, since the other not in the same category | |
600 | - assert_equal 1, json['articles'].count | |
601 | - assert_equal e1.id, json['articles'][0]['id'] | |
602 | - end | |
603 | - | |
604 | - should 'not list uncategorized event of a community if a category is given' do | |
605 | - co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
606 | - c1 = Category.create(environment: Environment.default, name: 'my-category') | |
607 | - c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
608 | - e1 = fast_create(Event, :profile_id => co.id) | |
609 | - e2 = fast_create(Event, :profile_id => co.id) | |
610 | - e3 = fast_create(Event, :profile_id => co.id) | |
611 | - e1.categories << c1 | |
612 | - e2.categories << c2 | |
613 | - params['category_ids[]']=c1.id | |
614 | - params['content_type']='Event' | |
615 | - get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
616 | - json = JSON.parse(last_response.body) | |
617 | - assert_equal 1, json['articles'].count | |
618 | - assert_equal e1.id, json['articles'][0]['id'] | |
619 | - end | |
620 | - | |
621 | - should 'list events of a community in a given 2 categories' do | |
622 | - co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
623 | - c1 = Category.create(environment: Environment.default, name: 'my-category') | |
624 | - c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
625 | - e1 = fast_create(Event, :profile_id => co.id) | |
626 | - e2 = fast_create(Event, :profile_id => co.id) | |
627 | - e1.categories << c1 | |
628 | - e2.categories << c2 | |
629 | - e1.save! | |
630 | - e2.save! | |
631 | - params['content_type']='Event' | |
632 | - params['categories_ids'] = [c1.id, c2.id] | |
633 | - get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
634 | - json = JSON.parse(last_response.body) | |
635 | - assert_equal json['articles'].count, 2 | |
636 | - end | |
637 | - | |
638 | - should 'Show 2 events since it uses an IN operator for category instead of an OR' do | |
639 | - co = Community.create(identifier: 'my-community', name: 'name-my-community') | |
640 | - c1 = Category.create(environment: Environment.default, name: 'my-category') | |
641 | - c2 = Category.create(environment: Environment.default, name: 'dont-show-me-this-category') | |
642 | - c3 = Category.create(environment: Environment.default, name: 'extra-category') | |
643 | - e1 = fast_create(Event, :profile_id => co.id) | |
644 | - e2 = fast_create(Event, :profile_id => co.id) | |
645 | - e1.categories << c1 | |
646 | - e2.categories << c2 | |
647 | - e1.save! | |
648 | - e2.save! | |
649 | - params['content_type']='Event' | |
650 | - params['categories_ids'] = [c1.id, c2.id, c3.id] | |
651 | - get "api/v1/communities/#{co.id}/articles?#{params.to_query}" | |
652 | - json = JSON.parse(last_response.body) | |
653 | - assert_equal json['articles'].count, 2 | |
654 | - end | |
655 | - | |
656 | - ARTICLE_ATTRIBUTES = %w(votes_count comments_count) | |
657 | - | |
658 | - ARTICLE_ATTRIBUTES.map do |attribute| | |
659 | - | |
660 | - define_method "test_should_expose_#{attribute}_attribute_in_article_enpoints" do | |
661 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
662 | - get "/api/v1/articles/#{article.id}?#{params.to_query}" | |
663 | - json = JSON.parse(last_response.body) | |
664 | - assert_not_nil json['article'][attribute] | |
665 | - end | |
666 | - end | |
667 | -end |
test/unit/api/boxes_test.rb
... | ... | @@ -1,42 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class BoxesTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @controller = AccountController.new | |
7 | - @request = ActionController::TestRequest.new | |
8 | - login_api | |
9 | -# @request = ActionController::TestRequest.new | |
10 | - end | |
11 | - | |
12 | - kinds= %w[Profile Community Person Enterprise Environment] | |
13 | - kinds.each do |kind| | |
14 | - should "get_boxes_from_#{kind.downcase.pluralize}" do | |
15 | - context_obj = fast_create(kind.constantize) | |
16 | - box = fast_create(Box, :owner_id => context_obj.id, :owner_type => (kind == 'Environment') ? 'Environment' : 'Profile') | |
17 | - get "/api/v1/#{kind.downcase.pluralize}/#{context_obj.id}/boxes?#{params.to_query}" | |
18 | - json = JSON.parse(last_response.body) | |
19 | - assert_equal box.id, json["boxes"].first["id"] | |
20 | - end | |
21 | - end | |
22 | - | |
23 | - should 'get boxes from default environment' do | |
24 | - Environment.delete_all | |
25 | - environment = fast_create(Environment, :is_default => true) | |
26 | - box = fast_create(Box, :owner_id => environment.id, :owner_type => 'Environment') | |
27 | - get "/api/v1/environments/default/boxes?#{params.to_query}" | |
28 | - json = JSON.parse(last_response.body) | |
29 | - assert_equal box.id, json["boxes"].first["id"] | |
30 | - end | |
31 | - | |
32 | - should 'get boxes from context environment' do | |
33 | - env = fast_create(Environment, :is_default => true) | |
34 | - env2 = fast_create(Environment).domains << Domain.new(:name => 'test.host') | |
35 | - box = fast_create(Box, :owner_id => environment.id, :owner_type => 'Environment') | |
36 | - get "/api/v1/environments/context/boxes?#{params.to_query}" | |
37 | - | |
38 | - json = JSON.parse(last_response.body) | |
39 | - assert_equal box.id, json["boxes"].first["id"] | |
40 | - end | |
41 | - | |
42 | -end |
test/unit/api/categories_test.rb
... | ... | @@ -1,97 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class CategoriesTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - login_api | |
7 | - end | |
8 | - | |
9 | - should 'list categories' do | |
10 | - category = fast_create(Category, :environment_id => environment.id) | |
11 | - get "/api/v1/categories/?#{params.to_query}" | |
12 | - json = JSON.parse(last_response.body) | |
13 | - assert_includes json["categories"].map { |c| c["name"] }, category.name | |
14 | - end | |
15 | - | |
16 | - should 'get category by id' do | |
17 | - category = fast_create(Category, :environment_id => environment.id) | |
18 | - get "/api/v1/categories/#{category.id}/?#{params.to_query}" | |
19 | - json = JSON.parse(last_response.body) | |
20 | - assert_equal category.name, json["category"]["name"] | |
21 | - end | |
22 | - | |
23 | - should 'list parent and children when get category by id' do | |
24 | - parent = fast_create(Category, :environment_id => environment.id) | |
25 | - child_1 = fast_create(Category, :environment_id => environment.id) | |
26 | - child_2 = fast_create(Category, :environment_id => environment.id) | |
27 | - | |
28 | - category = fast_create(Category, :environment_id => environment.id) | |
29 | - category.parent = parent | |
30 | - category.children << child_1 | |
31 | - category.children << child_2 | |
32 | - category.save | |
33 | - | |
34 | - get "/api/v1/categories/#{category.id}/?#{params.to_query}" | |
35 | - json = JSON.parse(last_response.body) | |
36 | - assert_equal({'id' => parent.id, 'name' => parent.name, 'slug' => parent.slug}, json['category']['parent']) | |
37 | - assert_equivalent [child_1.id, child_2.id], json['category']['children'].map { |c| c['id'] } | |
38 | - end | |
39 | - | |
40 | - should 'include parent in categories list if params is true' do | |
41 | - parent_1 = fast_create(Category, :environment_id => environment.id) # parent_1 has no parent category | |
42 | - child_1 = fast_create(Category, :environment_id => environment.id) | |
43 | - child_2 = fast_create(Category, :environment_id => environment.id) | |
44 | - | |
45 | - parent_2 = fast_create(Category, :environment_id => environment.id) | |
46 | - parent_2.parent = parent_1 | |
47 | - parent_2.children << child_1 | |
48 | - parent_2.children << child_2 | |
49 | - parent_2.save | |
50 | - | |
51 | - get "/api/v1/categories/?#{params.to_query}" | |
52 | - json = JSON.parse(last_response.body) | |
53 | - assert_equal [nil], json['categories'].map { |c| c['parent'] }.uniq | |
54 | - | |
55 | - params[:include_parent] = true | |
56 | - get "/api/v1/categories/?#{params.to_query}" | |
57 | - json = JSON.parse(last_response.body) | |
58 | - assert_equivalent [parent_1.parent, parent_2.parent.id, child_1.parent.id, child_2.parent.id], | |
59 | - json["categories"].map { |c| c['parent'] && c['parent']['id'] } | |
60 | - end | |
61 | - | |
62 | - should 'include children in categories list if params is true' do | |
63 | - category = fast_create(Category, :environment_id => environment.id) | |
64 | - child_1 = fast_create(Category, :environment_id => environment.id) | |
65 | - child_2 = fast_create(Category, :environment_id => environment.id) | |
66 | - child_3 = fast_create(Category, :environment_id => environment.id) | |
67 | - | |
68 | - category.children << child_1 | |
69 | - category.children << child_2 | |
70 | - category.save | |
71 | - | |
72 | - child_1.children << child_3 | |
73 | - child_1.save | |
74 | - | |
75 | - get "/api/v1/categories/?#{params.to_query}" | |
76 | - json = JSON.parse(last_response.body) | |
77 | - assert_equal [nil], json['categories'].map { |c| c['children'] }.uniq | |
78 | - | |
79 | - params[:include_children] = true | |
80 | - get "/api/v1/categories/?#{params.to_query}" | |
81 | - json = JSON.parse(last_response.body) | |
82 | - assert_equivalent [category.children.map(&:id).sort, child_1.children.map(&:id).sort, child_2.children.map(&:id).sort, child_3.children.map(&:id).sort], | |
83 | - json["categories"].map{ |c| c['children'].map{ |child| child['id'] }.sort } | |
84 | - end | |
85 | - | |
86 | - expose_attributes = %w(id name full_name image display_color) | |
87 | - | |
88 | - expose_attributes.each do |attr| | |
89 | - should "expose category #{attr} attribute by default" do | |
90 | - category = fast_create(Category, :environment_id => environment.id) | |
91 | - get "/api/v1/categories/?#{params.to_query}" | |
92 | - json = JSON.parse(last_response.body) | |
93 | - assert json["categories"].last.has_key?(attr) | |
94 | - end | |
95 | - end | |
96 | - | |
97 | -end |
test/unit/api/comments_test.rb
... | ... | @@ -1,81 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class CommentsTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - login_api | |
7 | - end | |
8 | - | |
9 | - should 'not list comments if user has no permission to view the source article' do | |
10 | - person = fast_create(Person) | |
11 | - article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
12 | - assert !article.published? | |
13 | - | |
14 | - get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
15 | - assert_equal 403, last_response.status | |
16 | - end | |
17 | - | |
18 | - should 'not return comment if user has no permission to view the source article' do | |
19 | - person = fast_create(Person) | |
20 | - article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
21 | - comment = article.comments.create!(:body => "another comment", :author => user.person) | |
22 | - assert !article.published? | |
23 | - | |
24 | - get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}" | |
25 | - assert_equal 403, last_response.status | |
26 | - end | |
27 | - | |
28 | - should 'not comment an article if user has no permission to view it' do | |
29 | - person = fast_create(Person) | |
30 | - article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
31 | - assert !article.published? | |
32 | - | |
33 | - post "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
34 | - assert_equal 403, last_response.status | |
35 | - end | |
36 | - | |
37 | - should 'return comments of an article' do | |
38 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
39 | - article.comments.create!(:body => "some comment", :author => user.person) | |
40 | - article.comments.create!(:body => "another comment", :author => user.person) | |
41 | - | |
42 | - get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
43 | - json = JSON.parse(last_response.body) | |
44 | - assert_equal 200, last_response.status | |
45 | - assert_equal 2, json["comments"].length | |
46 | - end | |
47 | - | |
48 | - should 'return comment of an article' do | |
49 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
50 | - comment = article.comments.create!(:body => "another comment", :author => user.person) | |
51 | - | |
52 | - get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}" | |
53 | - json = JSON.parse(last_response.body) | |
54 | - assert_equal 200, last_response.status | |
55 | - assert_equal comment.id, json['comment']['id'] | |
56 | - end | |
57 | - | |
58 | - should 'comment an article' do | |
59 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
60 | - body = 'My comment' | |
61 | - params.merge!({:body => body}) | |
62 | - | |
63 | - post "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
64 | - json = JSON.parse(last_response.body) | |
65 | - assert_equal 201, last_response.status | |
66 | - assert_equal body, json['comment']['body'] | |
67 | - end | |
68 | - | |
69 | - should 'comment creation define the source' do | |
70 | - amount = Comment.count | |
71 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | |
72 | - body = 'My comment' | |
73 | - params.merge!({:body => body}) | |
74 | - | |
75 | - post "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | |
76 | - assert_equal amount + 1, Comment.count | |
77 | - comment = Comment.last | |
78 | - assert_not_nil comment.source | |
79 | - end | |
80 | - | |
81 | -end |
test/unit/api/communities_test.rb
... | ... | @@ -1,160 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class CommunitiesTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - Community.delete_all | |
7 | - login_api | |
8 | - end | |
9 | - | |
10 | - should 'list only communities' do | |
11 | - community = fast_create(Community, :environment_id => environment.id) | |
12 | - enterprise = fast_create(Enterprise, :environment_id => environment.id) # should not list this enterprise | |
13 | - get "/api/v1/communities?#{params.to_query}" | |
14 | - json = JSON.parse(last_response.body) | |
15 | - assert_not_includes json['communities'].map {|c| c['id']}, enterprise.id | |
16 | - assert_includes json['communities'].map {|c| c['id']}, community.id | |
17 | - end | |
18 | - | |
19 | - should 'list all communities' do | |
20 | - community1 = fast_create(Community, :environment_id => environment.id, :public_profile => true) | |
21 | - community2 = fast_create(Community, :environment_id => environment.id) | |
22 | - get "/api/v1/communities?#{params.to_query}" | |
23 | - json = JSON.parse(last_response.body) | |
24 | - assert_equivalent [community1.id, community2.id], json['communities'].map {|c| c['id']} | |
25 | - end | |
26 | - | |
27 | - should 'not list invisible communities' do | |
28 | - community1 = fast_create(Community, :environment_id => environment.id) | |
29 | - fast_create(Community, :environment_id => environment.id, :visible => false) | |
30 | - | |
31 | - get "/api/v1/communities?#{params.to_query}" | |
32 | - json = JSON.parse(last_response.body) | |
33 | - assert_equal [community1.id], json['communities'].map {|c| c['id']} | |
34 | - end | |
35 | - | |
36 | - should 'not list private communities without permission' do | |
37 | - community1 = fast_create(Community, :environment_id => environment.id) | |
38 | - fast_create(Community, :environment_id => environment.id, :public_profile => false) | |
39 | - | |
40 | - get "/api/v1/communities?#{params.to_query}" | |
41 | - json = JSON.parse(last_response.body) | |
42 | - assert_equal [community1.id], json['communities'].map {|c| c['id']} | |
43 | - end | |
44 | - | |
45 | - should 'list private community for members' do | |
46 | - c1 = fast_create(Community, :environment_id => environment.id) | |
47 | - c2 = fast_create(Community, :environment_id => environment.id, :public_profile => false) | |
48 | - c2.add_member(person) | |
49 | - | |
50 | - get "/api/v1/communities?#{params.to_query}" | |
51 | - json = JSON.parse(last_response.body) | |
52 | - assert_equivalent [c1.id, c2.id], json['communities'].map {|c| c['id']} | |
53 | - end | |
54 | - | |
55 | - should 'create a community' do | |
56 | - params[:community] = {:name => 'some'} | |
57 | - post "/api/v1/communities?#{params.to_query}" | |
58 | - json = JSON.parse(last_response.body) | |
59 | - assert_equal 'some', json['community']['name'] | |
60 | - end | |
61 | - | |
62 | - should 'return 400 status for invalid community creation' do | |
63 | - post "/api/v1/communities?#{params.to_query}" | |
64 | - json = JSON.parse(last_response.body) | |
65 | - assert_equal 400, last_response.status | |
66 | - end | |
67 | - | |
68 | - should 'get community' do | |
69 | - community = fast_create(Community, :environment_id => environment.id) | |
70 | - | |
71 | - get "/api/v1/communities/#{community.id}?#{params.to_query}" | |
72 | - json = JSON.parse(last_response.body) | |
73 | - assert_equal community.id, json['community']['id'] | |
74 | - end | |
75 | - | |
76 | - should 'not get invisible community' do | |
77 | - community = fast_create(Community, :environment_id => environment.id, :visible => false) | |
78 | - | |
79 | - get "/api/v1/communities/#{community.id}?#{params.to_query}" | |
80 | - json = JSON.parse(last_response.body) | |
81 | - assert json['community'].blank? | |
82 | - end | |
83 | - | |
84 | - should 'not get private communities without permission' do | |
85 | - community = fast_create(Community, :environment_id => environment.id) | |
86 | - fast_create(Community, :environment_id => environment.id, :public_profile => false) | |
87 | - | |
88 | - get "/api/v1/communities/#{community.id}?#{params.to_query}" | |
89 | - json = JSON.parse(last_response.body) | |
90 | - assert_equal community.id, json['community']['id'] | |
91 | - end | |
92 | - | |
93 | - should 'get private community for members' do | |
94 | - community = fast_create(Community, :environment_id => environment.id, :public_profile => false, :visible => true) | |
95 | - community.add_member(person) | |
96 | - | |
97 | - | |
98 | - get "/api/v1/communities/#{community.id}?#{params.to_query}" | |
99 | - json = JSON.parse(last_response.body) | |
100 | - assert_equal community.id, json['community']['id'] | |
101 | - end | |
102 | - | |
103 | - should 'list person communities' do | |
104 | - community = fast_create(Community, :environment_id => environment.id) | |
105 | - fast_create(Community, :environment_id => environment.id) | |
106 | - community.add_member(person) | |
107 | - | |
108 | - get "/api/v1/people/#{person.id}/communities?#{params.to_query}" | |
109 | - json = JSON.parse(last_response.body) | |
110 | - assert_equivalent [community.id], json['communities'].map {|c| c['id']} | |
111 | - end | |
112 | - | |
113 | - should 'not list person communities invisible' do | |
114 | - c1 = fast_create(Community, :environment_id => environment.id) | |
115 | - c2 = fast_create(Community, :environment_id => environment.id, :visible => false) | |
116 | - c1.add_member(person) | |
117 | - c2.add_member(person) | |
118 | - | |
119 | - get "/api/v1/people/#{person.id}/communities?#{params.to_query}" | |
120 | - json = JSON.parse(last_response.body) | |
121 | - assert_equivalent [c1.id], json['communities'].map {|c| c['id']} | |
122 | - end | |
123 | - | |
124 | - should 'list communities with pagination' do | |
125 | - community1 = fast_create(Community, :public_profile => true, :created_at => 1.day.ago) | |
126 | - community2 = fast_create(Community, :created_at => 2.days.ago) | |
127 | - | |
128 | - params[:page] = 2 | |
129 | - params[:per_page] = 1 | |
130 | - get "/api/v1/communities?#{params.to_query}" | |
131 | - json_page_two = JSON.parse(last_response.body) | |
132 | - | |
133 | - params[:page] = 1 | |
134 | - params[:per_page] = 1 | |
135 | - get "/api/v1/communities?#{params.to_query}" | |
136 | - json_page_one = JSON.parse(last_response.body) | |
137 | - | |
138 | - | |
139 | - assert_includes json_page_one["communities"].map { |a| a["id"] }, community1.id | |
140 | - assert_not_includes json_page_one["communities"].map { |a| a["id"] }, community2.id | |
141 | - | |
142 | - assert_includes json_page_two["communities"].map { |a| a["id"] }, community2.id | |
143 | - assert_not_includes json_page_two["communities"].map { |a| a["id"] }, community1.id | |
144 | - end | |
145 | - | |
146 | - should 'list communities with timestamp' do | |
147 | - community1 = fast_create(Community, :public_profile => true) | |
148 | - community2 = fast_create(Community) | |
149 | - | |
150 | - community1.updated_at = Time.now + 3.hours | |
151 | - community1.save! | |
152 | - | |
153 | - params[:timestamp] = Time.now + 1.hours | |
154 | - get "/api/v1/communities/?#{params.to_query}" | |
155 | - json = JSON.parse(last_response.body) | |
156 | - | |
157 | - assert_includes json["communities"].map { |a| a["id"] }, community1.id | |
158 | - assert_not_includes json["communities"].map { |a| a["id"] }, community2.id | |
159 | - end | |
160 | -end |
test/unit/api/enterprises_test.rb
... | ... | @@ -1,110 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class EnterprisesTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - Enterprise.delete_all | |
7 | - login_api | |
8 | - end | |
9 | - | |
10 | - should 'list only enterprises' do | |
11 | - community = fast_create(Community, :environment_id => environment.id) # should not list this community | |
12 | - enterprise = fast_create(Enterprise, :environment_id => environment.id, :public_profile => true) | |
13 | - get "/api/v1/enterprises?#{params.to_query}" | |
14 | - json = JSON.parse(last_response.body) | |
15 | - assert_includes json['enterprises'].map {|c| c['id']}, enterprise.id | |
16 | - assert_not_includes json['enterprises'].map {|c| c['id']}, community.id | |
17 | - end | |
18 | - | |
19 | - should 'list all enterprises' do | |
20 | - enterprise1 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => true) | |
21 | - enterprise2 = fast_create(Enterprise, :environment_id => environment.id) | |
22 | - get "/api/v1/enterprises?#{params.to_query}" | |
23 | - json = JSON.parse(last_response.body) | |
24 | - assert_equivalent [enterprise1.id, enterprise2.id], json['enterprises'].map {|c| c['id']} | |
25 | - end | |
26 | - | |
27 | - should 'not list invisible enterprises' do | |
28 | - enterprise1 = fast_create(Enterprise, :environment_id => environment.id) | |
29 | - fast_create(Enterprise, :visible => false) | |
30 | - | |
31 | - get "/api/v1/enterprises?#{params.to_query}" | |
32 | - json = JSON.parse(last_response.body) | |
33 | - assert_equal [enterprise1.id], json['enterprises'].map {|c| c['id']} | |
34 | - end | |
35 | - | |
36 | - should 'not list private enterprises without permission' do | |
37 | - enterprise1 = fast_create(Enterprise, :environment_id => environment.id) | |
38 | - fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | |
39 | - | |
40 | - get "/api/v1/enterprises?#{params.to_query}" | |
41 | - json = JSON.parse(last_response.body) | |
42 | - assert_equal [enterprise1.id], json['enterprises'].map {|c| c['id']} | |
43 | - end | |
44 | - | |
45 | - should 'list private enterprise for members' do | |
46 | - c1 = fast_create(Enterprise, :environment_id => environment.id) | |
47 | - c2 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | |
48 | - c2.add_member(person) | |
49 | - | |
50 | - get "/api/v1/enterprises?#{params.to_query}" | |
51 | - json = JSON.parse(last_response.body) | |
52 | - assert_equivalent [c1.id, c2.id], json['enterprises'].map {|c| c['id']} | |
53 | - end | |
54 | - | |
55 | - should 'get enterprise' do | |
56 | - enterprise = fast_create(Enterprise, :environment_id => environment.id) | |
57 | - | |
58 | - get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | |
59 | - json = JSON.parse(last_response.body) | |
60 | - assert_equal enterprise.id, json['enterprise']['id'] | |
61 | - end | |
62 | - | |
63 | - should 'not get invisible enterprise' do | |
64 | - enterprise = fast_create(Enterprise, :visible => false) | |
65 | - | |
66 | - get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | |
67 | - json = JSON.parse(last_response.body) | |
68 | - assert json['enterprise'].blank? | |
69 | - end | |
70 | - | |
71 | - should 'not get private enterprises without permission' do | |
72 | - enterprise = fast_create(Enterprise, :environment_id => environment.id) | |
73 | - fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | |
74 | - | |
75 | - get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | |
76 | - json = JSON.parse(last_response.body) | |
77 | - assert_equal enterprise.id, json['enterprise']['id'] | |
78 | - end | |
79 | - | |
80 | - should 'get private enterprise for members' do | |
81 | - enterprise = fast_create(Enterprise, :public_profile => false) | |
82 | - enterprise.add_member(person) | |
83 | - | |
84 | - get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | |
85 | - json = JSON.parse(last_response.body) | |
86 | - assert_equal enterprise.id, json['enterprise']['id'] | |
87 | - end | |
88 | - | |
89 | - should 'list person enterprises' do | |
90 | - enterprise = fast_create(Enterprise, :environment_id => environment.id) | |
91 | - fast_create(Enterprise, :environment_id => environment.id) | |
92 | - enterprise.add_member(person) | |
93 | - | |
94 | - get "/api/v1/people/#{person.id}/enterprises?#{params.to_query}" | |
95 | - json = JSON.parse(last_response.body) | |
96 | - assert_equivalent [enterprise.id], json['enterprises'].map {|c| c['id']} | |
97 | - end | |
98 | - | |
99 | - should 'not list person enterprises invisible' do | |
100 | - c1 = fast_create(Enterprise, :environment_id => environment.id) | |
101 | - c2 = fast_create(Enterprise, :environment_id => environment.id, :visible => false) | |
102 | - c1.add_member(person) | |
103 | - c2.add_member(person) | |
104 | - | |
105 | - get "/api/v1/people/#{person.id}/enterprises?#{params.to_query}" | |
106 | - json = JSON.parse(last_response.body) | |
107 | - assert_equivalent [c1.id], json['enterprises'].map {|c| c['id']} | |
108 | - end | |
109 | - | |
110 | -end |
test/unit/api/environment_test.rb
... | ... | @@ -1,38 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class EnvironmentTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @person = create_user('testing').person | |
7 | - end | |
8 | - attr_reader :person | |
9 | - | |
10 | - should 'return the default environment' do | |
11 | - environment = Environment.default | |
12 | - get "/api/v1/environment/default" | |
13 | - json = JSON.parse(last_response.body) | |
14 | - assert_equal environment.id, json['id'] | |
15 | - end | |
16 | - | |
17 | - should 'return created environment' do | |
18 | - environment = fast_create(Environment) | |
19 | - default_env = Environment.default | |
20 | - assert_not_equal environment.id, default_env.id | |
21 | - get "/api/v1/environment/#{environment.id}" | |
22 | - json = JSON.parse(last_response.body) | |
23 | - assert_equal environment.id, json['id'] | |
24 | - end | |
25 | - | |
26 | - should 'return context environment' do | |
27 | - context_env = fast_create(Environment) | |
28 | - context_env.name = "example org" | |
29 | - context_env.save | |
30 | - context_env.domains<< Domain.new(:name => 'example.org') | |
31 | - default_env = Environment.default | |
32 | - assert_not_equal context_env.id, default_env.id | |
33 | - get "/api/v1/environment/context" | |
34 | - json = JSON.parse(last_response.body) | |
35 | - assert_equal context_env.id, json['id'] | |
36 | - end | |
37 | - | |
38 | -end |
test/unit/api/helpers_test.rb
... | ... | @@ -1,245 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | -require 'noosfero/api/helpers' | |
3 | - | |
4 | -class APIHelpersTest < ActiveSupport::TestCase | |
5 | - | |
6 | - include Noosfero::API::APIHelpers | |
7 | - | |
8 | - def setup | |
9 | - @headers = {} | |
10 | - end | |
11 | - | |
12 | - attr_accessor :headers | |
13 | - | |
14 | - should 'get the current user with valid token' do | |
15 | - user = create_user('someuser') | |
16 | - user.generate_private_token! | |
17 | - self.params = {:private_token => user.private_token} | |
18 | - assert_equal user, current_user | |
19 | - end | |
20 | - | |
21 | - should 'get the current user with valid token in header' do | |
22 | - user = create_user('someuser') | |
23 | - user.generate_private_token! | |
24 | - headers['Private-Token'] = user.private_token | |
25 | - assert_equal user, current_user | |
26 | - end | |
27 | - | |
28 | - should 'get the current user even with expired token' do | |
29 | - user = create_user('someuser') | |
30 | - user.generate_private_token! | |
31 | - user.private_token_generated_at = DateTime.now.prev_year | |
32 | - user.save | |
33 | - self.params = {:private_token => user.private_token} | |
34 | - assert_equal user, current_user | |
35 | - end | |
36 | - | |
37 | - should 'get the person of current user' do | |
38 | - user = create_user('someuser') | |
39 | - user.generate_private_token! | |
40 | - self.params = {:private_token => user.private_token} | |
41 | - assert_equal user.person, current_person | |
42 | - end | |
43 | - | |
44 | -# #FIXME see how to make this test. Get the current_user variable | |
45 | -# should 'set current_user to nil after logout' do | |
46 | -# user = create_user('someuser') | |
47 | -# user.stubs(:private_token_expired?).returns(false) | |
48 | -# User.stubs(:find_by_private_token).returns(user) | |
49 | -# assert_not_nil current_user | |
50 | -# assert false | |
51 | -# logout | |
52 | -# end | |
53 | - | |
54 | - should 'limit be defined as the params limit value' do | |
55 | - local_limit = 30 | |
56 | - self.params= {:limit => local_limit} | |
57 | - assert_equal local_limit, limit | |
58 | - end | |
59 | - | |
60 | - should 'return default limit if the limit parameter is minor than zero' do | |
61 | - self.params= {:limit => -1} | |
62 | - assert_equal 20, limit | |
63 | - end | |
64 | - | |
65 | - should 'the default limit be 20' do | |
66 | - assert_equal 20, limit | |
67 | - end | |
68 | - | |
69 | - should 'the beginning of the period be the first existent date if no from date is passsed as parameter' do | |
70 | - assert_equal Time.at(0).to_datetime, period(nil, nil).to_a[0] | |
71 | - end | |
72 | - | |
73 | - should 'the beginning of the period be from date passsed as parameter' do | |
74 | - from = DateTime.now | |
75 | - assert_equal from, period(from, nil).min | |
76 | - end | |
77 | - | |
78 | - should 'the end of the period be now if no until date is passsed as parameter' do | |
79 | - assert_in_delta DateTime.now, period(nil, nil).max | |
80 | - end | |
81 | - | |
82 | - should 'the end of the period be until date passsed as parameter' do | |
83 | - until_date = DateTime.now | |
84 | - assert_equal until_date, period(nil, until_date).max | |
85 | - end | |
86 | - | |
87 | - should 'parse_content_type return nil if its blank' do | |
88 | - assert_nil parse_content_type("") | |
89 | - end | |
90 | - | |
91 | - should 'parse_content_type be an array' do | |
92 | - assert_kind_of Array, parse_content_type("text_article") | |
93 | - end | |
94 | - | |
95 | - should 'parse_content_type return all content types as an array' do | |
96 | - assert_equivalent ['TextArticle','TinyMceArticle'], parse_content_type("TextArticle,TinyMceArticle") | |
97 | - end | |
98 | - | |
99 | - should 'find_article return article by id in list passed for user with permission' do | |
100 | - user = create_user('someuser') | |
101 | - a = fast_create(Article, :profile_id => user.person.id) | |
102 | - fast_create(Article, :profile_id => user.person.id) | |
103 | - fast_create(Article, :profile_id => user.person.id) | |
104 | - | |
105 | - user.generate_private_token! | |
106 | - User.expects(:find_by_private_token).returns(user) | |
107 | - assert_equal a, find_article(user.person.articles, a.id) | |
108 | - end | |
109 | - | |
110 | - should 'find_article return forbidden when a user try to access an article without permission' do | |
111 | - user = create_user('someuser') | |
112 | - p = fast_create(Profile) | |
113 | - a = fast_create(Article, :published => false, :profile_id => p.id) | |
114 | - fast_create(Article, :profile_id => p.id) | |
115 | - | |
116 | - user.generate_private_token! | |
117 | - User.expects(:find_by_private_token).returns(user) | |
118 | - assert_equal 403, find_article(p.articles, a.id).last | |
119 | - end | |
120 | - | |
121 | - should 'make_conditions_with_parameter return no created at parameter if it was not defined from or until parameters' do | |
122 | - assert_nil make_conditions_with_parameter[:created_at] | |
123 | - end | |
124 | - | |
125 | - should 'make_conditions_with_parameter return created_at parameter if from period is defined' do | |
126 | - assert_not_nil make_conditions_with_parameter(:from => '2010-10-10')[:created_at] | |
127 | - end | |
128 | - | |
129 | - should 'make_conditions_with_parameter return created_at parameter if from period is defined as string' do | |
130 | - assert_not_nil make_conditions_with_parameter('from' => '2010-10-10')[:created_at] | |
131 | - end | |
132 | - | |
133 | - should 'make_conditions_with_parameter return created_at parameter if until period is defined' do | |
134 | - assert_not_nil make_conditions_with_parameter(:until => '2010-10-10')[:created_at] | |
135 | - end | |
136 | - | |
137 | - should 'make_conditions_with_parameter return created_at parameter if until period is defined as string' do | |
138 | - assert_not_nil make_conditions_with_parameter('until' => '2010-10-10')[:created_at] | |
139 | - end | |
140 | - | |
141 | - should 'make_conditions_with_parameter return created_at as the first existent date as parameter if only until is defined' do | |
142 | - assert_equal Time.at(0).to_datetime, make_conditions_with_parameter(:until => '2010-10-10')[:created_at].min | |
143 | - end | |
144 | - | |
145 | - should 'make_conditions_with_parameter: the minimal created_at date be the from date passed as parameter' do | |
146 | - date = '2010-10-10' | |
147 | - assert_equal DateTime.parse(date), make_conditions_with_parameter(:from => date)[:created_at].min | |
148 | - end | |
149 | - | |
150 | - should 'make_conditions_with_parameter: the maximum created_at date be the until date passed as parameter' do | |
151 | - date = '2010-10-10' | |
152 | - assert_equal DateTime.parse(date), make_conditions_with_parameter(:until => date)[:created_at].max | |
153 | - end | |
154 | - | |
155 | - should 'make_conditions_with_parameter return the until date passed as parameter' do | |
156 | - date = '2010-10-10' | |
157 | - assert_equal DateTime.parse(date), make_conditions_with_parameter(:from => '2010-10-10')[:created_at].min | |
158 | - end | |
159 | - | |
160 | - should 'make_conditions_with_parameter return no type parameter if it was not defined any content type' do | |
161 | - assert_nil make_conditions_with_parameter[:type] | |
162 | - end | |
163 | - | |
164 | - #test_should_make_order_with_parameters_return_order_if attribute_is_found_at_object_association | |
165 | - should 'make_order_with_parameters return order if attribute is found at object association' do | |
166 | - environment = Environment.new | |
167 | - params = {:order => "name ASC"} | |
168 | - assert_equal "name ASC", make_order_with_parameters(environment, "articles", params) | |
169 | - end | |
170 | - | |
171 | - # test added to check for eventual sql injection vunerabillity | |
172 | - #test_should_make_order_with_parameters_return_default_order_if_attributes_not_exists | |
173 | - should 'make_order_with_parameters return default order if attributes not exists' do | |
174 | - environment = Environment.new | |
175 | - params = {:order => "CRAZY_FIELD ASC"} # quote used to check sql injection vunerabillity | |
176 | - assert_equal "created_at DESC", make_order_with_parameters(environment, "articles", params) | |
177 | - end | |
178 | - | |
179 | - should 'make_order_with_parameters return default order if sql injection detected' do | |
180 | - environment = Environment.new | |
181 | - params = {:order => "name' ASC"} # quote used to check sql injection vunerabillity | |
182 | - assert_equal "created_at DESC", make_order_with_parameters(environment, "articles", params) | |
183 | - end | |
184 | - | |
185 | - should 'make_order_with_parameters return RANDOM() if random is passed' do | |
186 | - environment = Environment.new | |
187 | - params = {:order => "random"} # quote used to check sql injection vunerabillity | |
188 | - assert_equal "RANDOM()", make_order_with_parameters(environment, "articles", params) | |
189 | - end | |
190 | - | |
191 | - should 'make_order_with_parameters return RANDOM() if random function is passed' do | |
192 | - environment = Environment.new | |
193 | - params = {:order => "random()"} # quote used to check sql injection vunerabillity | |
194 | - assert_equal "RANDOM()", make_order_with_parameters(environment, "articles", params) | |
195 | - end | |
196 | - | |
197 | - should 'render not_found if endpoint is unavailable' do | |
198 | - Noosfero::API::API.stubs(:endpoint_unavailable?).returns(true) | |
199 | - self.expects(:not_found!) | |
200 | - | |
201 | - filter_disabled_plugins_endpoints | |
202 | - end | |
203 | - | |
204 | - should 'not touch in options when no fields parameter is passed' do | |
205 | - model = mock | |
206 | - expects(:present).with(model, {}) | |
207 | - present_partial(model, {}) | |
208 | - end | |
209 | - | |
210 | - should 'fallback to array when fields parameter is not a json when calling present partial' do | |
211 | - model = mock | |
212 | - params[:fields] = ['name'] | |
213 | - expects(:present).with(model, {:only => ['name']}) | |
214 | - present_partial(model, {}) | |
215 | - end | |
216 | - | |
217 | - should 'fallback to comma separated string when fields parameter is not an array when calling present partial' do | |
218 | - model = mock | |
219 | - params[:fields] = 'name,description' | |
220 | - expects(:present).with(model, {:only => ['name', 'description']}) | |
221 | - present_partial(model, {}) | |
222 | - end | |
223 | - | |
224 | - should 'accept json as fields parameter when calling present partial' do | |
225 | - model = mock | |
226 | - params[:fields] = {only: [:name, {user: [:login]}]}.to_json | |
227 | - expects(:present).with(model, {:only => ['name', {'user' => ['login']}]}) | |
228 | - present_partial(model, {}) | |
229 | - end | |
230 | - | |
231 | - protected | |
232 | - | |
233 | - def error!(info, status) | |
234 | - [info, status] | |
235 | - end | |
236 | - | |
237 | - def params | |
238 | - @params ||= {} | |
239 | - end | |
240 | - | |
241 | - def params= value | |
242 | - @params = value | |
243 | - end | |
244 | - | |
245 | -end |
test/unit/api/people_test.rb
... | ... | @@ -1,258 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class PeopleTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - Person.delete_all | |
7 | - login_api | |
8 | - end | |
9 | - | |
10 | - should 'list all people' do | |
11 | - person1 = fast_create(Person, :public_profile => true) | |
12 | - person2 = fast_create(Person) | |
13 | - get "/api/v1/people?#{params.to_query}" | |
14 | - json = JSON.parse(last_response.body) | |
15 | - assert_equivalent [person1.id, person2.id, person.id], json['people'].map {|c| c['id']} | |
16 | - end | |
17 | - | |
18 | - should 'list all members of a community' do | |
19 | - person1 = fast_create(Person) | |
20 | - person2 = fast_create(Person) | |
21 | - community = fast_create(Community) | |
22 | - community.add_member(person1) | |
23 | - community.add_member(person2) | |
24 | - | |
25 | - get "/api/v1/profiles/#{community.id}/members?#{params.to_query}" | |
26 | - json = JSON.parse(last_response.body) | |
27 | - assert_equal 2, json["people"].count | |
28 | - assert_equivalent [person1.id,person2.id], json["people"].map{|p| p["id"]} | |
29 | - end | |
30 | - | |
31 | - should 'not list invisible people' do | |
32 | - invisible_person = fast_create(Person, :visible => false) | |
33 | - | |
34 | - get "/api/v1/people?#{params.to_query}" | |
35 | - assert_not_includes json_response_ids(:people), invisible_person.id | |
36 | - end | |
37 | - | |
38 | - should 'not list private people without permission' do | |
39 | - private_person = fast_create(Person, :public_profile => false) | |
40 | - | |
41 | - get "/api/v1/people?#{params.to_query}" | |
42 | - assert_not_includes json_response_ids(:people), private_person.id | |
43 | - end | |
44 | - | |
45 | - should 'list private person for friends' do | |
46 | - p1 = fast_create(Person) | |
47 | - p2 = fast_create(Person, :public_profile => false) | |
48 | - person.add_friend(p2) | |
49 | - p2.add_friend(person) | |
50 | - | |
51 | - get "/api/v1/people?#{params.to_query}" | |
52 | - assert_includes json_response_ids(:people), p2.id | |
53 | - end | |
54 | - | |
55 | - should 'get person' do | |
56 | - some_person = fast_create(Person) | |
57 | - | |
58 | - get "/api/v1/people/#{some_person.id}?#{params.to_query}" | |
59 | - json = JSON.parse(last_response.body) | |
60 | - assert_equal some_person.id, json['person']['id'] | |
61 | - end | |
62 | - | |
63 | - should 'people endpoint filter by fields parameter' do | |
64 | - get "/api/v1/people?#{params.to_query}&fields=name" | |
65 | - json = JSON.parse(last_response.body) | |
66 | - expected = {'people' => [{'name' => person.name}]} | |
67 | - assert_equal expected, json | |
68 | - end | |
69 | - | |
70 | - should 'people endpoint filter by fields parameter with hierarchy' do | |
71 | - fields = URI.encode({only: [:name, {user: [:login]}]}.to_json) | |
72 | - get "/api/v1/people?#{params.to_query}&fields=#{fields}" | |
73 | - json = JSON.parse(last_response.body) | |
74 | - expected = {'people' => [{'name' => person.name, 'user' => {'login' => 'testapi'}}]} | |
75 | - assert_equal expected, json | |
76 | - end | |
77 | - | |
78 | - should 'get logged person' do | |
79 | - get "/api/v1/people/me?#{params.to_query}" | |
80 | - json = JSON.parse(last_response.body) | |
81 | - assert_equal person.id, json['person']['id'] | |
82 | - end | |
83 | - | |
84 | - should 'me endpoint filter by fields parameter' do | |
85 | - get "/api/v1/people/me?#{params.to_query}&fields=name" | |
86 | - json = JSON.parse(last_response.body) | |
87 | - expected = {'person' => {'name' => person.name}} | |
88 | - assert_equal expected, json | |
89 | - end | |
90 | - | |
91 | - should 'not get invisible person' do | |
92 | - person = fast_create(Person, :visible => false) | |
93 | - | |
94 | - get "/api/v1/people/#{person.id}?#{params.to_query}" | |
95 | - json = JSON.parse(last_response.body) | |
96 | - assert json['person'].blank? | |
97 | - end | |
98 | - | |
99 | - should 'not get private people without permission' do | |
100 | - private_person = fast_create(Person, :public_profile => false) | |
101 | - | |
102 | - get "/api/v1/people/#{private_person.id}?#{params.to_query}" | |
103 | - json = JSON.parse(last_response.body) | |
104 | - assert json['person'].blank? | |
105 | - end | |
106 | - | |
107 | - should 'get private person for friends' do | |
108 | - private_person = fast_create(Person, :public_profile => false) | |
109 | - person.add_friend(private_person) | |
110 | - private_person.add_friend(person) | |
111 | - | |
112 | - get "/api/v1/people/#{private_person.id}?#{params.to_query}" | |
113 | - json = JSON.parse(last_response.body) | |
114 | - assert_equal private_person.id, json['person']['id'] | |
115 | - end | |
116 | - | |
117 | - should 'list person friends' do | |
118 | - friend = fast_create(Person) | |
119 | - person.add_friend(friend) | |
120 | - friend.add_friend(person) | |
121 | - | |
122 | - get "/api/v1/people/#{friend.id}/friends?#{params.to_query}" | |
123 | - assert_includes json_response_ids(:people), person.id | |
124 | - end | |
125 | - | |
126 | - should 'not list person invisible friends' do | |
127 | - friend = fast_create(Person) | |
128 | - invisible_friend = fast_create(Person, :visible => false) | |
129 | - person.add_friend(friend) | |
130 | - person.add_friend(invisible_friend) | |
131 | - friend.add_friend(person) | |
132 | - invisible_friend.add_friend(person) | |
133 | - | |
134 | - get "/api/v1/people/#{person.id}/friends?#{params.to_query}" | |
135 | - friends = json_response_ids(:people) | |
136 | - assert_includes friends, friend.id | |
137 | - assert_not_includes friends, invisible_friend.id | |
138 | - end | |
139 | - | |
140 | - should 'create a person' do | |
141 | - login = 'some' | |
142 | - params[:person] = {:login => login, :password => '123456', :password_confirmation => '123456', :email => 'some@some.com'} | |
143 | - post "/api/v1/people?#{params.to_query}" | |
144 | - json = JSON.parse(last_response.body) | |
145 | - assert_equal login, json['person']['identifier'] | |
146 | - end | |
147 | - | |
148 | - should 'return 400 status for invalid person creation' do | |
149 | - params[:person] = {:login => 'some'} | |
150 | - post "/api/v1/people?#{params.to_query}" | |
151 | - json = JSON.parse(last_response.body) | |
152 | - assert_equal 400, last_response.status | |
153 | - end | |
154 | - | |
155 | - should 'display permissions' do | |
156 | - community = fast_create(Community) | |
157 | - community.add_member(fast_create(Person)) | |
158 | - community.add_member(person) | |
159 | - permissions = Profile::Roles.member(person.environment.id).permissions | |
160 | - get "/api/v1/people/#{person.id}/permissions?#{params.to_query}" | |
161 | - json = JSON.parse(last_response.body) | |
162 | - | |
163 | - assert_equal json[community.identifier], permissions | |
164 | - end | |
165 | - | |
166 | - should 'display permissions if self' do | |
167 | - get "/api/v1/people/#{person.id}/permissions?#{params.to_query}" | |
168 | - assert_equal 200, last_response.status | |
169 | - end | |
170 | - | |
171 | - should 'display permissions if admin' do | |
172 | - environment = person.environment | |
173 | - environment.add_admin(person) | |
174 | - some_person = fast_create(Person) | |
175 | - | |
176 | - get "/api/v1/people/#{some_person.id}/permissions?#{params.to_query}" | |
177 | - assert_equal 200, last_response.status | |
178 | - end | |
179 | - | |
180 | - should 'not display permissions if not admin or self' do | |
181 | - some_person = create_user('some-person').person | |
182 | - | |
183 | - get "/api/v1/people/#{some_person.id}/permissions?#{params.to_query}" | |
184 | - assert_equal 403, last_response.status | |
185 | - end | |
186 | - | |
187 | - should 'not update another person' do | |
188 | - person = fast_create(Person, :environment_id => environment.id) | |
189 | - post "/api/v1/people/#{person.id}?#{params.to_query}" | |
190 | - assert_equal 403, last_response.status | |
191 | - end | |
192 | - | |
193 | - should 'update yourself' do | |
194 | - another_name = 'Another Name' | |
195 | - params[:person] = {} | |
196 | - params[:person][:name] = another_name | |
197 | - assert_not_equal another_name, person.name | |
198 | - post "/api/v1/people/#{person.id}?#{params.to_query}" | |
199 | - person.reload | |
200 | - assert_equal another_name, person.name | |
201 | - end | |
202 | - | |
203 | - should 'display public custom fields' do | |
204 | - CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | |
205 | - some_person = create_user('some-person').person | |
206 | - some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "true"} } | |
207 | - some_person.save! | |
208 | - | |
209 | - get "/api/v1/people/#{some_person.id}?#{params.to_query}" | |
210 | - json = JSON.parse(last_response.body) | |
211 | - assert json['person']['additional_data'].has_key?('Custom Blog') | |
212 | - assert_equal "www.blog.org", json['person']['additional_data']['Custom Blog'] | |
213 | - end | |
214 | - | |
215 | - should 'not display non-public custom fields' do | |
216 | - CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | |
217 | - some_person = create_user('some-person').person | |
218 | - some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "0"} } | |
219 | - some_person.save! | |
220 | - | |
221 | - get "/api/v1/people/#{some_person.id}?#{params.to_query}" | |
222 | - json = JSON.parse(last_response.body) | |
223 | - assert_equal json['person']['additional_data'], {} | |
224 | - end | |
225 | - | |
226 | - should 'display non-public custom fields to friend' do | |
227 | - CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | |
228 | - some_person = create_user('some-person').person | |
229 | - some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "0"} } | |
230 | - some_person.save! | |
231 | - | |
232 | - f = Friendship.new | |
233 | - f.friend = some_person | |
234 | - f.person = person | |
235 | - f.save! | |
236 | - | |
237 | - get "/api/v1/people/#{some_person.id}?#{params.to_query}" | |
238 | - json = JSON.parse(last_response.body) | |
239 | - assert json['person']['additional_data'].has_key?("Custom Blog") | |
240 | - assert_equal "www.blog.org", json['person']['additional_data']['Custom Blog'] | |
241 | - end | |
242 | - | |
243 | - PERSON_ATTRIBUTES = %w(vote_count comments_count articles_count) | |
244 | - | |
245 | - PERSON_ATTRIBUTES.map do |attribute| | |
246 | - define_method "test_should_not_expose_#{attribute}_attribute_in_person_enpoint_if_field_parameter_does_not_contain_the_attribute" do | |
247 | - get "/api/v1/people/me?#{params.to_query}&fields=name" | |
248 | - json = JSON.parse(last_response.body) | |
249 | - assert_nil json['person'][attribute] | |
250 | - end | |
251 | - | |
252 | - define_method "test_should_expose_#{attribute}_attribute_in_person_enpoints_if_field_parameter_is_passed" do | |
253 | - get "/api/v1/people/me?#{params.to_query}&fields=#{attribute}" | |
254 | - json = JSON.parse(last_response.body) | |
255 | - assert_not_nil json['person'][attribute] | |
256 | - end | |
257 | - end | |
258 | -end |
test/unit/api/profiles_test.rb
... | ... | @@ -1,32 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class ProfilesTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - Profile.delete_all | |
7 | - login_api | |
8 | - end | |
9 | - | |
10 | - should 'list all profiles' do | |
11 | - person1 = fast_create(Person) | |
12 | - person2 = fast_create(Person) | |
13 | - community = fast_create(Community) | |
14 | - get "/api/v1/profiles?#{params.to_query}" | |
15 | - json = JSON.parse(last_response.body) | |
16 | - assert_equivalent [person.id, person1.id, person2.id, community.id], json.map {|p| p['id']} | |
17 | - end | |
18 | - | |
19 | - should 'get person from profile id' do | |
20 | - some_person = fast_create(Person) | |
21 | - get "/api/v1/profiles/#{some_person.id}?#{params.to_query}" | |
22 | - json = JSON.parse(last_response.body) | |
23 | - assert_equal some_person.id, json['id'] | |
24 | - end | |
25 | - | |
26 | - should 'get community from profile id' do | |
27 | - community = fast_create(Community) | |
28 | - get "/api/v1/profiles/#{community.id}?#{params.to_query}" | |
29 | - json = JSON.parse(last_response.body) | |
30 | - assert_equal community.id, json['id'] | |
31 | - end | |
32 | -end |
test/unit/api/search_test.rb
... | ... | @@ -1,150 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class SearchTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - @person = create_user('testing').person | |
7 | - end | |
8 | - attr_reader :person | |
9 | - | |
10 | - should 'not list unpublished articles' do | |
11 | - Article.delete_all | |
12 | - article = fast_create(Article, :profile_id => person.id, :published => false) | |
13 | - assert !article.published? | |
14 | - get "/api/v1/search/article" | |
15 | - json = JSON.parse(last_response.body) | |
16 | - assert_empty json['articles'] | |
17 | - end | |
18 | - | |
19 | - should 'list articles' do | |
20 | - fast_create(Article, :profile_id => person.id) | |
21 | - get "/api/v1/search/article" | |
22 | - json = JSON.parse(last_response.body) | |
23 | - assert_not_empty json['articles'] | |
24 | - end | |
25 | - | |
26 | - should 'list only articles that has children' do | |
27 | - article = fast_create(Article, :profile_id => person.id) | |
28 | - parent = create(Article, :profile_id => person.id, :name => 'parent article') | |
29 | - child = create(Article, :profile_id => person.id, :parent_id => parent.id, :name => 'child article') | |
30 | - | |
31 | - get "/api/v1/search/article?has_children=true" | |
32 | - json = JSON.parse(last_response.body) | |
33 | - assert_equal parent.id, json['articles'].first['id'] | |
34 | - end | |
35 | - | |
36 | - should 'invalid search string articles' do | |
37 | - fast_create(Article, :profile_id => person.id, :name => 'some article') | |
38 | - get "/api/v1/search/article?query=test" | |
39 | - json = JSON.parse(last_response.body) | |
40 | - assert_empty json['articles'] | |
41 | - end | |
42 | - | |
43 | - should 'not list articles of wrong type' do | |
44 | - Article.delete_all | |
45 | - fast_create(Article, :profile_id => person.id) | |
46 | - get "/api/v1/search/article?type=TinyMceArticle" | |
47 | - json = JSON.parse(last_response.body) | |
48 | - assert_empty json['articles'] | |
49 | - end | |
50 | - | |
51 | - should 'list articles of one type' do | |
52 | - fast_create(Article, :profile_id => person.id) | |
53 | - article = fast_create(TinyMceArticle, :profile_id => person.id) | |
54 | - | |
55 | - get "/api/v1/search/article?type=TinyMceArticle" | |
56 | - json = JSON.parse(last_response.body) | |
57 | - assert_equal article.id, json['articles'].first['id'] | |
58 | - end | |
59 | - | |
60 | - should 'list articles of one type and query string' do | |
61 | - fast_create(Article, :profile_id => person.id, :name => 'some article') | |
62 | - fast_create(Article, :profile_id => person.id, :name => 'Some thing') | |
63 | - article = fast_create(TinyMceArticle, :profile_id => person.id, :name => 'Some thing') | |
64 | - get "/api/v1/search/article?type=TinyMceArticle&query=thing" | |
65 | - json = JSON.parse(last_response.body) | |
66 | - assert_equal 1, json['articles'].count | |
67 | - assert_equal article.id, json['articles'].first['id'] | |
68 | - end | |
69 | - | |
70 | - should 'not return more entries than page limit' do | |
71 | - 1.upto(5).each do |n| | |
72 | - fast_create(Article, :profile_id => person.id, :name => "Article #{n}") | |
73 | - end | |
74 | - | |
75 | - get "/api/v1/search/article?query=Article&per_page=3" | |
76 | - json = JSON.parse(last_response.body) | |
77 | - | |
78 | - assert_equal 3, json['articles'].count | |
79 | - end | |
80 | - | |
81 | - should 'return entries second page' do | |
82 | - 1.upto(5).each do |n| | |
83 | - fast_create(Article, :profile_id => person.id, :name => "Article #{n}") | |
84 | - end | |
85 | - | |
86 | - get "/api/v1/search/article?query=Article&per_page=3&page=2" | |
87 | - json = JSON.parse(last_response.body) | |
88 | - | |
89 | - assert_equal 2, json['articles'].count | |
90 | - end | |
91 | - | |
92 | - should 'search articles in profile' do | |
93 | - person2 = fast_create(Person) | |
94 | - fast_create(Article, :profile_id => person.id) | |
95 | - fast_create(Article, :profile_id => person.id) | |
96 | - article = fast_create(Article, :profile_id => person2.id) | |
97 | - | |
98 | - get "/api/v1/search/article?query=Article&profile_id=#{person2.id}" | |
99 | - json = JSON.parse(last_response.body) | |
100 | - assert_equal article.id, json['articles'].first['id'] | |
101 | - end | |
102 | - | |
103 | - should 'search and return values specified in fields parameter' do | |
104 | - fast_create(Article, :profile_id => person.id) | |
105 | - get "/api/v1/search/article?fields=title" | |
106 | - json = JSON.parse(last_response.body) | |
107 | - assert_not_empty json['articles'] | |
108 | - assert_equal ['title'], json['articles'].first.keys | |
109 | - end | |
110 | - | |
111 | - should 'search with parent' do | |
112 | - parent = fast_create(Folder, :profile_id => person.id) | |
113 | - fast_create(Article, :profile_id => person.id) | |
114 | - article = fast_create(Article, :profile_id => person.id, :parent_id => parent.id) | |
115 | - get "/api/v1/search/article?parent_id=#{parent.id}" | |
116 | - json = JSON.parse(last_response.body) | |
117 | - assert_equal 1, json['articles'].count | |
118 | - assert_equal article.id, json['articles'].first["id"] | |
119 | - end | |
120 | - | |
121 | - should 'search filter by category' do | |
122 | - Article.delete_all | |
123 | - fast_create(Article, :profile_id => person.id) | |
124 | - article = fast_create(Article, :profile_id => person.id) | |
125 | - category = fast_create(Category) | |
126 | - article.categories<< category | |
127 | - get "/api/v1/search/article?category_ids=#{category.id}" | |
128 | - json = JSON.parse(last_response.body) | |
129 | - assert_equal 1, json['articles'].count | |
130 | - assert_equal article.id, json['articles'].first["id"] | |
131 | - end | |
132 | - | |
133 | - should 'search filter by more than one category' do | |
134 | - Article.delete_all | |
135 | - fast_create(Article, :profile_id => person.id) | |
136 | - article1 = fast_create(Article, :profile_id => person.id) | |
137 | - article2 = fast_create(Article, :profile_id => person.id) | |
138 | - category1 = fast_create(Category) | |
139 | - category2 = fast_create(Category) | |
140 | - article1.categories<< category1 | |
141 | - article2.categories<< category2 | |
142 | - get "/api/v1/search/article?category_ids[]=#{category1.id}&category_ids[]=#{category2.id}" | |
143 | - json = JSON.parse(last_response.body) | |
144 | - ids = [article1.id, article2.id] | |
145 | - assert_equal 2, json['articles'].count | |
146 | - assert_includes ids, json['articles'].first["id"] | |
147 | - assert_includes ids, json['articles'].last["id"] | |
148 | - end | |
149 | - | |
150 | -end |
test/unit/api/session_test.rb
... | ... | @@ -1,221 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class SessionTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - login_api | |
7 | - end | |
8 | - | |
9 | - should 'generate private token when login' do | |
10 | - params = {:login => "testapi", :password => "testapi"} | |
11 | - post "/api/v1/login?#{params.to_query}" | |
12 | - json = JSON.parse(last_response.body) | |
13 | - assert !json['user']["private_token"].blank? | |
14 | - end | |
15 | - | |
16 | - should 'return 401 when login fails' do | |
17 | - user.destroy | |
18 | - params = {:login => "testapi", :password => "testapi"} | |
19 | - post "/api/v1/login?#{params.to_query}" | |
20 | - assert_equal 401, last_response.status | |
21 | - end | |
22 | - | |
23 | - should 'register a user' do | |
24 | - Environment.default.enable('skip_new_user_email_confirmation') | |
25 | - params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
26 | - post "/api/v1/register?#{params.to_query}" | |
27 | - assert_equal 201, last_response.status | |
28 | - json = JSON.parse(last_response.body) | |
29 | - assert User['newuserapi'].activated? | |
30 | - assert json['user']['activated'] | |
31 | - assert json['user']['private_token'].present? | |
32 | - end | |
33 | - | |
34 | - should 'register a user with name' do | |
35 | - Environment.default.enable('skip_new_user_email_confirmation') | |
36 | - params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com", :name => "Little John" } | |
37 | - post "/api/v1/register?#{params.to_query}" | |
38 | - assert_equal 201, last_response.status | |
39 | - json = JSON.parse(last_response.body) | |
40 | - assert json['user']['activated'] | |
41 | - assert json['user']['private_token'].present? | |
42 | - end | |
43 | - | |
44 | - should 'register an inactive user' do | |
45 | - params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
46 | - post "/api/v1/register?#{params.to_query}" | |
47 | - assert_equal 201, last_response.status | |
48 | - json = JSON.parse(last_response.body) | |
49 | - assert !json['activated'] | |
50 | - assert json['private_token'].blank? | |
51 | - end | |
52 | - | |
53 | - should 'not register a user with invalid login' do | |
54 | - params = {:login => "c", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
55 | - post "/api/v1/register?#{params.to_query}" | |
56 | - assert_equal 400, last_response.status | |
57 | - json = JSON.parse(last_response.body) | |
58 | - msg = json['message'].split(':') | |
59 | - key = msg[0][2, 5] | |
60 | - val = msg[1][2, 38] | |
61 | - assert_equal "login", key | |
62 | - assert_equal "is too short (minimum is 2 characters)", val | |
63 | - end | |
64 | - | |
65 | - should 'not register a user with invalid login pt' do | |
66 | - I18n.locale = "pt-BR" | |
67 | - params = {:lang => "pt-BR", :login => "c", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
68 | - post "/api/v1/register?#{params.to_query}" | |
69 | - assert_equal 400, last_response.status | |
70 | - json = JSON.parse(last_response.body) | |
71 | - msg = json['message'].split(':') | |
72 | - key = msg[0][2, 5] | |
73 | - val = msg[1][2, 35] | |
74 | - assert_equal "login", key | |
75 | - assert val.include? "muito curto" | |
76 | - end | |
77 | - | |
78 | - should 'not register a user without email' do | |
79 | - params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => nil } | |
80 | - post "/api/v1/register?#{params.to_query}" | |
81 | - assert_equal 400, last_response.status | |
82 | - end | |
83 | - | |
84 | - should 'not register a duplicated user' do | |
85 | - params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
86 | - post "/api/v1/register?#{params.to_query}" | |
87 | - post "/api/v1/register?#{params.to_query}" | |
88 | - assert_equal 400, last_response.status | |
89 | - json = JSON.parse(last_response.body) | |
90 | - end | |
91 | - | |
92 | - # TODO: Add another test cases to check register situations | |
93 | - should 'activate a user' do | |
94 | - params = { | |
95 | - :login => "newuserapi", | |
96 | - :password => "newuserapi", | |
97 | - :password_confirmation => "newuserapi", | |
98 | - :email => "newuserapi@email.com" | |
99 | - } | |
100 | - user = User.new(params) | |
101 | - user.save! | |
102 | - | |
103 | - params = { activation_code: user.activation_code} | |
104 | - patch "/api/v1/activate?#{params.to_query}" | |
105 | - assert_equal 200, last_response.status | |
106 | - end | |
107 | - | |
108 | - should 'do not activate a user if admin must approve him' do | |
109 | - params = { | |
110 | - :login => "newuserapi", | |
111 | - :password => "newuserapi", | |
112 | - :password_confirmation => "newuserapi", | |
113 | - :email => "newuserapi@email.com", | |
114 | - :environment => Environment.default | |
115 | - } | |
116 | - user = User.new(params) | |
117 | - user.environment.enable('admin_must_approve_new_users') | |
118 | - user.save! | |
119 | - | |
120 | - params = { activation_code: user.activation_code} | |
121 | - patch "/api/v1/activate?#{params.to_query}" | |
122 | - assert_equal 202, last_response.status | |
123 | - assert_equal 'Waiting for admin moderate user registration', JSON.parse(last_response.body)["message"] | |
124 | - end | |
125 | - | |
126 | - should 'do not activate a user if the token is invalid' do | |
127 | - params = { | |
128 | - :login => "newuserapi", | |
129 | - :password => "newuserapi", | |
130 | - :password_confirmation => "newuserapi", | |
131 | - :email => "newuserapi@email.com", | |
132 | - :environment => Environment.default | |
133 | - } | |
134 | - user = User.new(params) | |
135 | - user.save! | |
136 | - | |
137 | - params = { activation_code: '70250abe20cc6a67ef9399cf3286cb998b96aeaf'} | |
138 | - patch "/api/v1/activate?#{params.to_query}" | |
139 | - assert_equal 412, last_response.status | |
140 | - end | |
141 | - | |
142 | - should 'create task to change password by user login' do | |
143 | - user = create_user | |
144 | - params = {:value => user.login} | |
145 | - assert_difference 'ChangePassword.count' do | |
146 | - post "/api/v1/forgot_password?#{params.to_query}" | |
147 | - end | |
148 | - end | |
149 | - | |
150 | - should 'not create task to change password when user is not found' do | |
151 | - params = {:value => 'wronglogin'} | |
152 | - assert_no_difference 'ChangePassword.count' do | |
153 | - post "/api/v1/forgot_password?#{params.to_query}" | |
154 | - end | |
155 | - assert_equal 404, last_response.status | |
156 | - end | |
157 | - | |
158 | - should 'change user password and close task' do | |
159 | - task = ChangePassword.create!(:requestor => @person) | |
160 | - params.merge!({:code => task.code, :password => 'secret', :password_confirmation => 'secret'}) | |
161 | - patch "/api/v1/new_password?#{params.to_query}" | |
162 | - assert_equal Task::Status::FINISHED, task.reload.status | |
163 | - assert user.reload.authenticated?('secret') | |
164 | - json = JSON.parse(last_response.body) | |
165 | - assert_equal user.id, json['user']['id'] | |
166 | - end | |
167 | - | |
168 | - should 'do not change user password when password confirmation is wrong' do | |
169 | - user = create_user | |
170 | - user.activate | |
171 | - task = ChangePassword.create!(:requestor => user.person) | |
172 | - params = {:code => task.code, :password => 'secret', :password_confirmation => 's3cret'} | |
173 | - patch "/api/v1/new_password?#{params.to_query}" | |
174 | - assert_equal Task::Status::ACTIVE, task.reload.status | |
175 | - assert !user.reload.authenticated?('secret') | |
176 | - assert_equal 400, last_response.status | |
177 | - end | |
178 | - | |
179 | - should 'render not found when provide a wrong code on password change' do | |
180 | - params = {:code => "wrongcode", :password => 'secret', :password_confirmation => 'secret'} | |
181 | - patch "/api/v1/new_password?#{params.to_query}" | |
182 | - assert_equal 404, last_response.status | |
183 | - end | |
184 | - | |
185 | - should 'not return private token when the registered user is inactive' do | |
186 | - params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com" } | |
187 | - post "/api/v1/register?#{params.to_query}" | |
188 | - assert_equal 201, last_response.status | |
189 | - json = JSON.parse(last_response.body) | |
190 | - assert !User['newuserapi'].activated? | |
191 | - assert !json['user']['activated'] | |
192 | - assert !json['user']['private_token'].present? | |
193 | - end | |
194 | - | |
195 | - should 'resend activation code for an inactive user' do | |
196 | - user = create_user | |
197 | - params = {:value => user.login} | |
198 | - Delayed::Job.destroy_all | |
199 | - assert_difference 'ActionMailer::Base.deliveries.size' do | |
200 | - post "/api/v1/resend_activation_code?#{params.to_query}" | |
201 | - process_delayed_job_queue | |
202 | - end | |
203 | - json = JSON.parse(last_response.body) | |
204 | - refute json['users'].first['private_token'] | |
205 | - assert_equal user.email, ActionMailer::Base.deliveries.last['to'].to_s | |
206 | - end | |
207 | - | |
208 | - should 'not resend activation code for an active user' do | |
209 | - user = create_user | |
210 | - params = {:value => user.login} | |
211 | - user.activate | |
212 | - Delayed::Job.destroy_all | |
213 | - assert_no_difference 'ActionMailer::Base.deliveries.size' do | |
214 | - post "/api/v1/resend_activation_code?#{params.to_query}" | |
215 | - process_delayed_job_queue | |
216 | - end | |
217 | - json = JSON.parse(last_response.body) | |
218 | - assert json['users'].first['private_token'] | |
219 | - end | |
220 | - | |
221 | -end |
test/unit/api/task_test.rb
... | ... | @@ -1,173 +0,0 @@ |
1 | -require_relative 'test_helper' | |
2 | - | |
3 | -class TasksTest < ActiveSupport::TestCase | |
4 | - | |
5 | - def setup | |
6 | - login_api | |
7 | - @person = user.person | |
8 | - @community = fast_create(Community) | |
9 | - @environment = Environment.default | |
10 | - end | |
11 | - | |
12 | - attr_accessor :person, :community, :environment | |
13 | - | |
14 | - should 'list tasks of environment' do | |
15 | - environment.add_admin(person) | |
16 | - task = create(Task, :requestor => person, :target => environment) | |
17 | - get "/api/v1/tasks?#{params.to_query}" | |
18 | - json = JSON.parse(last_response.body) | |
19 | - assert_includes json["tasks"].map { |a| a["id"] }, task.id | |
20 | - end | |
21 | - | |
22 | - should 'return environment task by id' do | |
23 | - environment.add_admin(person) | |
24 | - task = create(Task, :requestor => person, :target => environment) | |
25 | - get "/api/v1/tasks/#{task.id}?#{params.to_query}" | |
26 | - json = JSON.parse(last_response.body) | |
27 | - assert_equal task.id, json["task"]["id"] | |
28 | - end | |
29 | - | |
30 | - should 'not return environmet task if user has no permission to view it' do | |
31 | - person = fast_create(Person) | |
32 | - task = create(Task, :requestor => person, :target => environment) | |
33 | - | |
34 | - get "/api/v1/tasks/#{task.id}?#{params.to_query}" | |
35 | - assert_equal 403, last_response.status | |
36 | - end | |
37 | - | |
38 | - ############################# | |
39 | - # Community Tasks # | |
40 | - ############################# | |
41 | - | |
42 | - should 'return task by community' do | |
43 | - community = fast_create(Community) | |
44 | - community.add_admin(person) | |
45 | - | |
46 | - task = create(Task, :requestor => person, :target => community) | |
47 | - assert person.is_member_of?(community) | |
48 | - | |
49 | - get "/api/v1/communities/#{community.id}/tasks/#{task.id}?#{params.to_query}" | |
50 | - json = JSON.parse(last_response.body) | |
51 | - assert_equal task.id, json["task"]["id"] | |
52 | - end | |
53 | - | |
54 | - should 'not return task by community if user has no permission to view it' do | |
55 | - community = fast_create(Community) | |
56 | - task = create(Task, :requestor => person, :target => community) | |
57 | - assert !person.is_member_of?(community) | |
58 | - | |
59 | - get "/api/v1/communities/#{community.id}/tasks/#{task.id}?#{params.to_query}" | |
60 | - assert_equal 403, last_response.status | |
61 | - end | |
62 | - | |
63 | - should 'create task in a community' do | |
64 | - community = fast_create(Community) | |
65 | - give_permission(person, 'perform_task', community) | |
66 | - post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}" | |
67 | - json = JSON.parse(last_response.body) | |
68 | - assert_not_nil json["task"]["id"] | |
69 | - end | |
70 | - | |
71 | - should 'create task defining the requestor as current profile logged in' do | |
72 | - community = fast_create(Community) | |
73 | - community.add_member(person) | |
74 | - | |
75 | - post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}" | |
76 | - json = JSON.parse(last_response.body) | |
77 | - | |
78 | - assert_equal person, Task.last.requestor | |
79 | - end | |
80 | - | |
81 | - should 'create task defining the target as the community' do | |
82 | - community = fast_create(Community) | |
83 | - community.add_member(person) | |
84 | - | |
85 | - post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}" | |
86 | - json = JSON.parse(last_response.body) | |
87 | - | |
88 | - assert_equal community, Task.last.target | |
89 | - end | |
90 | - | |
91 | - ############################# | |
92 | - # Person Tasks # | |
93 | - ############################# | |
94 | - | |
95 | - should 'return task by person' do | |
96 | - task = create(Task, :requestor => person, :target => person) | |
97 | - get "/api/v1/people/#{person.id}/tasks/#{task.id}?#{params.to_query}" | |
98 | - json = JSON.parse(last_response.body) | |
99 | - assert_equal task.id, json["task"]["id"] | |
100 | - end | |
101 | - | |
102 | - should 'not return task by person if user has no permission to view it' do | |
103 | - some_person = fast_create(Person) | |
104 | - task = create(Task, :requestor => person, :target => some_person) | |
105 | - | |
106 | - get "/api/v1/people/#{some_person.id}/tasks/#{task.id}?#{params.to_query}" | |
107 | - assert_equal 403, last_response.status | |
108 | - end | |
109 | - | |
110 | - should 'create task for person' do | |
111 | - post "/api/v1/people/#{person.id}/tasks?#{params.to_query}" | |
112 | - json = JSON.parse(last_response.body) | |
113 | - assert_not_nil json["task"]["id"] | |
114 | - end | |
115 | - | |
116 | - should 'create task for another person' do | |
117 | - some_person = fast_create(Person) | |
118 | - post "/api/v1/people/#{some_person.id}/tasks?#{params.to_query}" | |
119 | - json = JSON.parse(last_response.body) | |
120 | - | |
121 | - assert_equal some_person, Task.last.target | |
122 | - end | |
123 | - | |
124 | - should 'create task defining the target as a person' do | |
125 | - post "/api/v1/people/#{person.id}/tasks?#{params.to_query}" | |
126 | - json = JSON.parse(last_response.body) | |
127 | - | |
128 | - assert_equal person, Task.last.target | |
129 | - end | |
130 | - | |
131 | - ############################# | |
132 | - # Enterprise Tasks # | |
133 | - ############################# | |
134 | - | |
135 | - should 'return task by enterprise' do | |
136 | - enterprise = fast_create(Enterprise) | |
137 | - enterprise.add_admin(person) | |
138 | - | |
139 | - task = create(Task, :requestor => person, :target => enterprise) | |
140 | - assert person.is_member_of?(enterprise) | |
141 | - | |
142 | - get "/api/v1/enterprises/#{enterprise.id}/tasks/#{task.id}?#{params.to_query}" | |
143 | - json = JSON.parse(last_response.body) | |
144 | - assert_equal task.id, json["task"]["id"] | |
145 | - end | |
146 | - | |
147 | - should 'not return task by enterprise if user has no permission to view it' do | |
148 | - enterprise = fast_create(Enterprise) | |
149 | - task = create(Task, :requestor => person, :target => enterprise) | |
150 | - assert !person.is_member_of?(enterprise) | |
151 | - | |
152 | - get "/api/v1/enterprises/#{enterprise.id}/tasks/#{task.id}?#{params.to_query}" | |
153 | - assert_equal 403, last_response.status | |
154 | - end | |
155 | - | |
156 | - should 'create task in a enterprise' do | |
157 | - enterprise = fast_create(Enterprise) | |
158 | - give_permission(person, 'perform_task', enterprise) | |
159 | - post "/api/v1/enterprises/#{enterprise.id}/tasks?#{params.to_query}" | |
160 | - json = JSON.parse(last_response.body) | |
161 | - assert_not_nil json["task"]["id"] | |
162 | - end | |
163 | - | |
164 | - should 'create task defining the target as the enterprise' do | |
165 | - enterprise = fast_create(Enterprise) | |
166 | - enterprise.add_member(person) | |
167 | - | |
168 | - post "/api/v1/enterprises/#{enterprise.id}/tasks?#{params.to_query}" | |
169 | - json = JSON.parse(last_response.body) | |
170 | - | |
171 | - assert_equal enterprise, Task.last.target | |
172 | - end | |
173 | -end |
test/unit/api/test_helper.rb
... | ... | @@ -1,36 +0,0 @@ |
1 | -require_relative '../../test_helper' | |
2 | - | |
3 | -class ActiveSupport::TestCase | |
4 | - | |
5 | - include Rack::Test::Methods | |
6 | - | |
7 | - def app | |
8 | - Noosfero::API::API | |
9 | - end | |
10 | - | |
11 | - def login_api | |
12 | - @environment = Environment.default | |
13 | - @user = User.create!(:login => 'testapi', :password => 'testapi', :password_confirmation => 'testapi', :email => 'test@test.org', :environment => @environment) | |
14 | - @user.activate | |
15 | - @person = @user.person | |
16 | - | |
17 | - post "/api/v1/login?login=testapi&password=testapi" | |
18 | - json = JSON.parse(last_response.body) | |
19 | - @private_token = json["private_token"] | |
20 | - unless @private_token | |
21 | - @user.generate_private_token! | |
22 | - @private_token = @user.private_token | |
23 | - end | |
24 | - | |
25 | - @params = {:private_token => @private_token} | |
26 | - end | |
27 | - attr_accessor :private_token, :user, :person, :params, :environment | |
28 | - | |
29 | - private | |
30 | - | |
31 | - def json_response_ids(kind) | |
32 | - json = JSON.parse(last_response.body) | |
33 | - json[kind.to_s].map {|c| c['id']} | |
34 | - end | |
35 | - | |
36 | -end |
test/unit/api/users_test.rb
... | ... | @@ -1,105 +0,0 @@ |
1 | -# encoding: UTF-8 | |
2 | -require_relative 'test_helper' | |
3 | - | |
4 | -class UsersTest < ActiveSupport::TestCase | |
5 | - | |
6 | - def setup | |
7 | - login_api | |
8 | - end | |
9 | - | |
10 | - should 'list users' do | |
11 | - get "/api/v1/users/?#{params.to_query}" | |
12 | - json = JSON.parse(last_response.body) | |
13 | - assert_includes json["users"].map { |a| a["login"] }, user.login | |
14 | - end | |
15 | - | |
16 | - should 'get user' do | |
17 | - get "/api/v1/users/#{user.id}?#{params.to_query}" | |
18 | - json = JSON.parse(last_response.body) | |
19 | - assert_equal user.id, json['user']['id'] | |
20 | - end | |
21 | - | |
22 | - should 'list user permissions' do | |
23 | - community = fast_create(Community) | |
24 | - community.add_admin(person) | |
25 | - get "/api/v1/users/#{user.id}/?#{params.to_query}" | |
26 | - json = JSON.parse(last_response.body) | |
27 | - assert_includes json["user"]["permissions"], community.identifier | |
28 | - end | |
29 | - | |
30 | - should 'get logged user' do | |
31 | - get "/api/v1/users/me?#{params.to_query}" | |
32 | - json = JSON.parse(last_response.body) | |
33 | - assert_equal user.id, json['user']['id'] | |
34 | - end | |
35 | - | |
36 | - should 'not show permissions to logged user' do | |
37 | - target_person = create_user('some-user').person | |
38 | - get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
39 | - json = JSON.parse(last_response.body) | |
40 | - refute json["user"].has_key?("permissions") | |
41 | - end | |
42 | - | |
43 | - should 'show permissions to self' do | |
44 | - get "/api/v1/users/#{user.id}/?#{params.to_query}" | |
45 | - json = JSON.parse(last_response.body) | |
46 | - assert json["user"].has_key?("permissions") | |
47 | - end | |
48 | - | |
49 | - should 'not show permissions to friend' do | |
50 | - target_person = create_user('some-user').person | |
51 | - | |
52 | - f = Friendship.new | |
53 | - f.friend = target_person | |
54 | - f.person = person | |
55 | - f.save! | |
56 | - | |
57 | - get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
58 | - json = JSON.parse(last_response.body) | |
59 | - refute json["user"].has_key?("permissions") | |
60 | - end | |
61 | - | |
62 | - should 'not show private attribute to logged user' do | |
63 | - target_person = create_user('some-user').person | |
64 | - get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
65 | - json = JSON.parse(last_response.body) | |
66 | - refute json["user"].has_key?("email") | |
67 | - end | |
68 | - | |
69 | - should 'show private attr to friend' do | |
70 | - target_person = create_user('some-user').person | |
71 | - f = Friendship.new | |
72 | - f.friend = target_person | |
73 | - f.person = person | |
74 | - f.save! | |
75 | - get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
76 | - json = JSON.parse(last_response.body) | |
77 | - assert json["user"].has_key?("email") | |
78 | - assert_equal target_person.email, json["user"]["email"] | |
79 | - end | |
80 | - | |
81 | - should 'show public attribute to logged user' do | |
82 | - target_person = create_user('some-user').person | |
83 | - target_person.fields_privacy={:email=> 'public'} | |
84 | - target_person.save! | |
85 | - get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
86 | - json = JSON.parse(last_response.body) | |
87 | - assert json["user"].has_key?("email") | |
88 | - assert_equal json["user"]["email"],target_person.email | |
89 | - end | |
90 | - | |
91 | - should 'show public and private field to admin' do | |
92 | - Environment.default.add_admin(person) | |
93 | - | |
94 | - target_person = create_user('some-user').person | |
95 | - target_person.fields_privacy={:email=> 'public'} | |
96 | - target_person.save! | |
97 | - | |
98 | - get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | |
99 | - json = JSON.parse(last_response.body) | |
100 | - assert json["user"].has_key?("email") | |
101 | - assert json["user"].has_key?("permissions") | |
102 | - assert json["user"].has_key?("activated") | |
103 | - end | |
104 | - | |
105 | -end |