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
@@ -14,6 +14,10 @@ stages: | @@ -14,6 +14,10 @@ stages: | ||
14 | # script: bundle exec rake ci:smoke | 14 | # script: bundle exec rake ci:smoke |
15 | # stage: smoke-tests | 15 | # stage: smoke-tests |
16 | 16 | ||
17 | +api: | ||
18 | + script: bundle exec rake test:api | ||
19 | + stage: all-tests | ||
20 | + | ||
17 | units: | 21 | units: |
18 | script: bundle exec rake test:units | 22 | script: bundle exec rake test:units |
19 | stage: all-tests | 23 | stage: all-tests |
.travis.yml
@@ -44,6 +44,7 @@ before_script: | @@ -44,6 +44,7 @@ before_script: | ||
44 | - bundle exec rake db:migrate &>/dev/null | 44 | - bundle exec rake db:migrate &>/dev/null |
45 | 45 | ||
46 | env: | 46 | env: |
47 | + - TASK=test:api | ||
47 | - TASK=test:units | 48 | - TASK=test:units |
48 | - TASK=test:functionals | 49 | - TASK=test:functionals |
49 | - TASK=test:integration | 50 | - TASK=test:integration |
lib/tasks/test.rake
script/ci
@@ -0,0 +1,22 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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 |