Commit 02cbe1132276a976910a16a9455af8b967224887
Exists in
staging
and in
1 other branch
merge with master
Showing
24 changed files
with
842 additions
and
153 deletions
Show diff stats
app/models/organization.rb
@@ -17,6 +17,8 @@ class Organization < Profile | @@ -17,6 +17,8 @@ class Organization < Profile | ||
17 | # 4) The user is not a member of the organization but the organization is | 17 | # 4) The user is not a member of the organization but the organization is |
18 | # visible, public and enabled. | 18 | # visible, public and enabled. |
19 | def self.visible_for_person(person) | 19 | def self.visible_for_person(person) |
20 | + # Visitor if person.nil? | ||
21 | + person_id = person.nil? ? nil : person.id | ||
20 | joins('LEFT JOIN "role_assignments" ON ("role_assignments"."resource_id" = "profiles"."id" | 22 | joins('LEFT JOIN "role_assignments" ON ("role_assignments"."resource_id" = "profiles"."id" |
21 | AND "role_assignments"."resource_type" = \'Profile\') OR ( | 23 | AND "role_assignments"."resource_type" = \'Profile\') OR ( |
22 | "role_assignments"."resource_id" = "profiles"."environment_id" AND | 24 | "role_assignments"."resource_id" = "profiles"."environment_id" AND |
@@ -28,8 +30,8 @@ class Organization < Profile | @@ -28,8 +30,8 @@ class Organization < Profile | ||
28 | ( ( ( role_assignments.accessor_type = ? AND role_assignments.accessor_id = ? ) OR | 30 | ( ( ( role_assignments.accessor_type = ? AND role_assignments.accessor_id = ? ) OR |
29 | ( profiles.public_profile = ? AND profiles.enabled = ? ) ) AND | 31 | ( profiles.public_profile = ? AND profiles.enabled = ? ) ) AND |
30 | ( profiles.visible = ? ) )', | 32 | ( profiles.visible = ? ) )', |
31 | - 'profile_admin', 'environment_administrator', Profile.name, person.id, | ||
32 | - Profile.name, person.id, true, true, true] | 33 | + 'profile_admin', 'environment_administrator', Profile.name, person_id, |
34 | + Profile.name, person_id, true, true, true] | ||
33 | ).uniq | 35 | ).uniq |
34 | end | 36 | end |
35 | 37 |
app/models/person.rb
@@ -42,6 +42,8 @@ class Person < Profile | @@ -42,6 +42,8 @@ class Person < Profile | ||
42 | } | 42 | } |
43 | 43 | ||
44 | scope :visible_for_person, lambda { |person| | 44 | scope :visible_for_person, lambda { |person| |
45 | + # Visitor if person.nil? | ||
46 | + person_id = person.nil? ? nil : person.id | ||
45 | joins('LEFT JOIN "role_assignments" ON | 47 | joins('LEFT JOIN "role_assignments" ON |
46 | "role_assignments"."resource_id" = "profiles"."environment_id" AND | 48 | "role_assignments"."resource_id" = "profiles"."environment_id" AND |
47 | "role_assignments"."resource_type" = \'Environment\'') | 49 | "role_assignments"."resource_type" = \'Environment\'') |
@@ -49,9 +51,10 @@ class Person < Profile | @@ -49,9 +51,10 @@ class Person < Profile | ||
49 | .joins('LEFT JOIN "friendships" ON "friendships"."friend_id" = "profiles"."id"') | 51 | .joins('LEFT JOIN "friendships" ON "friendships"."friend_id" = "profiles"."id"') |
50 | .where( | 52 | .where( |
51 | ['( roles.key = ? AND role_assignments.accessor_type = ? AND role_assignments.accessor_id = ? ) OR ( | 53 | ['( roles.key = ? AND role_assignments.accessor_type = ? AND role_assignments.accessor_id = ? ) OR ( |
52 | - ( ( friendships.person_id = ? ) OR (profiles.public_profile = ?)) AND (profiles.visible = ?) )', 'environment_administrator', Profile.name, person.id, person.id, true, true] | 54 | + ( ( friendships.person_id = ? ) OR (profiles.public_profile = ?)) AND (profiles.visible = ?) )', |
55 | + 'environment_administrator', Profile.name, person_id, person_id, true, true] | ||
53 | ).uniq | 56 | ).uniq |
54 | - } | 57 | + } |
55 | 58 | ||
56 | def has_permission_with_admin?(permission, resource) | 59 | def has_permission_with_admin?(permission, resource) |
57 | return true if resource.blank? || resource.admins.include?(self) | 60 | return true if resource.blank? || resource.admins.include?(self) |
app/views/profile_search/_results_list.html.erb
1 | <div id='search-content'> | 1 | <div id='search-content'> |
2 | <% if @results %> | 2 | <% if @results %> |
3 | <div class='results-found-message'> | 3 | <div class='results-found-message'> |
4 | - <%= _("%s results found") % @results.total_entries %> | 4 | + <%= n_("%s result found", "%s results found", @results.total_entries) % @results.total_entries %> |
5 | </div> | 5 | </div> |
6 | 6 | ||
7 | <ul class='results-list'> | 7 | <ul class='results-list'> |
app/views/search/_search_content.html.erb
1 | <div id='search-content'> | 1 | <div id='search-content'> |
2 | <div class='total'> | 2 | <div class='total'> |
3 | - <%= _('Total of %s results ') % @searches[@asset][:results].total_entries.inspect %> | 3 | + <%= n_('Total of 1 result', 'Total of %s results', @searches[@asset][:results].total_entries) % @searches[@asset][:results].total_entries.inspect %> |
4 | </div> | 4 | </div> |
5 | 5 | ||
6 | <%= display_results(@searches, @asset) %> | 6 | <%= display_results(@searches, @asset) %> |
lib/noosfero/api/entities.rb
@@ -197,7 +197,7 @@ module Noosfero | @@ -197,7 +197,7 @@ module Noosfero | ||
197 | class Article < ArticleBase | 197 | class Article < ArticleBase |
198 | root 'articles', 'article' | 198 | root 'articles', 'article' |
199 | expose :parent, :using => ArticleBase | 199 | expose :parent, :using => ArticleBase |
200 | - expose :children, using: ArticleBase do |article, options| | 200 | + expose :children, :using => ArticleBase do |article, options| |
201 | article.children.limit(Noosfero::API::V1::Articles::MAX_PER_PAGE) | 201 | article.children.limit(Noosfero::API::V1::Articles::MAX_PER_PAGE) |
202 | end | 202 | end |
203 | end | 203 | end |
lib/noosfero/api/v1/categories.rb
lib/noosfero/api/v1/comments.rb
@@ -4,7 +4,6 @@ module Noosfero | @@ -4,7 +4,6 @@ module Noosfero | ||
4 | class Comments < Grape::API | 4 | class Comments < Grape::API |
5 | MAX_PER_PAGE = 20 | 5 | MAX_PER_PAGE = 20 |
6 | 6 | ||
7 | - before { authenticate! } | ||
8 | 7 | ||
9 | resource :articles do | 8 | resource :articles do |
10 | paginate max_per_page: MAX_PER_PAGE | 9 | paginate max_per_page: MAX_PER_PAGE |
@@ -34,6 +33,7 @@ module Noosfero | @@ -34,6 +33,7 @@ module Noosfero | ||
34 | # Example Request: | 33 | # Example Request: |
35 | # POST api/v1/articles/12/comments?private_token=2298743290432&body=new comment&title=New | 34 | # POST api/v1/articles/12/comments?private_token=2298743290432&body=new comment&title=New |
36 | post ":id/comments" do | 35 | post ":id/comments" do |
36 | + authenticate! | ||
37 | article = find_article(environment.articles, params[:id]) | 37 | article = find_article(environment.articles, params[:id]) |
38 | options = params.select { |key,v| !['id','private_token'].include?(key) }.merge(:author => current_person, :source => article) | 38 | options = params.select { |key,v| !['id','private_token'].include?(key) }.merge(:author => current_person, :source => article) |
39 | begin | 39 | begin |
lib/noosfero/api/v1/communities.rb
@@ -2,7 +2,6 @@ module Noosfero | @@ -2,7 +2,6 @@ module Noosfero | ||
2 | module API | 2 | module API |
3 | module V1 | 3 | module V1 |
4 | class Communities < Grape::API | 4 | class Communities < Grape::API |
5 | - before { authenticate! } | ||
6 | 5 | ||
7 | resource :communities do | 6 | resource :communities do |
8 | 7 | ||
@@ -18,7 +17,7 @@ module Noosfero | @@ -18,7 +17,7 @@ module Noosfero | ||
18 | # GET /communities?reference_id=10&limit=10&oldest | 17 | # GET /communities?reference_id=10&limit=10&oldest |
19 | get do | 18 | get do |
20 | communities = select_filtered_collection_of(environment, 'communities', params) | 19 | communities = select_filtered_collection_of(environment, 'communities', params) |
21 | - communities = communities.visible_for_person(current_person) | 20 | + communities = communities.visible |
22 | communities = communities.by_location(params) # Must be the last. May return Exception obj. | 21 | communities = communities.by_location(params) # Must be the last. May return Exception obj. |
23 | present communities, :with => Entities::Community, :current_person => current_person | 22 | present communities, :with => Entities::Community, :current_person => current_person |
24 | end | 23 | end |
@@ -28,6 +27,7 @@ module Noosfero | @@ -28,6 +27,7 @@ module Noosfero | ||
28 | # POST api/v1/communties?private_token=234298743290432&community[name]=some_name | 27 | # POST api/v1/communties?private_token=234298743290432&community[name]=some_name |
29 | # for each custom field for community, add &community[field_name]=field_value to the request | 28 | # for each custom field for community, add &community[field_name]=field_value to the request |
30 | post do | 29 | post do |
30 | + authenticate! | ||
31 | params[:community] ||= {} | 31 | params[:community] ||= {} |
32 | 32 | ||
33 | params[:community][:custom_values]={} | 33 | params[:community][:custom_values]={} |
@@ -49,7 +49,7 @@ module Noosfero | @@ -49,7 +49,7 @@ module Noosfero | ||
49 | end | 49 | end |
50 | 50 | ||
51 | get ':id' do | 51 | get ':id' do |
52 | - community = environment.communities.visible_for_person(current_person).find_by id: params[:id] | 52 | + community = environment.communities.visible.find_by(id: params[:id]) |
53 | present community, :with => Entities::Community, :current_person => current_person | 53 | present community, :with => Entities::Community, :current_person => current_person |
54 | end | 54 | end |
55 | 55 |
lib/noosfero/api/v1/enterprises.rb
@@ -2,7 +2,6 @@ module Noosfero | @@ -2,7 +2,6 @@ module Noosfero | ||
2 | module API | 2 | module API |
3 | module V1 | 3 | module V1 |
4 | class Enterprises < Grape::API | 4 | class Enterprises < Grape::API |
5 | - before { authenticate! } | ||
6 | 5 | ||
7 | resource :enterprises do | 6 | resource :enterprises do |
8 | 7 | ||
@@ -19,14 +18,14 @@ module Noosfero | @@ -19,14 +18,14 @@ module Noosfero | ||
19 | # GET /enterprises?reference_id=10&limit=10&oldest | 18 | # GET /enterprises?reference_id=10&limit=10&oldest |
20 | get do | 19 | get do |
21 | enterprises = select_filtered_collection_of(environment, 'enterprises', params) | 20 | enterprises = select_filtered_collection_of(environment, 'enterprises', params) |
22 | - enterprises = enterprises.visible_for_person(current_person) | 21 | + enterprises = enterprises.visible |
23 | enterprises = enterprises.by_location(params) # Must be the last. May return Exception obj. | 22 | enterprises = enterprises.by_location(params) # Must be the last. May return Exception obj. |
24 | present enterprises, :with => Entities::Enterprise, :current_person => current_person | 23 | present enterprises, :with => Entities::Enterprise, :current_person => current_person |
25 | end | 24 | end |
26 | 25 | ||
27 | desc "Return one enterprise by id" | 26 | desc "Return one enterprise by id" |
28 | get ':id' do | 27 | get ':id' do |
29 | - enterprise = environment.enterprises.visible_for_person(current_person).find_by id: params[:id] | 28 | + enterprise = environment.enterprises.visible.find_by(id: params[:id]) |
30 | present enterprise, :with => Entities::Enterprise, :current_person => current_person | 29 | present enterprise, :with => Entities::Enterprise, :current_person => current_person |
31 | end | 30 | end |
32 | 31 |
lib/noosfero/api/v1/people.rb
@@ -2,7 +2,6 @@ module Noosfero | @@ -2,7 +2,6 @@ module Noosfero | ||
2 | module API | 2 | module API |
3 | module V1 | 3 | module V1 |
4 | class People < Grape::API | 4 | class People < Grape::API |
5 | - before { authenticate! } | ||
6 | 5 | ||
7 | MAX_PER_PAGE = 50 | 6 | MAX_PER_PAGE = 50 |
8 | 7 | ||
@@ -35,24 +34,26 @@ module Noosfero | @@ -35,24 +34,26 @@ module Noosfero | ||
35 | desc "Find environment's people" | 34 | desc "Find environment's people" |
36 | get do | 35 | get do |
37 | people = select_filtered_collection_of(environment, 'people', params) | 36 | people = select_filtered_collection_of(environment, 'people', params) |
38 | - people = people.visible_for_person(current_person) | 37 | + people = people.visible |
39 | present_partial people, :with => Entities::Person, :current_person => current_person | 38 | present_partial people, :with => Entities::Person, :current_person => current_person |
40 | end | 39 | end |
41 | 40 | ||
42 | desc "Return the logged user information" | 41 | desc "Return the logged user information" |
43 | get "/me" do | 42 | get "/me" do |
43 | + authenticate! | ||
44 | present_partial current_person, :with => Entities::Person, :current_person => current_person | 44 | present_partial current_person, :with => Entities::Person, :current_person => current_person |
45 | end | 45 | end |
46 | 46 | ||
47 | desc "Return the person information" | 47 | desc "Return the person information" |
48 | get ':id' do | 48 | get ':id' do |
49 | - person = environment.people.visible_for_person(current_person).find_by id: params[:id] | 49 | + person = environment.people.visible.find_by(id: params[:id]) |
50 | return not_found! if person.blank? | 50 | return not_found! if person.blank? |
51 | present person, :with => Entities::Person, :current_person => current_person | 51 | present person, :with => Entities::Person, :current_person => current_person |
52 | end | 52 | end |
53 | 53 | ||
54 | desc "Update person information" | 54 | desc "Update person information" |
55 | post ':id' do | 55 | post ':id' do |
56 | + authenticate! | ||
56 | return forbidden! if current_person.id.to_s != params[:id] | 57 | return forbidden! if current_person.id.to_s != params[:id] |
57 | current_person.update_attributes!(params[:person]) | 58 | current_person.update_attributes!(params[:person]) |
58 | present current_person, :with => Entities::Person, :current_person => current_person | 59 | present current_person, :with => Entities::Person, :current_person => current_person |
@@ -63,6 +64,7 @@ module Noosfero | @@ -63,6 +64,7 @@ module Noosfero | ||
63 | # for each custom field for person, add &person[field_name]=field_value to the request | 64 | # for each custom field for person, add &person[field_name]=field_value to the request |
64 | desc "Create person" | 65 | desc "Create person" |
65 | post do | 66 | post do |
67 | + authenticate! | ||
66 | user_data = {} | 68 | user_data = {} |
67 | user_data[:login] = params[:person].delete(:login) || params[:person][:identifier] | 69 | user_data[:login] = params[:person].delete(:login) || params[:person][:identifier] |
68 | user_data[:email] = params[:person].delete(:email) | 70 | user_data[:email] = params[:person].delete(:email) |
@@ -87,7 +89,7 @@ module Noosfero | @@ -87,7 +89,7 @@ module Noosfero | ||
87 | 89 | ||
88 | desc "Return the person friends" | 90 | desc "Return the person friends" |
89 | get ':id/friends' do | 91 | get ':id/friends' do |
90 | - person = environment.people.visible_for_person(current_person).find_by id: params[:id] | 92 | + person = environment.people.visible.find_by(id: params[:id]) |
91 | return not_found! if person.blank? | 93 | return not_found! if person.blank? |
92 | friends = person.friends.visible | 94 | friends = person.friends.visible |
93 | present friends, :with => Entities::Person, :current_person => current_person | 95 | present friends, :with => Entities::Person, :current_person => current_person |
@@ -95,6 +97,7 @@ module Noosfero | @@ -95,6 +97,7 @@ module Noosfero | ||
95 | 97 | ||
96 | desc "Return the person permissions on other profiles" | 98 | desc "Return the person permissions on other profiles" |
97 | get ":id/permissions" do | 99 | get ":id/permissions" do |
100 | + authenticate! | ||
98 | person = environment.people.find(params[:id]) | 101 | person = environment.people.find(params[:id]) |
99 | return not_found! if person.blank? | 102 | return not_found! if person.blank? |
100 | return forbidden! unless current_person == person || environment.admins.include?(current_person) | 103 | return forbidden! unless current_person == person || environment.admins.include?(current_person) |
lib/noosfero/api/v1/profiles.rb
@@ -2,25 +2,25 @@ module Noosfero | @@ -2,25 +2,25 @@ module Noosfero | ||
2 | module API | 2 | module API |
3 | module V1 | 3 | module V1 |
4 | class Profiles < Grape::API | 4 | class Profiles < Grape::API |
5 | - before { authenticate! } | ||
6 | 5 | ||
7 | resource :profiles do | 6 | resource :profiles do |
8 | 7 | ||
9 | get do | 8 | get do |
10 | profiles = select_filtered_collection_of(environment, 'profiles', params) | 9 | profiles = select_filtered_collection_of(environment, 'profiles', params) |
11 | - profiles = profiles.visible_for_person(current_person) | 10 | + profiles = profiles.visible |
12 | profiles = profiles.by_location(params) # Must be the last. May return Exception obj. | 11 | profiles = profiles.by_location(params) # Must be the last. May return Exception obj. |
13 | present profiles, :with => Entities::Profile, :current_person => current_person | 12 | present profiles, :with => Entities::Profile, :current_person => current_person |
14 | end | 13 | end |
15 | 14 | ||
16 | get ':id' do | 15 | get ':id' do |
17 | profiles = environment.profiles | 16 | profiles = environment.profiles |
18 | - profiles = profiles.visible_for_person(current_person) | 17 | + profiles = profiles.visible |
19 | profile = profiles.find_by id: params[:id] | 18 | profile = profiles.find_by id: params[:id] |
20 | present profile, :with => Entities::Profile, :current_person => current_person | 19 | present profile, :with => Entities::Profile, :current_person => current_person |
21 | end | 20 | end |
22 | 21 | ||
23 | delete ':id' do | 22 | delete ':id' do |
23 | + authenticate! | ||
24 | profiles = environment.profiles | 24 | profiles = environment.profiles |
25 | profile = profiles.find_by id: params[:id] | 25 | profile = profiles.find_by id: params[:id] |
26 | 26 |
lib/noosfero/api/v1/users.rb
@@ -2,7 +2,6 @@ module Noosfero | @@ -2,7 +2,6 @@ module Noosfero | ||
2 | module API | 2 | module API |
3 | module V1 | 3 | module V1 |
4 | class Users < Grape::API | 4 | class Users < Grape::API |
5 | - before { authenticate! } | ||
6 | 5 | ||
7 | resource :users do | 6 | resource :users do |
8 | 7 | ||
@@ -13,6 +12,7 @@ module Noosfero | @@ -13,6 +12,7 @@ module Noosfero | ||
13 | end | 12 | end |
14 | 13 | ||
15 | get "/me" do | 14 | get "/me" do |
15 | + authenticate! | ||
16 | present current_user, :with => Entities::User, :current_person => current_person | 16 | present current_user, :with => Entities::User, :current_person => current_person |
17 | end | 17 | end |
18 | 18 | ||
@@ -25,6 +25,7 @@ module Noosfero | @@ -25,6 +25,7 @@ module Noosfero | ||
25 | end | 25 | end |
26 | 26 | ||
27 | get ":id/permissions" do | 27 | get ":id/permissions" do |
28 | + authenticate! | ||
28 | user = environment.users.find(params[:id]) | 29 | user = environment.users.find(params[:id]) |
29 | output = {} | 30 | output = {} |
30 | user.person.role_assignments.map do |role_assigment| | 31 | user.person.role_assignments.map do |role_assigment| |
test/api/articles_test.rb
@@ -177,7 +177,6 @@ class ArticlesTest < ActiveSupport::TestCase | @@ -177,7 +177,6 @@ class ArticlesTest < ActiveSupport::TestCase | ||
177 | assert_equal 400, last_response.status | 177 | assert_equal 400, last_response.status |
178 | end | 178 | end |
179 | 179 | ||
180 | - | ||
181 | should 'perform a vote in a article identified by id' do | 180 | should 'perform a vote in a article identified by id' do |
182 | article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") | 181 | article = fast_create(Article, :profile_id => @person.id, :name => "Some thing") |
183 | @params[:value] = 1 | 182 | @params[:value] = 1 |
@@ -192,10 +191,8 @@ class ArticlesTest < ActiveSupport::TestCase | @@ -192,10 +191,8 @@ class ArticlesTest < ActiveSupport::TestCase | ||
192 | should 'not perform a vote in a archived article' do | 191 | should 'not perform a vote in a archived article' do |
193 | article = fast_create(Article, :profile_id => @person.id, :name => "Some thing", :archived => true) | 192 | article = fast_create(Article, :profile_id => @person.id, :name => "Some thing", :archived => true) |
194 | @params[:value] = 1 | 193 | @params[:value] = 1 |
195 | - | ||
196 | post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | 194 | post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" |
197 | - json = JSON.parse(last_response.body) | ||
198 | - | 195 | + puts JSON.parse(last_response.body) |
199 | assert_equal 400, last_response.status | 196 | assert_equal 400, last_response.status |
200 | end | 197 | end |
201 | 198 | ||
@@ -210,6 +207,24 @@ class ArticlesTest < ActiveSupport::TestCase | @@ -210,6 +207,24 @@ class ArticlesTest < ActiveSupport::TestCase | ||
210 | end | 207 | end |
211 | end | 208 | end |
212 | 209 | ||
210 | + should 'not update hit attribute of a specific child if a article is archived' do | ||
211 | + folder = fast_create(Folder, :profile_id => user.person.id, :archived => true) | ||
212 | + article = fast_create(Article, :parent_id => folder.id, :profile_id => user.person.id) | ||
213 | + get "/api/v1/articles/#{folder.id}/children/#{article.id}?#{params.to_query}" | ||
214 | + json = JSON.parse(last_response.body) | ||
215 | + assert_equal 0, json['article']['hits'] | ||
216 | + end | ||
217 | + | ||
218 | + should 'find archived articles' do | ||
219 | + article1 = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | ||
220 | + article2 = fast_create(Article, :profile_id => user.person.id, :name => "Some thing", :archived => true) | ||
221 | + params[:archived] = true | ||
222 | + get "/api/v1/articles/?#{params.to_query}" | ||
223 | + json = JSON.parse(last_response.body) | ||
224 | + assert_not_includes json["articles"].map { |a| a["id"] }, article1.id | ||
225 | + assert_includes json["articles"].map { |a| a["id"] }, article2.id | ||
226 | + end | ||
227 | + | ||
213 | should "update body of article created by me" do | 228 | should "update body of article created by me" do |
214 | new_value = "Another body" | 229 | new_value = "Another body" |
215 | params[:article] = {:body => new_value} | 230 | params[:article] = {:body => new_value} |
@@ -676,16 +691,6 @@ class ArticlesTest < ActiveSupport::TestCase | @@ -676,16 +691,6 @@ class ArticlesTest < ActiveSupport::TestCase | ||
676 | assert_equal json['articles'].count, 2 | 691 | assert_equal json['articles'].count, 2 |
677 | end | 692 | end |
678 | 693 | ||
679 | - should 'find archived articles' do | ||
680 | - article1 = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | ||
681 | - article2 = fast_create(Article, :profile_id => user.person.id, :name => "Some thing", :archived => true) | ||
682 | - params[:archived] = true | ||
683 | - get "/api/v1/articles/?#{params.to_query}" | ||
684 | - json = JSON.parse(last_response.body) | ||
685 | - assert_not_includes json["articles"].map { |a| a["id"] }, article1.id | ||
686 | - assert_includes json["articles"].map { |a| a["id"] }, article2.id | ||
687 | - end | ||
688 | - | ||
689 | ARTICLE_ATTRIBUTES = %w(followers_count votes_count comments_count) | 694 | ARTICLE_ATTRIBUTES = %w(followers_count votes_count comments_count) |
690 | 695 | ||
691 | ARTICLE_ATTRIBUTES.map do |attribute| | 696 | ARTICLE_ATTRIBUTES.map do |attribute| |
test/api/categories_test.rb
@@ -2,25 +2,25 @@ require_relative 'test_helper' | @@ -2,25 +2,25 @@ require_relative 'test_helper' | ||
2 | 2 | ||
3 | class CategoriesTest < ActiveSupport::TestCase | 3 | class CategoriesTest < ActiveSupport::TestCase |
4 | 4 | ||
5 | - def setup | ||
6 | - login_api | ||
7 | - end | ||
8 | 5 | ||
9 | - should 'list categories' do | 6 | + should 'logged user list categories' do |
7 | + login_api | ||
10 | category = fast_create(Category, :environment_id => environment.id) | 8 | category = fast_create(Category, :environment_id => environment.id) |
11 | get "/api/v1/categories/?#{params.to_query}" | 9 | get "/api/v1/categories/?#{params.to_query}" |
12 | json = JSON.parse(last_response.body) | 10 | json = JSON.parse(last_response.body) |
13 | assert_includes json["categories"].map { |c| c["name"] }, category.name | 11 | assert_includes json["categories"].map { |c| c["name"] }, category.name |
14 | end | 12 | end |
15 | 13 | ||
16 | - should 'get category by id' do | 14 | + should 'logged user get category by id' do |
15 | + login_api | ||
17 | category = fast_create(Category, :environment_id => environment.id) | 16 | category = fast_create(Category, :environment_id => environment.id) |
18 | get "/api/v1/categories/#{category.id}/?#{params.to_query}" | 17 | get "/api/v1/categories/#{category.id}/?#{params.to_query}" |
19 | json = JSON.parse(last_response.body) | 18 | json = JSON.parse(last_response.body) |
20 | assert_equal category.name, json["category"]["name"] | 19 | assert_equal category.name, json["category"]["name"] |
21 | end | 20 | end |
22 | 21 | ||
23 | - should 'list parent and children when get category by id' do | 22 | + should 'logged user list parent and children when get category by id' do |
23 | + login_api | ||
24 | parent = fast_create(Category, :environment_id => environment.id) | 24 | parent = fast_create(Category, :environment_id => environment.id) |
25 | child_1 = 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) | 26 | child_2 = fast_create(Category, :environment_id => environment.id) |
@@ -37,7 +37,8 @@ class CategoriesTest < ActiveSupport::TestCase | @@ -37,7 +37,8 @@ class CategoriesTest < ActiveSupport::TestCase | ||
37 | assert_equivalent [child_1.id, child_2.id], json['category']['children'].map { |c| c['id'] } | 37 | assert_equivalent [child_1.id, child_2.id], json['category']['children'].map { |c| c['id'] } |
38 | end | 38 | end |
39 | 39 | ||
40 | - should 'include parent in categories list if params is true' do | 40 | + should 'logged user include parent in categories list if params is true' do |
41 | + login_api | ||
41 | parent_1 = fast_create(Category, :environment_id => environment.id) # parent_1 has no parent category | 42 | 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_1 = fast_create(Category, :environment_id => environment.id) |
43 | child_2 = fast_create(Category, :environment_id => environment.id) | 44 | child_2 = fast_create(Category, :environment_id => environment.id) |
@@ -59,7 +60,8 @@ class CategoriesTest < ActiveSupport::TestCase | @@ -59,7 +60,8 @@ class CategoriesTest < ActiveSupport::TestCase | ||
59 | json["categories"].map { |c| c['parent'] && c['parent']['id'] } | 60 | json["categories"].map { |c| c['parent'] && c['parent']['id'] } |
60 | end | 61 | end |
61 | 62 | ||
62 | - should 'include children in categories list if params is true' do | 63 | + should 'logged user include children in categories list if params is true' do |
64 | + login_api | ||
63 | category = fast_create(Category, :environment_id => environment.id) | 65 | category = fast_create(Category, :environment_id => environment.id) |
64 | child_1 = fast_create(Category, :environment_id => environment.id) | 66 | child_1 = fast_create(Category, :environment_id => environment.id) |
65 | child_2 = fast_create(Category, :environment_id => environment.id) | 67 | child_2 = fast_create(Category, :environment_id => environment.id) |
@@ -86,7 +88,8 @@ class CategoriesTest < ActiveSupport::TestCase | @@ -86,7 +88,8 @@ class CategoriesTest < ActiveSupport::TestCase | ||
86 | expose_attributes = %w(id name full_name image display_color) | 88 | expose_attributes = %w(id name full_name image display_color) |
87 | 89 | ||
88 | expose_attributes.each do |attr| | 90 | expose_attributes.each do |attr| |
89 | - should "expose category #{attr} attribute by default" do | 91 | + should "logged user expose category #{attr} attribute by default" do |
92 | + login_api | ||
90 | category = fast_create(Category, :environment_id => environment.id) | 93 | category = fast_create(Category, :environment_id => environment.id) |
91 | get "/api/v1/categories/?#{params.to_query}" | 94 | get "/api/v1/categories/?#{params.to_query}" |
92 | json = JSON.parse(last_response.body) | 95 | json = JSON.parse(last_response.body) |
@@ -94,4 +97,98 @@ class CategoriesTest < ActiveSupport::TestCase | @@ -94,4 +97,98 @@ class CategoriesTest < ActiveSupport::TestCase | ||
94 | end | 97 | end |
95 | end | 98 | end |
96 | 99 | ||
100 | + should 'anonymous list categories' do | ||
101 | + anonymous_setup | ||
102 | + category = fast_create(Category, :environment_id => environment.id) | ||
103 | + get "/api/v1/categories/?#{params.to_query}" | ||
104 | + json = JSON.parse(last_response.body) | ||
105 | + assert_includes json["categories"].map { |c| c["name"] }, category.name | ||
106 | + end | ||
107 | + | ||
108 | + should 'anonymous get category by id' do | ||
109 | + anonymous_setup | ||
110 | + category = fast_create(Category, :environment_id => environment.id) | ||
111 | + get "/api/v1/categories/#{category.id}/?#{params.to_query}" | ||
112 | + json = JSON.parse(last_response.body) | ||
113 | + assert_equal category.name, json["category"]["name"] | ||
114 | + end | ||
115 | + | ||
116 | + should 'anonymous list parent and children when get category by id' do | ||
117 | + anonymous_setup | ||
118 | + parent = fast_create(Category, :environment_id => environment.id) | ||
119 | + child_1 = fast_create(Category, :environment_id => environment.id) | ||
120 | + child_2 = fast_create(Category, :environment_id => environment.id) | ||
121 | + | ||
122 | + category = fast_create(Category, :environment_id => environment.id) | ||
123 | + category.parent = parent | ||
124 | + category.children << child_1 | ||
125 | + category.children << child_2 | ||
126 | + category.save | ||
127 | + | ||
128 | + get "/api/v1/categories/#{category.id}/?#{params.to_query}" | ||
129 | + json = JSON.parse(last_response.body) | ||
130 | + assert_equal({'id' => parent.id, 'name' => parent.name, 'slug' => parent.slug}, json['category']['parent']) | ||
131 | + assert_equivalent [child_1.id, child_2.id], json['category']['children'].map { |c| c['id'] } | ||
132 | + end | ||
133 | + | ||
134 | + should 'anonymous include parent in categories list if params is true' do | ||
135 | + anonymous_setup | ||
136 | + parent_1 = fast_create(Category, :environment_id => environment.id) # parent_1 has no parent category | ||
137 | + child_1 = fast_create(Category, :environment_id => environment.id) | ||
138 | + child_2 = fast_create(Category, :environment_id => environment.id) | ||
139 | + | ||
140 | + parent_2 = fast_create(Category, :environment_id => environment.id) | ||
141 | + parent_2.parent = parent_1 | ||
142 | + parent_2.children << child_1 | ||
143 | + parent_2.children << child_2 | ||
144 | + parent_2.save | ||
145 | + | ||
146 | + get "/api/v1/categories/?#{params.to_query}" | ||
147 | + json = JSON.parse(last_response.body) | ||
148 | + assert_equal [nil], json['categories'].map { |c| c['parent'] }.uniq | ||
149 | + | ||
150 | + params[:include_parent] = true | ||
151 | + get "/api/v1/categories/?#{params.to_query}" | ||
152 | + json = JSON.parse(last_response.body) | ||
153 | + assert_equivalent [parent_1.parent, parent_2.parent.id, child_1.parent.id, child_2.parent.id], | ||
154 | + json["categories"].map { |c| c['parent'] && c['parent']['id'] } | ||
155 | + end | ||
156 | + | ||
157 | + should 'anonymous include children in categories list if params is true' do | ||
158 | + anonymous_setup | ||
159 | + category = fast_create(Category, :environment_id => environment.id) | ||
160 | + child_1 = fast_create(Category, :environment_id => environment.id) | ||
161 | + child_2 = fast_create(Category, :environment_id => environment.id) | ||
162 | + child_3 = fast_create(Category, :environment_id => environment.id) | ||
163 | + | ||
164 | + category.children << child_1 | ||
165 | + category.children << child_2 | ||
166 | + category.save | ||
167 | + | ||
168 | + child_1.children << child_3 | ||
169 | + child_1.save | ||
170 | + | ||
171 | + get "/api/v1/categories/?#{params.to_query}" | ||
172 | + json = JSON.parse(last_response.body) | ||
173 | + assert_equal [nil], json['categories'].map { |c| c['children'] }.uniq | ||
174 | + | ||
175 | + params[:include_children] = true | ||
176 | + get "/api/v1/categories/?#{params.to_query}" | ||
177 | + json = JSON.parse(last_response.body) | ||
178 | + 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], | ||
179 | + json["categories"].map{ |c| c['children'].map{ |child| child['id'] }.sort } | ||
180 | + end | ||
181 | + | ||
182 | + expose_attributes.each do |attr| | ||
183 | + should "anonymous expose category #{attr} attribute by default" do | ||
184 | + anonymous_setup | ||
185 | + category = fast_create(Category, :environment_id => environment.id) | ||
186 | + get "/api/v1/categories/?#{params.to_query}" | ||
187 | + json = JSON.parse(last_response.body) | ||
188 | + assert json["categories"].last.has_key?(attr) | ||
189 | + end | ||
190 | + end | ||
191 | + | ||
192 | + | ||
193 | + | ||
97 | end | 194 | end |
test/api/comments_test.rb
@@ -3,41 +3,44 @@ require_relative 'test_helper' | @@ -3,41 +3,44 @@ require_relative 'test_helper' | ||
3 | class CommentsTest < ActiveSupport::TestCase | 3 | class CommentsTest < ActiveSupport::TestCase |
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | - login_api | 6 | + @local_person = fast_create(Person) |
7 | + anonymous_setup | ||
7 | end | 8 | end |
9 | + attr_reader :local_person | ||
8 | 10 | ||
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) | 11 | + should 'logged user not list comments if user has no permission to view the source article' do |
12 | + login_api | ||
13 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing", :published => false) | ||
12 | assert !article.published? | 14 | assert !article.published? |
13 | 15 | ||
14 | get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | 16 | get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" |
15 | assert_equal 403, last_response.status | 17 | assert_equal 403, last_response.status |
16 | end | 18 | end |
17 | 19 | ||
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) | 20 | + should 'logged user not return comment if user has no permission to view the source article' do |
21 | + login_api | ||
22 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing", :published => false) | ||
23 | + comment = article.comments.create!(:body => "another comment", :author => local_person) | ||
22 | assert !article.published? | 24 | assert !article.published? |
23 | 25 | ||
24 | get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}" | 26 | get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}" |
25 | assert_equal 403, last_response.status | 27 | assert_equal 403, last_response.status |
26 | end | 28 | end |
27 | 29 | ||
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) | 30 | + should 'logged user not comment an article if user has no permission to view it' do |
31 | + login_api | ||
32 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing", :published => false) | ||
31 | assert !article.published? | 33 | assert !article.published? |
32 | 34 | ||
33 | post "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | 35 | post "/api/v1/articles/#{article.id}/comments?#{params.to_query}" |
34 | assert_equal 403, last_response.status | 36 | assert_equal 403, last_response.status |
35 | end | 37 | end |
36 | 38 | ||
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) | 39 | + should 'logged user return comments of an article' do |
40 | + login_api | ||
41 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") | ||
42 | + article.comments.create!(:body => "some comment", :author => local_person) | ||
43 | + article.comments.create!(:body => "another comment", :author => local_person) | ||
41 | 44 | ||
42 | get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | 45 | get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" |
43 | json = JSON.parse(last_response.body) | 46 | json = JSON.parse(last_response.body) |
@@ -45,9 +48,10 @@ class CommentsTest < ActiveSupport::TestCase | @@ -45,9 +48,10 @@ class CommentsTest < ActiveSupport::TestCase | ||
45 | assert_equal 2, json["comments"].length | 48 | assert_equal 2, json["comments"].length |
46 | end | 49 | end |
47 | 50 | ||
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 | + should 'logged user return comment of an article' do |
52 | + login_api | ||
53 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") | ||
54 | + comment = article.comments.create!(:body => "another comment", :author => local_person) | ||
51 | 55 | ||
52 | get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}" | 56 | get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}" |
53 | json = JSON.parse(last_response.body) | 57 | json = JSON.parse(last_response.body) |
@@ -55,8 +59,9 @@ class CommentsTest < ActiveSupport::TestCase | @@ -55,8 +59,9 @@ class CommentsTest < ActiveSupport::TestCase | ||
55 | assert_equal comment.id, json['comment']['id'] | 59 | assert_equal comment.id, json['comment']['id'] |
56 | end | 60 | end |
57 | 61 | ||
58 | - should 'comment an article' do | ||
59 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | 62 | + should 'logged user comment an article' do |
63 | + login_api | ||
64 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") | ||
60 | body = 'My comment' | 65 | body = 'My comment' |
61 | params.merge!({:body => body}) | 66 | params.merge!({:body => body}) |
62 | 67 | ||
@@ -66,7 +71,8 @@ class CommentsTest < ActiveSupport::TestCase | @@ -66,7 +71,8 @@ class CommentsTest < ActiveSupport::TestCase | ||
66 | assert_equal body, json['comment']['body'] | 71 | assert_equal body, json['comment']['body'] |
67 | end | 72 | end |
68 | 73 | ||
69 | - should 'not comment an archived article' do | 74 | + should 'logged user not comment an archived article' do |
75 | + login_api | ||
70 | article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing", :archived => true) | 76 | article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing", :archived => true) |
71 | body = 'My comment' | 77 | body = 'My comment' |
72 | params.merge!({:body => body}) | 78 | params.merge!({:body => body}) |
@@ -75,9 +81,10 @@ class CommentsTest < ActiveSupport::TestCase | @@ -75,9 +81,10 @@ class CommentsTest < ActiveSupport::TestCase | ||
75 | assert_equal 400, last_response.status | 81 | assert_equal 400, last_response.status |
76 | end | 82 | end |
77 | 83 | ||
78 | - should 'comment creation define the source' do | 84 | + should 'logged user comment creation define the source' do |
85 | + login_api | ||
79 | amount = Comment.count | 86 | amount = Comment.count |
80 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | 87 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") |
81 | body = 'My comment' | 88 | body = 'My comment' |
82 | params.merge!({:body => body}) | 89 | params.merge!({:body => body}) |
83 | 90 | ||
@@ -87,29 +94,6 @@ class CommentsTest < ActiveSupport::TestCase | @@ -87,29 +94,6 @@ class CommentsTest < ActiveSupport::TestCase | ||
87 | assert_not_nil comment.source | 94 | assert_not_nil comment.source |
88 | end | 95 | end |
89 | 96 | ||
90 | - should 'paginate comments' do | ||
91 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | ||
92 | - 5.times { article.comments.create!(:body => "some comment", :author => user.person) } | ||
93 | - params[:per_page] = 3 | ||
94 | - | ||
95 | - get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | ||
96 | - json = JSON.parse(last_response.body) | ||
97 | - assert_equal 200, last_response.status | ||
98 | - assert_equal 3, json["comments"].length | ||
99 | - end | ||
100 | - | ||
101 | - should 'return only root comments' do | ||
102 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | ||
103 | - comment1 = article.comments.create!(:body => "some comment", :author => user.person) | ||
104 | - comment2 = article.comments.create!(:body => "another comment", :author => user.person, :reply_of_id => comment1.id) | ||
105 | - params[:without_reply] = true | ||
106 | - | ||
107 | - get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | ||
108 | - json = JSON.parse(last_response.body) | ||
109 | - assert_equal 200, last_response.status | ||
110 | - assert_equal [comment1.id], json["comments"].map { |c| c['id'] } | ||
111 | - end | ||
112 | - | ||
113 | should 'call plugin hotspot to filter unavailable comments' do | 97 | should 'call plugin hotspot to filter unavailable comments' do |
114 | class Plugin1 < Noosfero::Plugin | 98 | class Plugin1 < Noosfero::Plugin |
115 | def unavailable_comments(scope) | 99 | def unavailable_comments(scope) |
@@ -119,7 +103,7 @@ class CommentsTest < ActiveSupport::TestCase | @@ -119,7 +103,7 @@ class CommentsTest < ActiveSupport::TestCase | ||
119 | Noosfero::Plugin.stubs(:all).returns([Plugin1.name]) | 103 | Noosfero::Plugin.stubs(:all).returns([Plugin1.name]) |
120 | Environment.default.enable_plugin(Plugin1) | 104 | Environment.default.enable_plugin(Plugin1) |
121 | 105 | ||
122 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | 106 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") |
123 | c1 = fast_create(Comment, source_id: article.id, body: "comment 1") | 107 | c1 = fast_create(Comment, source_id: article.id, body: "comment 1") |
124 | c2 = fast_create(Comment, source_id: article.id, body: "comment 2", :user_agent => 'Jack') | 108 | c2 = fast_create(Comment, source_id: article.id, body: "comment 2", :user_agent => 'Jack') |
125 | 109 | ||
@@ -128,13 +112,78 @@ class CommentsTest < ActiveSupport::TestCase | @@ -128,13 +112,78 @@ class CommentsTest < ActiveSupport::TestCase | ||
128 | assert_equal ["comment 2"], json["comments"].map {|c| c["body"]} | 112 | assert_equal ["comment 2"], json["comments"].map {|c| c["body"]} |
129 | end | 113 | end |
130 | 114 | ||
131 | - should 'do not return comments marked as spam' do | ||
132 | - article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") | 115 | + should 'anonymous do not return comments marked as spam' do |
116 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") | ||
133 | c1 = fast_create(Comment, source_id: article.id, body: "comment 1", spam: true) | 117 | c1 = fast_create(Comment, source_id: article.id, body: "comment 1", spam: true) |
134 | c2 = fast_create(Comment, source_id: article.id, body: "comment 2") | 118 | c2 = fast_create(Comment, source_id: article.id, body: "comment 2") |
135 | - | ||
136 | get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | 119 | get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" |
137 | json = JSON.parse(last_response.body) | 120 | json = JSON.parse(last_response.body) |
138 | assert_equal ["comment 2"], json["comments"].map {|c| c["body"]} | 121 | assert_equal ["comment 2"], json["comments"].map {|c| c["body"]} |
139 | end | 122 | end |
123 | + | ||
124 | + should 'not, anonymous list comments if has no permission to view the source article' do | ||
125 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing", :published => false) | ||
126 | + assert !article.published? | ||
127 | + | ||
128 | + get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | ||
129 | + assert_equal 403, last_response.status | ||
130 | + end | ||
131 | + | ||
132 | + should 'anonymous return comments of an article' do | ||
133 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") | ||
134 | + article.comments.create!(:body => "some comment", :author => local_person) | ||
135 | + article.comments.create!(:body => "another comment", :author => local_person) | ||
136 | + | ||
137 | + get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | ||
138 | + json = JSON.parse(last_response.body) | ||
139 | + assert_equal 200, last_response.status | ||
140 | + assert_equal 2, json["comments"].length | ||
141 | + end | ||
142 | + | ||
143 | + should 'anonymous return comment of an article' do | ||
144 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") | ||
145 | + comment = article.comments.create!(:body => "another comment", :author => local_person) | ||
146 | + | ||
147 | + get "/api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}" | ||
148 | + json = JSON.parse(last_response.body) | ||
149 | + assert_equal 200, last_response.status | ||
150 | + assert_equal comment.id, json['comment']['id'] | ||
151 | + end | ||
152 | + | ||
153 | + should 'not, anonymous comment an article (at least so far...)' do | ||
154 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") | ||
155 | + body = 'My comment' | ||
156 | + name = "John Doe" | ||
157 | + email = "JohnDoe@gmail.com" | ||
158 | + params.merge!({:body => body, name: name, email: email}) | ||
159 | + post "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | ||
160 | + json = JSON.parse(last_response.body) | ||
161 | + assert_equal 401, last_response.status | ||
162 | + end | ||
163 | + | ||
164 | + should 'logged user paginate comments' do | ||
165 | + login_api | ||
166 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") | ||
167 | + 5.times { article.comments.create!(:body => "some comment", :author => local_person) } | ||
168 | + params[:per_page] = 3 | ||
169 | + | ||
170 | + get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | ||
171 | + json = JSON.parse(last_response.body) | ||
172 | + assert_equal 200, last_response.status | ||
173 | + assert_equal 3, json["comments"].length | ||
174 | + end | ||
175 | + | ||
176 | + should 'logged user return only root comments' do | ||
177 | + login_api | ||
178 | + article = fast_create(Article, :profile_id => local_person.id, :name => "Some thing") | ||
179 | + comment1 = article.comments.create!(:body => "some comment", :author => local_person) | ||
180 | + comment2 = article.comments.create!(:body => "another comment", :author => local_person, :reply_of_id => comment1.id) | ||
181 | + params[:without_reply] = true | ||
182 | + | ||
183 | + get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" | ||
184 | + json = JSON.parse(last_response.body) | ||
185 | + assert_equal 200, last_response.status | ||
186 | + assert_equal [comment1.id], json["comments"].map { |c| c['id'] } | ||
187 | + end | ||
188 | + | ||
140 | end | 189 | end |
test/api/communities_test.rb
@@ -4,10 +4,10 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -4,10 +4,10 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | Community.delete_all | 6 | Community.delete_all |
7 | - login_api | ||
8 | end | 7 | end |
9 | 8 | ||
10 | - should 'list only communities' do | 9 | + should 'logged user list only communities' do |
10 | + login_api | ||
11 | community = fast_create(Community, :environment_id => environment.id) | 11 | community = fast_create(Community, :environment_id => environment.id) |
12 | enterprise = fast_create(Enterprise, :environment_id => environment.id) # should not list this enterprise | 12 | enterprise = fast_create(Enterprise, :environment_id => environment.id) # should not list this enterprise |
13 | get "/api/v1/communities?#{params.to_query}" | 13 | get "/api/v1/communities?#{params.to_query}" |
@@ -16,7 +16,8 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -16,7 +16,8 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
16 | assert_includes json['communities'].map {|c| c['id']}, community.id | 16 | assert_includes json['communities'].map {|c| c['id']}, community.id |
17 | end | 17 | end |
18 | 18 | ||
19 | - should 'list all communities' do | 19 | + should 'logged user list all communities' do |
20 | + login_api | ||
20 | community1 = fast_create(Community, :environment_id => environment.id, :public_profile => true) | 21 | community1 = fast_create(Community, :environment_id => environment.id, :public_profile => true) |
21 | community2 = fast_create(Community, :environment_id => environment.id) | 22 | community2 = fast_create(Community, :environment_id => environment.id) |
22 | get "/api/v1/communities?#{params.to_query}" | 23 | get "/api/v1/communities?#{params.to_query}" |
@@ -24,7 +25,8 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -24,7 +25,8 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
24 | assert_equivalent [community1.id, community2.id], json['communities'].map {|c| c['id']} | 25 | assert_equivalent [community1.id, community2.id], json['communities'].map {|c| c['id']} |
25 | end | 26 | end |
26 | 27 | ||
27 | - should 'not list invisible communities' do | 28 | + should 'not, logged user list invisible communities' do |
29 | + login_api | ||
28 | community1 = fast_create(Community, :environment_id => environment.id) | 30 | community1 = fast_create(Community, :environment_id => environment.id) |
29 | fast_create(Community, :environment_id => environment.id, :visible => false) | 31 | fast_create(Community, :environment_id => environment.id, :visible => false) |
30 | 32 | ||
@@ -33,16 +35,18 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -33,16 +35,18 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
33 | assert_equal [community1.id], json['communities'].map {|c| c['id']} | 35 | assert_equal [community1.id], json['communities'].map {|c| c['id']} |
34 | end | 36 | end |
35 | 37 | ||
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) | 38 | + should 'logged user list private communities' do |
39 | + login_api | ||
40 | + community1 = fast_create(Community, :environment_id => environment.id) | ||
41 | + community2 = fast_create(Community, :environment_id => environment.id, :public_profile => false) | ||
39 | 42 | ||
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 | + get "/api/v1/communities?#{params.to_query}" |
44 | + json = JSON.parse(last_response.body) | ||
45 | + assert_equivalent [community1.id, community2.id], json['communities'].map {|c| c['id']} | ||
43 | end | 46 | end |
44 | 47 | ||
45 | - should 'list private community for members' do | 48 | + should 'logged user list private community for members' do |
49 | + login_api | ||
46 | c1 = fast_create(Community, :environment_id => environment.id) | 50 | c1 = fast_create(Community, :environment_id => environment.id) |
47 | c2 = fast_create(Community, :environment_id => environment.id, :public_profile => false) | 51 | c2 = fast_create(Community, :environment_id => environment.id, :public_profile => false) |
48 | c2.add_member(person) | 52 | c2.add_member(person) |
@@ -52,20 +56,23 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -52,20 +56,23 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
52 | assert_equivalent [c1.id, c2.id], json['communities'].map {|c| c['id']} | 56 | assert_equivalent [c1.id, c2.id], json['communities'].map {|c| c['id']} |
53 | end | 57 | end |
54 | 58 | ||
55 | - should 'create a community' do | 59 | + should 'logged user create a community' do |
60 | + login_api | ||
56 | params[:community] = {:name => 'some'} | 61 | params[:community] = {:name => 'some'} |
57 | post "/api/v1/communities?#{params.to_query}" | 62 | post "/api/v1/communities?#{params.to_query}" |
58 | json = JSON.parse(last_response.body) | 63 | json = JSON.parse(last_response.body) |
59 | assert_equal 'some', json['community']['name'] | 64 | assert_equal 'some', json['community']['name'] |
60 | end | 65 | end |
61 | 66 | ||
62 | - should 'return 400 status for invalid community creation' do | 67 | + should 'logged user return 400 status for invalid community creation' do |
68 | + login_api | ||
63 | post "/api/v1/communities?#{params.to_query}" | 69 | post "/api/v1/communities?#{params.to_query}" |
64 | json = JSON.parse(last_response.body) | 70 | json = JSON.parse(last_response.body) |
65 | assert_equal 400, last_response.status | 71 | assert_equal 400, last_response.status |
66 | end | 72 | end |
67 | 73 | ||
68 | - should 'get community' do | 74 | + should 'logged user get community' do |
75 | + login_api | ||
69 | community = fast_create(Community, :environment_id => environment.id) | 76 | community = fast_create(Community, :environment_id => environment.id) |
70 | 77 | ||
71 | get "/api/v1/communities/#{community.id}?#{params.to_query}" | 78 | get "/api/v1/communities/#{community.id}?#{params.to_query}" |
@@ -73,7 +80,8 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -73,7 +80,8 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
73 | assert_equal community.id, json['community']['id'] | 80 | assert_equal community.id, json['community']['id'] |
74 | end | 81 | end |
75 | 82 | ||
76 | - should 'not get invisible community' do | 83 | + should 'not, logged user get invisible community' do |
84 | + login_api | ||
77 | community = fast_create(Community, :environment_id => environment.id, :visible => false) | 85 | community = fast_create(Community, :environment_id => environment.id, :visible => false) |
78 | 86 | ||
79 | get "/api/v1/communities/#{community.id}?#{params.to_query}" | 87 | get "/api/v1/communities/#{community.id}?#{params.to_query}" |
@@ -81,7 +89,8 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -81,7 +89,8 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
81 | assert json['community'].blank? | 89 | assert json['community'].blank? |
82 | end | 90 | end |
83 | 91 | ||
84 | - should 'not get private communities without permission' do | 92 | + should 'not, logged user get private communities without permission' do |
93 | + login_api | ||
85 | community = fast_create(Community, :environment_id => environment.id) | 94 | community = fast_create(Community, :environment_id => environment.id) |
86 | fast_create(Community, :environment_id => environment.id, :public_profile => false) | 95 | fast_create(Community, :environment_id => environment.id, :public_profile => false) |
87 | 96 | ||
@@ -90,17 +99,18 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -90,17 +99,18 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
90 | assert_equal community.id, json['community']['id'] | 99 | assert_equal community.id, json['community']['id'] |
91 | end | 100 | end |
92 | 101 | ||
93 | - should 'get private community for members' do | 102 | + should 'logged user get private community for members' do |
103 | + login_api | ||
94 | community = fast_create(Community, :environment_id => environment.id, :public_profile => false, :visible => true) | 104 | community = fast_create(Community, :environment_id => environment.id, :public_profile => false, :visible => true) |
95 | community.add_member(person) | 105 | community.add_member(person) |
96 | 106 | ||
97 | - | ||
98 | get "/api/v1/communities/#{community.id}?#{params.to_query}" | 107 | get "/api/v1/communities/#{community.id}?#{params.to_query}" |
99 | json = JSON.parse(last_response.body) | 108 | json = JSON.parse(last_response.body) |
100 | assert_equal community.id, json['community']['id'] | 109 | assert_equal community.id, json['community']['id'] |
101 | end | 110 | end |
102 | 111 | ||
103 | - should 'list person communities' do | 112 | + should 'logged user list person communities' do |
113 | + login_api | ||
104 | community = fast_create(Community, :environment_id => environment.id) | 114 | community = fast_create(Community, :environment_id => environment.id) |
105 | fast_create(Community, :environment_id => environment.id) | 115 | fast_create(Community, :environment_id => environment.id) |
106 | community.add_member(person) | 116 | community.add_member(person) |
@@ -110,7 +120,8 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -110,7 +120,8 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
110 | assert_equivalent [community.id], json['communities'].map {|c| c['id']} | 120 | assert_equivalent [community.id], json['communities'].map {|c| c['id']} |
111 | end | 121 | end |
112 | 122 | ||
113 | - should 'not list person communities invisible' do | 123 | + should 'not, logged user list person communities invisible' do |
124 | + login_api | ||
114 | c1 = fast_create(Community, :environment_id => environment.id) | 125 | c1 = fast_create(Community, :environment_id => environment.id) |
115 | c2 = fast_create(Community, :environment_id => environment.id, :visible => false) | 126 | c2 = fast_create(Community, :environment_id => environment.id, :visible => false) |
116 | c1.add_member(person) | 127 | c1.add_member(person) |
@@ -121,7 +132,8 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -121,7 +132,8 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
121 | assert_equivalent [c1.id], json['communities'].map {|c| c['id']} | 132 | assert_equivalent [c1.id], json['communities'].map {|c| c['id']} |
122 | end | 133 | end |
123 | 134 | ||
124 | - should 'list communities with pagination' do | 135 | + should 'logged user list communities with pagination' do |
136 | + login_api | ||
125 | community1 = fast_create(Community, :public_profile => true, :created_at => 1.day.ago) | 137 | community1 = fast_create(Community, :public_profile => true, :created_at => 1.day.ago) |
126 | community2 = fast_create(Community, :created_at => 2.days.ago) | 138 | community2 = fast_create(Community, :created_at => 2.days.ago) |
127 | 139 | ||
@@ -143,7 +155,118 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -143,7 +155,118 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
143 | assert_not_includes json_page_two["communities"].map { |a| a["id"] }, community1.id | 155 | assert_not_includes json_page_two["communities"].map { |a| a["id"] }, community1.id |
144 | end | 156 | end |
145 | 157 | ||
146 | - should 'list communities with timestamp' do | 158 | + should 'logged user list communities with timestamp' do |
159 | + login_api | ||
160 | + community1 = fast_create(Community, :public_profile => true) | ||
161 | + community2 = fast_create(Community) | ||
162 | + | ||
163 | + community1.updated_at = Time.now + 3.hours | ||
164 | + community1.save! | ||
165 | + | ||
166 | + params[:timestamp] = Time.now + 1.hours | ||
167 | + get "/api/v1/communities/?#{params.to_query}" | ||
168 | + json = JSON.parse(last_response.body) | ||
169 | + | ||
170 | + assert_includes json["communities"].map { |a| a["id"] }, community1.id | ||
171 | + assert_not_includes json["communities"].map { |a| a["id"] }, community2.id | ||
172 | + end | ||
173 | + | ||
174 | + should 'anonymous list only communities' do | ||
175 | + anonymous_setup | ||
176 | + community = fast_create(Community, :environment_id => environment.id) | ||
177 | + enterprise = fast_create(Enterprise, :environment_id => environment.id) # should not list this enterprise | ||
178 | + get "/api/v1/communities?#{params.to_query}" | ||
179 | + json = JSON.parse(last_response.body) | ||
180 | + assert_not_includes json['communities'].map {|c| c['id']}, enterprise.id | ||
181 | + assert_includes json['communities'].map {|c| c['id']}, community.id | ||
182 | + end | ||
183 | + | ||
184 | + should 'anonymous list all communities' do | ||
185 | + anonymous_setup | ||
186 | + community1 = fast_create(Community, :environment_id => environment.id, :public_profile => true) | ||
187 | + community2 = fast_create(Community, :environment_id => environment.id) | ||
188 | + get "/api/v1/communities?#{params.to_query}" | ||
189 | + json = JSON.parse(last_response.body) | ||
190 | + assert_equivalent [community1.id, community2.id], json['communities'].map {|c| c['id']} | ||
191 | + end | ||
192 | + | ||
193 | + should 'not, anonymous list invisible communities' do | ||
194 | + anonymous_setup | ||
195 | + community1 = fast_create(Community, :environment_id => environment.id) | ||
196 | + fast_create(Community, :environment_id => environment.id, :visible => false) | ||
197 | + | ||
198 | + get "/api/v1/communities?#{params.to_query}" | ||
199 | + json = JSON.parse(last_response.body) | ||
200 | + assert_equal [community1.id], json['communities'].map {|c| c['id']} | ||
201 | + end | ||
202 | + | ||
203 | + should 'anonymous list private communities' do | ||
204 | + anonymous_setup | ||
205 | + community1 = fast_create(Community, :environment_id => environment.id) | ||
206 | + community2 = fast_create(Community, :environment_id => environment.id, :public_profile => false) | ||
207 | + | ||
208 | + get "/api/v1/communities?#{params.to_query}" | ||
209 | + json = JSON.parse(last_response.body) | ||
210 | + assert_equivalent [community1.id, community2.id], json['communities'].map {|c| c['id']} | ||
211 | + end | ||
212 | + | ||
213 | + should 'not, anonymous create a community' do | ||
214 | + anonymous_setup | ||
215 | + params[:community] = {:name => 'some'} | ||
216 | + post "/api/v1/communities?#{params.to_query}" | ||
217 | + json = JSON.parse(last_response.body) | ||
218 | + assert_equal 401, last_response.status | ||
219 | + end | ||
220 | + | ||
221 | + should 'anonymous get community' do | ||
222 | + anonymous_setup | ||
223 | + community = fast_create(Community, :environment_id => environment.id) | ||
224 | + get "/api/v1/communities/#{community.id}" | ||
225 | + json = JSON.parse(last_response.body) | ||
226 | + assert_equal community.id, json['community']['id'] | ||
227 | + end | ||
228 | + | ||
229 | + should 'not, anonymous get invisible community' do | ||
230 | + anonymous_setup | ||
231 | + community = fast_create(Community, :environment_id => environment.id, :visible => false) | ||
232 | + get "/api/v1/communities/#{community.id}" | ||
233 | + json = JSON.parse(last_response.body) | ||
234 | + assert json['community'].blank? | ||
235 | + end | ||
236 | + | ||
237 | + should 'not, anonymous get private communities' do | ||
238 | + anonymous_setup | ||
239 | + community = fast_create(Community, :environment_id => environment.id) | ||
240 | + fast_create(Community, :environment_id => environment.id, :public_profile => false) | ||
241 | + get "/api/v1/communities/#{community.id}" | ||
242 | + json = JSON.parse(last_response.body) | ||
243 | + assert_equal community.id, json['community']['id'] | ||
244 | + end | ||
245 | + | ||
246 | + should 'anonymous list communities with pagination' do | ||
247 | + anonymous_setup | ||
248 | + community1 = fast_create(Community, :public_profile => true, :created_at => 1.day.ago) | ||
249 | + community2 = fast_create(Community, :created_at => 2.days.ago) | ||
250 | + | ||
251 | + params[:page] = 2 | ||
252 | + params[:per_page] = 1 | ||
253 | + get "/api/v1/communities?#{params.to_query}" | ||
254 | + json_page_two = JSON.parse(last_response.body) | ||
255 | + | ||
256 | + params[:page] = 1 | ||
257 | + params[:per_page] = 1 | ||
258 | + get "/api/v1/communities?#{params.to_query}" | ||
259 | + json_page_one = JSON.parse(last_response.body) | ||
260 | + | ||
261 | + assert_includes json_page_one["communities"].map { |a| a["id"] }, community1.id | ||
262 | + assert_not_includes json_page_one["communities"].map { |a| a["id"] }, community2.id | ||
263 | + | ||
264 | + assert_includes json_page_two["communities"].map { |a| a["id"] }, community2.id | ||
265 | + assert_not_includes json_page_two["communities"].map { |a| a["id"] }, community1.id | ||
266 | + end | ||
267 | + | ||
268 | + should 'anonymous list communities with timestamp' do | ||
269 | + anonymous_setup | ||
147 | community1 = fast_create(Community, :public_profile => true) | 270 | community1 = fast_create(Community, :public_profile => true) |
148 | community2 = fast_create(Community) | 271 | community2 = fast_create(Community) |
149 | 272 | ||
@@ -157,4 +280,31 @@ class CommunitiesTest < ActiveSupport::TestCase | @@ -157,4 +280,31 @@ class CommunitiesTest < ActiveSupport::TestCase | ||
157 | assert_includes json["communities"].map { |a| a["id"] }, community1.id | 280 | assert_includes json["communities"].map { |a| a["id"] }, community1.id |
158 | assert_not_includes json["communities"].map { |a| a["id"] }, community2.id | 281 | assert_not_includes json["communities"].map { |a| a["id"] }, community2.id |
159 | end | 282 | end |
283 | + | ||
284 | + should 'display public custom fields to anonymous' do | ||
285 | + anonymous_setup | ||
286 | + CustomField.create!(:name => "Rating", :format => "string", :customized_type => "Community", :active => true, :environment => Environment.default) | ||
287 | + some_community = fast_create(Community) | ||
288 | + some_community.custom_values = { "Rating" => { "value" => "Five stars", "public" => "true"} } | ||
289 | + some_community.save! | ||
290 | + | ||
291 | + get "/api/v1/communities/#{some_community.id}?#{params.to_query}" | ||
292 | + json = JSON.parse(last_response.body) | ||
293 | + assert json['community']['additional_data'].has_key?('Rating') | ||
294 | + assert_equal "Five stars", json['community']['additional_data']['Rating'] | ||
295 | + end | ||
296 | + | ||
297 | + should 'not display private custom fields to anonymous' do | ||
298 | + anonymous_setup | ||
299 | + CustomField.create!(:name => "Rating", :format => "string", :customized_type => "Community", :active => true, :environment => Environment.default) | ||
300 | + some_community = fast_create(Community) | ||
301 | + some_community.custom_values = { "Rating" => { "value" => "Five stars", "public" => "false"} } | ||
302 | + some_community.save! | ||
303 | + | ||
304 | + get "/api/v1/communities/#{some_community.id}?#{params.to_query}" | ||
305 | + json = JSON.parse(last_response.body) | ||
306 | + refute json['community']['additional_data'].has_key?('Rating') | ||
307 | + end | ||
308 | + | ||
309 | + | ||
160 | end | 310 | end |
test/api/enterprises_test.rb
@@ -4,10 +4,20 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -4,10 +4,20 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | Enterprise.delete_all | 6 | Enterprise.delete_all |
7 | + end | ||
8 | + | ||
9 | + should 'logger user list only enterprises' do | ||
7 | login_api | 10 | login_api |
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 | ||
8 | end | 17 | end |
9 | 18 | ||
10 | - should 'list only enterprises' do | 19 | + should 'anonymous list only enterprises' do |
20 | + anonymous_setup | ||
11 | community = fast_create(Community, :environment_id => environment.id) # should not list this community | 21 | 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) | 22 | enterprise = fast_create(Enterprise, :environment_id => environment.id, :public_profile => true) |
13 | get "/api/v1/enterprises?#{params.to_query}" | 23 | get "/api/v1/enterprises?#{params.to_query}" |
@@ -16,7 +26,17 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -16,7 +26,17 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
16 | assert_not_includes json['enterprises'].map {|c| c['id']}, community.id | 26 | assert_not_includes json['enterprises'].map {|c| c['id']}, community.id |
17 | end | 27 | end |
18 | 28 | ||
19 | - should 'list all enterprises' do | 29 | + should 'anonymous list all enterprises' do |
30 | + anonymous_setup | ||
31 | + enterprise1 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => true) | ||
32 | + enterprise2 = fast_create(Enterprise, :environment_id => environment.id) | ||
33 | + get "/api/v1/enterprises?#{params.to_query}" | ||
34 | + json = JSON.parse(last_response.body) | ||
35 | + assert_equivalent [enterprise1.id, enterprise2.id], json['enterprises'].map {|c| c['id']} | ||
36 | + end | ||
37 | + | ||
38 | + should 'logger user list all enterprises' do | ||
39 | + login_api | ||
20 | enterprise1 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => true) | 40 | enterprise1 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => true) |
21 | enterprise2 = fast_create(Enterprise, :environment_id => environment.id) | 41 | enterprise2 = fast_create(Enterprise, :environment_id => environment.id) |
22 | get "/api/v1/enterprises?#{params.to_query}" | 42 | get "/api/v1/enterprises?#{params.to_query}" |
@@ -25,6 +45,7 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -25,6 +45,7 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
25 | end | 45 | end |
26 | 46 | ||
27 | should 'not list invisible enterprises' do | 47 | should 'not list invisible enterprises' do |
48 | + login_api | ||
28 | enterprise1 = fast_create(Enterprise, :environment_id => environment.id) | 49 | enterprise1 = fast_create(Enterprise, :environment_id => environment.id) |
29 | fast_create(Enterprise, :visible => false) | 50 | fast_create(Enterprise, :visible => false) |
30 | 51 | ||
@@ -33,16 +54,48 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -33,16 +54,48 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
33 | assert_equal [enterprise1.id], json['enterprises'].map {|c| c['id']} | 54 | assert_equal [enterprise1.id], json['enterprises'].map {|c| c['id']} |
34 | end | 55 | end |
35 | 56 | ||
36 | - should 'not list private enterprises without permission' do | 57 | + should 'not, anonymous list invisible enterprises' do |
58 | + anonymous_setup | ||
37 | enterprise1 = fast_create(Enterprise, :environment_id => environment.id) | 59 | enterprise1 = fast_create(Enterprise, :environment_id => environment.id) |
38 | - fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | 60 | + fast_create(Enterprise, :visible => false) |
61 | + | ||
62 | + get "/api/v1/enterprises?#{params.to_query}" | ||
63 | + json = JSON.parse(last_response.body) | ||
64 | + assert_equal [enterprise1.id], json['enterprises'].map {|c| c['id']} | ||
65 | + end | ||
66 | + | ||
67 | + should 'not, logger user list invisible enterprises' do | ||
68 | + login_api | ||
69 | + enterprise1 = fast_create(Enterprise, :environment_id => environment.id) | ||
70 | + fast_create(Enterprise, :visible => false) | ||
39 | 71 | ||
40 | get "/api/v1/enterprises?#{params.to_query}" | 72 | get "/api/v1/enterprises?#{params.to_query}" |
41 | json = JSON.parse(last_response.body) | 73 | json = JSON.parse(last_response.body) |
42 | assert_equal [enterprise1.id], json['enterprises'].map {|c| c['id']} | 74 | assert_equal [enterprise1.id], json['enterprises'].map {|c| c['id']} |
43 | end | 75 | end |
44 | 76 | ||
45 | - should 'list private enterprise for members' do | 77 | + should 'anonymous list private enterprises' do |
78 | + anonymous_setup | ||
79 | + enterprise1 = fast_create(Enterprise, :environment_id => environment.id) | ||
80 | + enterprise2 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | ||
81 | + | ||
82 | + get "/api/v1/enterprises?#{params.to_query}" | ||
83 | + json = JSON.parse(last_response.body) | ||
84 | + assert_equivalent [enterprise1.id, enterprise2.id], json['enterprises'].map {|c| c['id']} | ||
85 | + end | ||
86 | + | ||
87 | + should 'logged user list private enterprises' do | ||
88 | + login_api | ||
89 | + enterprise1 = fast_create(Enterprise, :environment_id => environment.id) | ||
90 | + enterprise2 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | ||
91 | + | ||
92 | + get "/api/v1/enterprises?#{params.to_query}" | ||
93 | + json = JSON.parse(last_response.body) | ||
94 | + assert_equivalent [enterprise1.id, enterprise2.id], json['enterprises'].map {|c| c['id']} | ||
95 | + end | ||
96 | + | ||
97 | + should 'logged user list private enterprise for members' do | ||
98 | + login_api | ||
46 | c1 = fast_create(Enterprise, :environment_id => environment.id) | 99 | c1 = fast_create(Enterprise, :environment_id => environment.id) |
47 | c2 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | 100 | c2 = fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) |
48 | c2.add_member(person) | 101 | c2.add_member(person) |
@@ -52,7 +105,17 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -52,7 +105,17 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
52 | assert_equivalent [c1.id, c2.id], json['enterprises'].map {|c| c['id']} | 105 | assert_equivalent [c1.id, c2.id], json['enterprises'].map {|c| c['id']} |
53 | end | 106 | end |
54 | 107 | ||
55 | - should 'get enterprise' do | 108 | + should 'anonymous get enterprise' do |
109 | + anonymous_setup | ||
110 | + enterprise = fast_create(Enterprise, :environment_id => environment.id) | ||
111 | + | ||
112 | + get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | ||
113 | + json = JSON.parse(last_response.body) | ||
114 | + assert_equal enterprise.id, json['enterprise']['id'] | ||
115 | + end | ||
116 | + | ||
117 | + should 'logged user get enterprise' do | ||
118 | + login_api | ||
56 | enterprise = fast_create(Enterprise, :environment_id => environment.id) | 119 | enterprise = fast_create(Enterprise, :environment_id => environment.id) |
57 | 120 | ||
58 | get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | 121 | get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" |
@@ -60,7 +123,17 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -60,7 +123,17 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
60 | assert_equal enterprise.id, json['enterprise']['id'] | 123 | assert_equal enterprise.id, json['enterprise']['id'] |
61 | end | 124 | end |
62 | 125 | ||
63 | - should 'not get invisible enterprise' do | 126 | + should 'not, logger user get invisible enterprise' do |
127 | + login_api | ||
128 | + enterprise = fast_create(Enterprise, :visible => false) | ||
129 | + | ||
130 | + get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | ||
131 | + json = JSON.parse(last_response.body) | ||
132 | + assert json['enterprise'].blank? | ||
133 | + end | ||
134 | + | ||
135 | + should 'not, anonymous get invisible enterprise' do | ||
136 | + anonymous_setup | ||
64 | enterprise = fast_create(Enterprise, :visible => false) | 137 | enterprise = fast_create(Enterprise, :visible => false) |
65 | 138 | ||
66 | get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | 139 | get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" |
@@ -69,6 +142,17 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -69,6 +142,17 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
69 | end | 142 | end |
70 | 143 | ||
71 | should 'not get private enterprises without permission' do | 144 | should 'not get private enterprises without permission' do |
145 | + login_api | ||
146 | + enterprise = fast_create(Enterprise, :environment_id => environment.id) | ||
147 | + fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | ||
148 | + | ||
149 | + get "/api/v1/enterprises/#{enterprise.id}?#{params.to_query}" | ||
150 | + json = JSON.parse(last_response.body) | ||
151 | + assert_equal enterprise.id, json['enterprise']['id'] | ||
152 | + end | ||
153 | + | ||
154 | + should 'not, anonymous get private enterprises' do | ||
155 | + anonymous_setup | ||
72 | enterprise = fast_create(Enterprise, :environment_id => environment.id) | 156 | enterprise = fast_create(Enterprise, :environment_id => environment.id) |
73 | fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) | 157 | fast_create(Enterprise, :environment_id => environment.id, :public_profile => false) |
74 | 158 | ||
@@ -78,6 +162,7 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -78,6 +162,7 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
78 | end | 162 | end |
79 | 163 | ||
80 | should 'get private enterprise for members' do | 164 | should 'get private enterprise for members' do |
165 | + login_api | ||
81 | enterprise = fast_create(Enterprise, :public_profile => false) | 166 | enterprise = fast_create(Enterprise, :public_profile => false) |
82 | enterprise.add_member(person) | 167 | enterprise.add_member(person) |
83 | 168 | ||
@@ -87,6 +172,7 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -87,6 +172,7 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
87 | end | 172 | end |
88 | 173 | ||
89 | should 'list person enterprises' do | 174 | should 'list person enterprises' do |
175 | + login_api | ||
90 | enterprise = fast_create(Enterprise, :environment_id => environment.id) | 176 | enterprise = fast_create(Enterprise, :environment_id => environment.id) |
91 | fast_create(Enterprise, :environment_id => environment.id) | 177 | fast_create(Enterprise, :environment_id => environment.id) |
92 | enterprise.add_member(person) | 178 | enterprise.add_member(person) |
@@ -97,6 +183,7 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -97,6 +183,7 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
97 | end | 183 | end |
98 | 184 | ||
99 | should 'not list person enterprises invisible' do | 185 | should 'not list person enterprises invisible' do |
186 | + login_api | ||
100 | c1 = fast_create(Enterprise, :environment_id => environment.id) | 187 | c1 = fast_create(Enterprise, :environment_id => environment.id) |
101 | c2 = fast_create(Enterprise, :environment_id => environment.id, :visible => false) | 188 | c2 = fast_create(Enterprise, :environment_id => environment.id, :visible => false) |
102 | c1.add_member(person) | 189 | c1.add_member(person) |
@@ -107,4 +194,29 @@ class EnterprisesTest < ActiveSupport::TestCase | @@ -107,4 +194,29 @@ class EnterprisesTest < ActiveSupport::TestCase | ||
107 | assert_equivalent [c1.id], json['enterprises'].map {|c| c['id']} | 194 | assert_equivalent [c1.id], json['enterprises'].map {|c| c['id']} |
108 | end | 195 | end |
109 | 196 | ||
197 | + should 'display public custom fields to anonymous' do | ||
198 | + anonymous_setup | ||
199 | + CustomField.create!(:name => "Rating", :format => "string", :customized_type => "Enterprise", :active => true, :environment => Environment.default) | ||
200 | + some_enterprise = fast_create(Enterprise) | ||
201 | + some_enterprise.custom_values = { "Rating" => { "value" => "Five stars", "public" => "true"} } | ||
202 | + some_enterprise.save! | ||
203 | + | ||
204 | + get "/api/v1/enterprises/#{some_enterprise.id}?#{params.to_query}" | ||
205 | + json = JSON.parse(last_response.body) | ||
206 | + assert json['enterprise']['additional_data'].has_key?('Rating') | ||
207 | + assert_equal "Five stars", json['enterprise']['additional_data']['Rating'] | ||
208 | + end | ||
209 | + | ||
210 | + should 'not display public custom fields to anonymous' do | ||
211 | + anonymous_setup | ||
212 | + CustomField.create!(:name => "Rating", :format => "string", :customized_type => "Enterprise", :active => true, :environment => Environment.default) | ||
213 | + some_enterprise = fast_create(Enterprise) | ||
214 | + some_enterprise.custom_values = { "Rating" => { "value" => "Five stars", "public" => "false"} } | ||
215 | + some_enterprise.save! | ||
216 | + | ||
217 | + get "/api/v1/enterprises/#{some_enterprise.id}?#{params.to_query}" | ||
218 | + json = JSON.parse(last_response.body) | ||
219 | + refute json['enterprise']['additional_data'].has_key?('Rating') | ||
220 | + end | ||
221 | + | ||
110 | end | 222 | end |
test/api/helpers_test.rb
@@ -167,6 +167,10 @@ class APIHelpersTest < ActiveSupport::TestCase | @@ -167,6 +167,10 @@ class APIHelpersTest < ActiveSupport::TestCase | ||
167 | assert_nil make_conditions_with_parameter[:type] | 167 | assert_nil make_conditions_with_parameter[:type] |
168 | end | 168 | end |
169 | 169 | ||
170 | + should 'make_conditions_with_parameter return archived parameter if archived was defined' do | ||
171 | + assert_not_nil make_conditions_with_parameter('archived' => true)[:archived] | ||
172 | + end | ||
173 | + | ||
170 | #test_should_make_order_with_parameters_return_order_if attribute_is_found_at_object_association | 174 | #test_should_make_order_with_parameters_return_order_if attribute_is_found_at_object_association |
171 | should 'make_order_with_parameters return order if attribute is found at object association' do | 175 | should 'make_order_with_parameters return order if attribute is found at object association' do |
172 | environment = Environment.new | 176 | environment = Environment.new |
test/api/people_test.rb
@@ -4,10 +4,10 @@ class PeopleTest < ActiveSupport::TestCase | @@ -4,10 +4,10 @@ class PeopleTest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | Person.delete_all | 6 | Person.delete_all |
7 | - login_api | ||
8 | end | 7 | end |
9 | 8 | ||
10 | - should 'list all people' do | 9 | + should 'logged user list all people' do |
10 | + login_api | ||
11 | person1 = fast_create(Person, :public_profile => true) | 11 | person1 = fast_create(Person, :public_profile => true) |
12 | person2 = fast_create(Person) | 12 | person2 = fast_create(Person) |
13 | get "/api/v1/people?#{params.to_query}" | 13 | get "/api/v1/people?#{params.to_query}" |
@@ -15,7 +15,31 @@ class PeopleTest < ActiveSupport::TestCase | @@ -15,7 +15,31 @@ class PeopleTest < ActiveSupport::TestCase | ||
15 | assert_equivalent [person1.id, person2.id, person.id], json['people'].map {|c| c['id']} | 15 | assert_equivalent [person1.id, person2.id, person.id], json['people'].map {|c| c['id']} |
16 | end | 16 | end |
17 | 17 | ||
18 | - should 'list all members of a community' do | 18 | + should 'anonymous list all people' do |
19 | + anonymous_setup | ||
20 | + person1 = fast_create(Person, :public_profile => true) | ||
21 | + person2 = fast_create(Person) | ||
22 | + get "/api/v1/people?#{params.to_query}" | ||
23 | + json = JSON.parse(last_response.body) | ||
24 | + assert_equivalent [person1.id, person2.id], json['people'].map {|c| c['id']} | ||
25 | + end | ||
26 | + | ||
27 | + should 'logged user list all members of a community' do | ||
28 | + login_api | ||
29 | + person1 = fast_create(Person) | ||
30 | + person2 = fast_create(Person) | ||
31 | + community = fast_create(Community) | ||
32 | + community.add_member(person1) | ||
33 | + community.add_member(person2) | ||
34 | + | ||
35 | + get "/api/v1/profiles/#{community.id}/members?#{params.to_query}" | ||
36 | + json = JSON.parse(last_response.body) | ||
37 | + assert_equal 2, json["people"].count | ||
38 | + assert_equivalent [person1.id,person2.id], json["people"].map{|p| p["id"]} | ||
39 | + end | ||
40 | + | ||
41 | + should 'anonymous list all members of a community' do | ||
42 | + anonymous_setup | ||
19 | person1 = fast_create(Person) | 43 | person1 = fast_create(Person) |
20 | person2 = fast_create(Person) | 44 | person2 = fast_create(Person) |
21 | community = fast_create(Community) | 45 | community = fast_create(Community) |
@@ -28,21 +52,40 @@ class PeopleTest < ActiveSupport::TestCase | @@ -28,21 +52,40 @@ class PeopleTest < ActiveSupport::TestCase | ||
28 | assert_equivalent [person1.id,person2.id], json["people"].map{|p| p["id"]} | 52 | assert_equivalent [person1.id,person2.id], json["people"].map{|p| p["id"]} |
29 | end | 53 | end |
30 | 54 | ||
31 | - should 'not list invisible people' do | 55 | + should 'logged user not list invisible people' do |
56 | + login_api | ||
57 | + invisible_person = fast_create(Person, :visible => false) | ||
58 | + | ||
59 | + get "/api/v1/people?#{params.to_query}" | ||
60 | + assert_not_includes json_response_ids(:people), invisible_person.id | ||
61 | + end | ||
62 | + | ||
63 | + should 'annoymous not list invisible people' do | ||
64 | + anonymous_setup | ||
32 | invisible_person = fast_create(Person, :visible => false) | 65 | invisible_person = fast_create(Person, :visible => false) |
33 | 66 | ||
34 | get "/api/v1/people?#{params.to_query}" | 67 | get "/api/v1/people?#{params.to_query}" |
35 | assert_not_includes json_response_ids(:people), invisible_person.id | 68 | assert_not_includes json_response_ids(:people), invisible_person.id |
36 | end | 69 | end |
37 | 70 | ||
38 | - should 'not list private people without permission' do | 71 | + should 'logged user list private people' do |
72 | + login_api | ||
39 | private_person = fast_create(Person, :public_profile => false) | 73 | private_person = fast_create(Person, :public_profile => false) |
40 | 74 | ||
41 | get "/api/v1/people?#{params.to_query}" | 75 | get "/api/v1/people?#{params.to_query}" |
42 | - assert_not_includes json_response_ids(:people), private_person.id | 76 | + assert_includes json_response_ids(:people), private_person.id |
43 | end | 77 | end |
44 | 78 | ||
45 | - should 'list private person for friends' do | 79 | + should 'anonymous list private people' do |
80 | + anonymous_setup | ||
81 | + private_person = fast_create(Person, :public_profile => false) | ||
82 | + | ||
83 | + get "/api/v1/people?#{params.to_query}" | ||
84 | + assert_includes json_response_ids(:people), private_person.id | ||
85 | + end | ||
86 | + | ||
87 | + should 'logged user list private person for friends' do | ||
88 | + login_api | ||
46 | p1 = fast_create(Person) | 89 | p1 = fast_create(Person) |
47 | p2 = fast_create(Person, :public_profile => false) | 90 | p2 = fast_create(Person, :public_profile => false) |
48 | person.add_friend(p2) | 91 | person.add_friend(p2) |
@@ -52,7 +95,8 @@ class PeopleTest < ActiveSupport::TestCase | @@ -52,7 +95,8 @@ class PeopleTest < ActiveSupport::TestCase | ||
52 | assert_includes json_response_ids(:people), p2.id | 95 | assert_includes json_response_ids(:people), p2.id |
53 | end | 96 | end |
54 | 97 | ||
55 | - should 'get person' do | 98 | + should 'logged user get person' do |
99 | + login_api | ||
56 | some_person = fast_create(Person) | 100 | some_person = fast_create(Person) |
57 | 101 | ||
58 | get "/api/v1/people/#{some_person.id}?#{params.to_query}" | 102 | get "/api/v1/people/#{some_person.id}?#{params.to_query}" |
@@ -60,14 +104,26 @@ class PeopleTest < ActiveSupport::TestCase | @@ -60,14 +104,26 @@ class PeopleTest < ActiveSupport::TestCase | ||
60 | assert_equal some_person.id, json['person']['id'] | 104 | assert_equal some_person.id, json['person']['id'] |
61 | end | 105 | end |
62 | 106 | ||
63 | - should 'people endpoint filter by fields parameter' do | 107 | + should 'anonymous get person' do |
108 | + anonymous_setup | ||
109 | + some_person = fast_create(Person) | ||
110 | + | ||
111 | + get "/api/v1/people/#{some_person.id}?#{params.to_query}" | ||
112 | + json = JSON.parse(last_response.body) | ||
113 | + assert_equal some_person.id, json['person']['id'] | ||
114 | + end | ||
115 | + | ||
116 | + | ||
117 | + should 'people endpoint filter by fields parameter for logged user' do | ||
118 | + login_api | ||
64 | get "/api/v1/people?#{params.to_query}&fields=name" | 119 | get "/api/v1/people?#{params.to_query}&fields=name" |
65 | json = JSON.parse(last_response.body) | 120 | json = JSON.parse(last_response.body) |
66 | expected = {'people' => [{'name' => person.name}]} | 121 | expected = {'people' => [{'name' => person.name}]} |
67 | assert_equal expected, json | 122 | assert_equal expected, json |
68 | end | 123 | end |
69 | 124 | ||
70 | - should 'people endpoint filter by fields parameter with hierarchy' do | 125 | + should 'people endpoint filter by fields parameter with hierarchy for logged user' do |
126 | + login_api | ||
71 | fields = URI.encode({only: [:name, {user: [:login]}]}.to_json.to_str) | 127 | fields = URI.encode({only: [:name, {user: [:login]}]}.to_json.to_str) |
72 | get "/api/v1/people?#{params.to_query}&fields=#{fields}" | 128 | get "/api/v1/people?#{params.to_query}&fields=#{fields}" |
73 | json = JSON.parse(last_response.body) | 129 | json = JSON.parse(last_response.body) |
@@ -76,19 +132,22 @@ class PeopleTest < ActiveSupport::TestCase | @@ -76,19 +132,22 @@ class PeopleTest < ActiveSupport::TestCase | ||
76 | end | 132 | end |
77 | 133 | ||
78 | should 'get logged person' do | 134 | should 'get logged person' do |
135 | + login_api | ||
79 | get "/api/v1/people/me?#{params.to_query}" | 136 | get "/api/v1/people/me?#{params.to_query}" |
80 | json = JSON.parse(last_response.body) | 137 | json = JSON.parse(last_response.body) |
81 | assert_equal person.id, json['person']['id'] | 138 | assert_equal person.id, json['person']['id'] |
82 | end | 139 | end |
83 | 140 | ||
84 | - should 'me endpoint filter by fields parameter' do | 141 | + should 'access me endpoint filter by fields parameter' do |
142 | + login_api | ||
85 | get "/api/v1/people/me?#{params.to_query}&fields=name" | 143 | get "/api/v1/people/me?#{params.to_query}&fields=name" |
86 | json = JSON.parse(last_response.body) | 144 | json = JSON.parse(last_response.body) |
87 | expected = {'person' => {'name' => person.name}} | 145 | expected = {'person' => {'name' => person.name}} |
88 | assert_equal expected, json | 146 | assert_equal expected, json |
89 | end | 147 | end |
90 | 148 | ||
91 | - should 'not get invisible person' do | 149 | + should 'logged user not get invisible person' do |
150 | + login_api | ||
92 | person = fast_create(Person, :visible => false) | 151 | person = fast_create(Person, :visible => false) |
93 | 152 | ||
94 | get "/api/v1/people/#{person.id}?#{params.to_query}" | 153 | get "/api/v1/people/#{person.id}?#{params.to_query}" |
@@ -96,15 +155,35 @@ class PeopleTest < ActiveSupport::TestCase | @@ -96,15 +155,35 @@ class PeopleTest < ActiveSupport::TestCase | ||
96 | assert json['person'].blank? | 155 | assert json['person'].blank? |
97 | end | 156 | end |
98 | 157 | ||
99 | - should 'not get private people without permission' do | 158 | + should 'anonymous not get invisible person' do |
159 | + anonymous_setup | ||
160 | + person = fast_create(Person, :visible => false) | ||
161 | + | ||
162 | + get "/api/v1/people/#{person.id}?#{params.to_query}" | ||
163 | + json = JSON.parse(last_response.body) | ||
164 | + assert json['person'].blank? | ||
165 | + end | ||
166 | + | ||
167 | + should 'get private people' do | ||
168 | + login_api | ||
100 | private_person = fast_create(Person, :public_profile => false) | 169 | private_person = fast_create(Person, :public_profile => false) |
101 | 170 | ||
102 | get "/api/v1/people/#{private_person.id}?#{params.to_query}" | 171 | get "/api/v1/people/#{private_person.id}?#{params.to_query}" |
103 | json = JSON.parse(last_response.body) | 172 | json = JSON.parse(last_response.body) |
104 | - assert json['person'].blank? | 173 | + assert_equal json['person']['id'], private_person.id |
174 | + end | ||
175 | + | ||
176 | + should 'anonymous get private people' do | ||
177 | + anonymous_setup | ||
178 | + private_person = fast_create(Person, :public_profile => false) | ||
179 | + | ||
180 | + get "/api/v1/people/#{private_person.id}?#{params.to_query}" | ||
181 | + json = JSON.parse(last_response.body) | ||
182 | + assert_equal json['person']['id'], private_person.id | ||
105 | end | 183 | end |
106 | 184 | ||
107 | should 'get private person for friends' do | 185 | should 'get private person for friends' do |
186 | + login_api | ||
108 | private_person = fast_create(Person, :public_profile => false) | 187 | private_person = fast_create(Person, :public_profile => false) |
109 | person.add_friend(private_person) | 188 | person.add_friend(private_person) |
110 | private_person.add_friend(person) | 189 | private_person.add_friend(person) |
@@ -115,15 +194,26 @@ class PeopleTest < ActiveSupport::TestCase | @@ -115,15 +194,26 @@ class PeopleTest < ActiveSupport::TestCase | ||
115 | end | 194 | end |
116 | 195 | ||
117 | should 'list person friends' do | 196 | should 'list person friends' do |
197 | + login_api | ||
118 | friend = fast_create(Person) | 198 | friend = fast_create(Person) |
119 | person.add_friend(friend) | 199 | person.add_friend(friend) |
120 | friend.add_friend(person) | 200 | friend.add_friend(person) |
201 | + get "/api/v1/people/#{friend.id}/friends?#{params.to_query}" | ||
202 | + assert_includes json_response_ids(:people), person.id | ||
203 | + end | ||
121 | 204 | ||
205 | + should 'anonymous list person friends' do | ||
206 | + anonymous_setup | ||
207 | + person = fast_create(Person) | ||
208 | + friend = fast_create(Person) | ||
209 | + person.add_friend(friend) | ||
210 | + friend.add_friend(person) | ||
122 | get "/api/v1/people/#{friend.id}/friends?#{params.to_query}" | 211 | get "/api/v1/people/#{friend.id}/friends?#{params.to_query}" |
123 | assert_includes json_response_ids(:people), person.id | 212 | assert_includes json_response_ids(:people), person.id |
124 | end | 213 | end |
125 | 214 | ||
126 | should 'not list person invisible friends' do | 215 | should 'not list person invisible friends' do |
216 | + login_api | ||
127 | friend = fast_create(Person) | 217 | friend = fast_create(Person) |
128 | invisible_friend = fast_create(Person, :visible => false) | 218 | invisible_friend = fast_create(Person, :visible => false) |
129 | person.add_friend(friend) | 219 | person.add_friend(friend) |
@@ -138,6 +228,7 @@ class PeopleTest < ActiveSupport::TestCase | @@ -138,6 +228,7 @@ class PeopleTest < ActiveSupport::TestCase | ||
138 | end | 228 | end |
139 | 229 | ||
140 | should 'create a person' do | 230 | should 'create a person' do |
231 | + login_api | ||
141 | login = 'some' | 232 | login = 'some' |
142 | params[:person] = {:login => login, :password => '123456', :password_confirmation => '123456', :email => 'some@some.com'} | 233 | params[:person] = {:login => login, :password => '123456', :password_confirmation => '123456', :email => 'some@some.com'} |
143 | post "/api/v1/people?#{params.to_query}" | 234 | post "/api/v1/people?#{params.to_query}" |
@@ -146,6 +237,7 @@ class PeopleTest < ActiveSupport::TestCase | @@ -146,6 +237,7 @@ class PeopleTest < ActiveSupport::TestCase | ||
146 | end | 237 | end |
147 | 238 | ||
148 | should 'return 400 status for invalid person creation' do | 239 | should 'return 400 status for invalid person creation' do |
240 | + login_api | ||
149 | params[:person] = {:login => 'some'} | 241 | params[:person] = {:login => 'some'} |
150 | post "/api/v1/people?#{params.to_query}" | 242 | post "/api/v1/people?#{params.to_query}" |
151 | json = JSON.parse(last_response.body) | 243 | json = JSON.parse(last_response.body) |
@@ -153,6 +245,7 @@ class PeopleTest < ActiveSupport::TestCase | @@ -153,6 +245,7 @@ class PeopleTest < ActiveSupport::TestCase | ||
153 | end | 245 | end |
154 | 246 | ||
155 | should 'display permissions' do | 247 | should 'display permissions' do |
248 | + login_api | ||
156 | community = fast_create(Community) | 249 | community = fast_create(Community) |
157 | community.add_member(fast_create(Person)) | 250 | community.add_member(fast_create(Person)) |
158 | community.add_member(person) | 251 | community.add_member(person) |
@@ -164,11 +257,13 @@ class PeopleTest < ActiveSupport::TestCase | @@ -164,11 +257,13 @@ class PeopleTest < ActiveSupport::TestCase | ||
164 | end | 257 | end |
165 | 258 | ||
166 | should 'display permissions if self' do | 259 | should 'display permissions if self' do |
260 | + login_api | ||
167 | get "/api/v1/people/#{person.id}/permissions?#{params.to_query}" | 261 | get "/api/v1/people/#{person.id}/permissions?#{params.to_query}" |
168 | assert_equal 200, last_response.status | 262 | assert_equal 200, last_response.status |
169 | end | 263 | end |
170 | 264 | ||
171 | should 'display permissions if admin' do | 265 | should 'display permissions if admin' do |
266 | + login_api | ||
172 | environment = person.environment | 267 | environment = person.environment |
173 | environment.add_admin(person) | 268 | environment.add_admin(person) |
174 | some_person = fast_create(Person) | 269 | some_person = fast_create(Person) |
@@ -178,6 +273,7 @@ class PeopleTest < ActiveSupport::TestCase | @@ -178,6 +273,7 @@ class PeopleTest < ActiveSupport::TestCase | ||
178 | end | 273 | end |
179 | 274 | ||
180 | should 'not display permissions if not admin or self' do | 275 | should 'not display permissions if not admin or self' do |
276 | + login_api | ||
181 | some_person = create_user('some-person').person | 277 | some_person = create_user('some-person').person |
182 | 278 | ||
183 | get "/api/v1/people/#{some_person.id}/permissions?#{params.to_query}" | 279 | get "/api/v1/people/#{some_person.id}/permissions?#{params.to_query}" |
@@ -185,12 +281,14 @@ class PeopleTest < ActiveSupport::TestCase | @@ -185,12 +281,14 @@ class PeopleTest < ActiveSupport::TestCase | ||
185 | end | 281 | end |
186 | 282 | ||
187 | should 'not update another person' do | 283 | should 'not update another person' do |
284 | + login_api | ||
188 | person = fast_create(Person, :environment_id => environment.id) | 285 | person = fast_create(Person, :environment_id => environment.id) |
189 | post "/api/v1/people/#{person.id}?#{params.to_query}" | 286 | post "/api/v1/people/#{person.id}?#{params.to_query}" |
190 | assert_equal 403, last_response.status | 287 | assert_equal 403, last_response.status |
191 | end | 288 | end |
192 | 289 | ||
193 | should 'update yourself' do | 290 | should 'update yourself' do |
291 | + login_api | ||
194 | another_name = 'Another Name' | 292 | another_name = 'Another Name' |
195 | params[:person] = {} | 293 | params[:person] = {} |
196 | params[:person][:name] = another_name | 294 | params[:person][:name] = another_name |
@@ -200,7 +298,33 @@ class PeopleTest < ActiveSupport::TestCase | @@ -200,7 +298,33 @@ class PeopleTest < ActiveSupport::TestCase | ||
200 | assert_equal another_name, person.name | 298 | assert_equal another_name, person.name |
201 | end | 299 | end |
202 | 300 | ||
203 | - should 'display public custom fields' do | 301 | + should 'logged user display public custom fields' do |
302 | + login_api | ||
303 | + CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | ||
304 | + some_person = create_user('some-person').person | ||
305 | + some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "true"} } | ||
306 | + some_person.save! | ||
307 | + | ||
308 | + get "/api/v1/people/#{some_person.id}?#{params.to_query}" | ||
309 | + json = JSON.parse(last_response.body) | ||
310 | + assert json['person']['additional_data'].has_key?('Custom Blog') | ||
311 | + assert_equal "www.blog.org", json['person']['additional_data']['Custom Blog'] | ||
312 | + end | ||
313 | + | ||
314 | + should 'logged user not display non-public custom fields' do | ||
315 | + login_api | ||
316 | + CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | ||
317 | + some_person = create_user('some-person').person | ||
318 | + some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "0"} } | ||
319 | + some_person.save! | ||
320 | + | ||
321 | + get "/api/v1/people/#{some_person.id}?#{params.to_query}" | ||
322 | + json = JSON.parse(last_response.body) | ||
323 | + assert_equal json['person']['additional_data'], {} | ||
324 | + end | ||
325 | + | ||
326 | + should 'display public custom fields to anonymous' do | ||
327 | + anonymous_setup | ||
204 | CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | 328 | CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) |
205 | some_person = create_user('some-person').person | 329 | some_person = create_user('some-person').person |
206 | some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "true"} } | 330 | some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "true"} } |
@@ -212,7 +336,8 @@ class PeopleTest < ActiveSupport::TestCase | @@ -212,7 +336,8 @@ class PeopleTest < ActiveSupport::TestCase | ||
212 | assert_equal "www.blog.org", json['person']['additional_data']['Custom Blog'] | 336 | assert_equal "www.blog.org", json['person']['additional_data']['Custom Blog'] |
213 | end | 337 | end |
214 | 338 | ||
215 | - should 'not display non-public custom fields' do | 339 | + should 'not display non-public custom fields to anonymous' do |
340 | + anonymous_setup | ||
216 | CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | 341 | CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) |
217 | some_person = create_user('some-person').person | 342 | some_person = create_user('some-person').person |
218 | some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "0"} } | 343 | some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "0"} } |
@@ -223,7 +348,19 @@ class PeopleTest < ActiveSupport::TestCase | @@ -223,7 +348,19 @@ class PeopleTest < ActiveSupport::TestCase | ||
223 | assert_equal json['person']['additional_data'], {} | 348 | assert_equal json['person']['additional_data'], {} |
224 | end | 349 | end |
225 | 350 | ||
351 | + should 'hide private fields to anonymous' do | ||
352 | + anonymous_setup | ||
353 | + target_person = create_user('some-user').person | ||
354 | + target_person.save! | ||
355 | + | ||
356 | + get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | ||
357 | + json = JSON.parse(last_response.body) | ||
358 | + refute json["user"].has_key?("permissions") | ||
359 | + refute json["user"].has_key?("activated") | ||
360 | + end | ||
361 | + | ||
226 | should 'display non-public custom fields to friend' do | 362 | should 'display non-public custom fields to friend' do |
363 | + login_api | ||
227 | CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) | 364 | CustomField.create!(:name => "Custom Blog", :format => "string", :customized_type => "Person", :active => true, :environment => Environment.default) |
228 | some_person = create_user('some-person').person | 365 | some_person = create_user('some-person').person |
229 | some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "0"} } | 366 | some_person.custom_values = { "Custom Blog" => { "value" => "www.blog.org", "public" => "0"} } |
@@ -245,12 +382,14 @@ class PeopleTest < ActiveSupport::TestCase | @@ -245,12 +382,14 @@ class PeopleTest < ActiveSupport::TestCase | ||
245 | PERSON_ATTRIBUTES.map do |attribute| | 382 | PERSON_ATTRIBUTES.map do |attribute| |
246 | 383 | ||
247 | define_method "test_should_not_expose_#{attribute}_attribute_in_person_enpoint_if_field_parameter_does_not_contain_the_attribute" do | 384 | define_method "test_should_not_expose_#{attribute}_attribute_in_person_enpoint_if_field_parameter_does_not_contain_the_attribute" do |
385 | + login_api | ||
248 | get "/api/v1/people/me?#{params.to_query}&fields=name" | 386 | get "/api/v1/people/me?#{params.to_query}&fields=name" |
249 | json = JSON.parse(last_response.body) | 387 | json = JSON.parse(last_response.body) |
250 | assert_nil json['person'][attribute] | 388 | assert_nil json['person'][attribute] |
251 | end | 389 | end |
252 | 390 | ||
253 | define_method "test_should_expose_#{attribute}_attribute_in_person_enpoints_if_field_parameter_is_passed" do | 391 | define_method "test_should_expose_#{attribute}_attribute_in_person_enpoints_if_field_parameter_is_passed" do |
392 | + login_api | ||
254 | get "/api/v1/people/me?#{params.to_query}&fields=#{attribute}" | 393 | get "/api/v1/people/me?#{params.to_query}&fields=#{attribute}" |
255 | json = JSON.parse(last_response.body) | 394 | json = JSON.parse(last_response.body) |
256 | assert_not_nil json['person'][attribute] | 395 | assert_not_nil json['person'][attribute] |
test/api/profiles_test.rb
@@ -4,10 +4,10 @@ class ProfilesTest < ActiveSupport::TestCase | @@ -4,10 +4,10 @@ class ProfilesTest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | Profile.delete_all | 6 | Profile.delete_all |
7 | - login_api | ||
8 | end | 7 | end |
9 | 8 | ||
10 | - should 'list all profiles' do | 9 | + should 'logged user list all profiles' do |
10 | + login_api | ||
11 | person1 = fast_create(Person) | 11 | person1 = fast_create(Person) |
12 | person2 = fast_create(Person) | 12 | person2 = fast_create(Person) |
13 | community = fast_create(Community) | 13 | community = fast_create(Community) |
@@ -16,14 +16,16 @@ class ProfilesTest < ActiveSupport::TestCase | @@ -16,14 +16,16 @@ class ProfilesTest < ActiveSupport::TestCase | ||
16 | assert_equivalent [person.id, person1.id, person2.id, community.id], json.map {|p| p['id']} | 16 | assert_equivalent [person.id, person1.id, person2.id, community.id], json.map {|p| p['id']} |
17 | end | 17 | end |
18 | 18 | ||
19 | - should 'get person from profile id' do | 19 | + should 'logged user get person from profile id' do |
20 | + login_api | ||
20 | some_person = fast_create(Person) | 21 | some_person = fast_create(Person) |
21 | get "/api/v1/profiles/#{some_person.id}?#{params.to_query}" | 22 | get "/api/v1/profiles/#{some_person.id}?#{params.to_query}" |
22 | json = JSON.parse(last_response.body) | 23 | json = JSON.parse(last_response.body) |
23 | assert_equal some_person.id, json['id'] | 24 | assert_equal some_person.id, json['id'] |
24 | end | 25 | end |
25 | 26 | ||
26 | - should 'get community from profile id' do | 27 | + should 'logged user get community from profile id' do |
28 | + login_api | ||
27 | community = fast_create(Community) | 29 | community = fast_create(Community) |
28 | get "/api/v1/profiles/#{community.id}?#{params.to_query}" | 30 | get "/api/v1/profiles/#{community.id}?#{params.to_query}" |
29 | json = JSON.parse(last_response.body) | 31 | json = JSON.parse(last_response.body) |
@@ -33,6 +35,7 @@ class ProfilesTest < ActiveSupport::TestCase | @@ -33,6 +35,7 @@ class ProfilesTest < ActiveSupport::TestCase | ||
33 | group_kinds = %w(community enterprise) | 35 | group_kinds = %w(community enterprise) |
34 | group_kinds.each do |kind| | 36 | group_kinds.each do |kind| |
35 | should "delete #{kind} from profile id with permission" do | 37 | should "delete #{kind} from profile id with permission" do |
38 | + login_api | ||
36 | profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | 39 | profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) |
37 | give_permission(@person, 'destroy_profile', profile) | 40 | give_permission(@person, 'destroy_profile', profile) |
38 | assert_not_nil Profile.find_by_id profile.id | 41 | assert_not_nil Profile.find_by_id profile.id |
@@ -44,6 +47,7 @@ class ProfilesTest < ActiveSupport::TestCase | @@ -44,6 +47,7 @@ class ProfilesTest < ActiveSupport::TestCase | ||
44 | end | 47 | end |
45 | 48 | ||
46 | should "not delete #{kind} from profile id without permission" do | 49 | should "not delete #{kind} from profile id without permission" do |
50 | + login_api | ||
47 | profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | 51 | profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) |
48 | assert_not_nil Profile.find_by_id profile.id | 52 | assert_not_nil Profile.find_by_id profile.id |
49 | 53 | ||
@@ -55,12 +59,14 @@ class ProfilesTest < ActiveSupport::TestCase | @@ -55,12 +59,14 @@ class ProfilesTest < ActiveSupport::TestCase | ||
55 | end | 59 | end |
56 | 60 | ||
57 | should 'person delete itself' do | 61 | should 'person delete itself' do |
62 | + login_api | ||
58 | delete "/api/v1/profiles/#{@person.id}?#{params.to_query}" | 63 | delete "/api/v1/profiles/#{@person.id}?#{params.to_query}" |
59 | assert_equal 200, last_response.status | 64 | assert_equal 200, last_response.status |
60 | assert_nil Profile.find_by_id @person.id | 65 | assert_nil Profile.find_by_id @person.id |
61 | end | 66 | end |
62 | 67 | ||
63 | should 'only admin delete other people' do | 68 | should 'only admin delete other people' do |
69 | + login_api | ||
64 | profile = fast_create(Person, :environment_id => environment.id) | 70 | profile = fast_create(Person, :environment_id => environment.id) |
65 | assert_not_nil Profile.find_by_id profile.id | 71 | assert_not_nil Profile.find_by_id profile.id |
66 | 72 | ||
@@ -77,4 +83,62 @@ class ProfilesTest < ActiveSupport::TestCase | @@ -77,4 +83,62 @@ class ProfilesTest < ActiveSupport::TestCase | ||
77 | assert_nil Profile.find_by_id profile.id | 83 | assert_nil Profile.find_by_id profile.id |
78 | 84 | ||
79 | end | 85 | end |
86 | + | ||
87 | + should 'anonymous user access delete action' do | ||
88 | + anonymous_setup | ||
89 | + profile = fast_create(Person, :environment_id => environment.id) | ||
90 | + | ||
91 | + delete "/api/v1/profiles/#{profile.id}?#{params.to_query}" | ||
92 | + assert_equal 401, last_response.status | ||
93 | + assert_not_nil Profile.find_by_id profile.id | ||
94 | + end | ||
95 | + | ||
96 | + should 'anonymous list all profiles' do | ||
97 | + person1 = fast_create(Person) | ||
98 | + person2 = fast_create(Person) | ||
99 | + community = fast_create(Community) | ||
100 | + get "/api/v1/profiles" | ||
101 | + json = JSON.parse(last_response.body) | ||
102 | + assert_equivalent [person1.id, person2.id, community.id], json.map {|p| p['id']} | ||
103 | + end | ||
104 | + | ||
105 | + should 'anonymous get person from profile id' do | ||
106 | + some_person = fast_create(Person) | ||
107 | + get "/api/v1/profiles/#{some_person.id}" | ||
108 | + json = JSON.parse(last_response.body) | ||
109 | + assert_equal some_person.id, json['id'] | ||
110 | + end | ||
111 | + | ||
112 | + should 'anonymous get community from profile id' do | ||
113 | + community = fast_create(Community) | ||
114 | + get "/api/v1/profiles/#{community.id}" | ||
115 | + json = JSON.parse(last_response.body) | ||
116 | + assert_equal community.id, json['id'] | ||
117 | + end | ||
118 | + | ||
119 | + should 'display public custom fields to anonymous' do | ||
120 | + anonymous_setup | ||
121 | + CustomField.create!(:name => "Rating", :format => "string", :customized_type => "Profile", :active => true, :environment => Environment.default) | ||
122 | + some_profile = fast_create(Profile) | ||
123 | + some_profile.custom_values = { "Rating" => { "value" => "Five stars", "public" => "true"} } | ||
124 | + some_profile.save! | ||
125 | + | ||
126 | + get "/api/v1/profiles/#{some_profile.id}?#{params.to_query}" | ||
127 | + json = JSON.parse(last_response.body) | ||
128 | + assert json['additional_data'].has_key?('Rating') | ||
129 | + assert_equal "Five stars", json['additional_data']['Rating'] | ||
130 | + end | ||
131 | + | ||
132 | + should 'not display private custom fields to anonymous' do | ||
133 | + anonymous_setup | ||
134 | + CustomField.create!(:name => "Rating", :format => "string", :customized_type => "Profile", :active => true, :environment => Environment.default) | ||
135 | + some_profile = fast_create(Profile) | ||
136 | + some_profile.custom_values = { "Rating" => { "value" => "Five stars", "public" => "false"} } | ||
137 | + some_profile.save! | ||
138 | + | ||
139 | + get "/api/v1/profiles/#{some_profile.id}?#{params.to_query}" | ||
140 | + json = JSON.parse(last_response.body) | ||
141 | + refute json.has_key?('Rating') | ||
142 | + end | ||
143 | + | ||
80 | end | 144 | end |
test/api/test_helper.rb
@@ -62,6 +62,12 @@ class ActiveSupport::TestCase | @@ -62,6 +62,12 @@ class ActiveSupport::TestCase | ||
62 | 62 | ||
63 | @params = {:private_token => @private_token} | 63 | @params = {:private_token => @private_token} |
64 | end | 64 | end |
65 | + | ||
66 | + def anonymous_setup | ||
67 | + @environment = Environment.default | ||
68 | + @params = {} | ||
69 | + end | ||
70 | + | ||
65 | attr_accessor :private_token, :user, :person, :params, :environment | 71 | attr_accessor :private_token, :user, :person, :params, :environment |
66 | 72 | ||
67 | private | 73 | private |
test/api/users_test.rb
@@ -3,23 +3,22 @@ require_relative 'test_helper' | @@ -3,23 +3,22 @@ require_relative 'test_helper' | ||
3 | 3 | ||
4 | class UsersTest < ActiveSupport::TestCase | 4 | class UsersTest < ActiveSupport::TestCase |
5 | 5 | ||
6 | - def setup | 6 | + should 'logger user list users' do |
7 | login_api | 7 | login_api |
8 | - end | ||
9 | - | ||
10 | - should 'list users' do | ||
11 | get "/api/v1/users/?#{params.to_query}" | 8 | get "/api/v1/users/?#{params.to_query}" |
12 | json = JSON.parse(last_response.body) | 9 | json = JSON.parse(last_response.body) |
13 | assert_includes json["users"].map { |a| a["login"] }, user.login | 10 | assert_includes json["users"].map { |a| a["login"] }, user.login |
14 | end | 11 | end |
15 | 12 | ||
16 | - should 'get user' do | 13 | + should 'logger user get user info' do |
14 | + login_api | ||
17 | get "/api/v1/users/#{user.id}?#{params.to_query}" | 15 | get "/api/v1/users/#{user.id}?#{params.to_query}" |
18 | json = JSON.parse(last_response.body) | 16 | json = JSON.parse(last_response.body) |
19 | assert_equal user.id, json['user']['id'] | 17 | assert_equal user.id, json['user']['id'] |
20 | end | 18 | end |
21 | 19 | ||
22 | - should 'list user permissions' do | 20 | + should 'logger user list user permissions' do |
21 | + login_api | ||
23 | community = fast_create(Community) | 22 | community = fast_create(Community) |
24 | community.add_admin(person) | 23 | community.add_admin(person) |
25 | get "/api/v1/users/#{user.id}/?#{params.to_query}" | 24 | get "/api/v1/users/#{user.id}/?#{params.to_query}" |
@@ -28,25 +27,29 @@ class UsersTest < ActiveSupport::TestCase | @@ -28,25 +27,29 @@ class UsersTest < ActiveSupport::TestCase | ||
28 | end | 27 | end |
29 | 28 | ||
30 | should 'get logged user' do | 29 | should 'get logged user' do |
30 | + login_api | ||
31 | get "/api/v1/users/me?#{params.to_query}" | 31 | get "/api/v1/users/me?#{params.to_query}" |
32 | json = JSON.parse(last_response.body) | 32 | json = JSON.parse(last_response.body) |
33 | assert_equal user.id, json['user']['id'] | 33 | assert_equal user.id, json['user']['id'] |
34 | end | 34 | end |
35 | 35 | ||
36 | should 'not show permissions to logged user' do | 36 | should 'not show permissions to logged user' do |
37 | + login_api | ||
37 | target_person = create_user('some-user').person | 38 | target_person = create_user('some-user').person |
38 | get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | 39 | get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" |
39 | json = JSON.parse(last_response.body) | 40 | json = JSON.parse(last_response.body) |
40 | refute json["user"].has_key?("permissions") | 41 | refute json["user"].has_key?("permissions") |
41 | end | 42 | end |
42 | 43 | ||
43 | - should 'show permissions to self' do | 44 | + should 'logger user show permissions to self' do |
45 | + login_api | ||
44 | get "/api/v1/users/#{user.id}/?#{params.to_query}" | 46 | get "/api/v1/users/#{user.id}/?#{params.to_query}" |
45 | json = JSON.parse(last_response.body) | 47 | json = JSON.parse(last_response.body) |
46 | assert json["user"].has_key?("permissions") | 48 | assert json["user"].has_key?("permissions") |
47 | end | 49 | end |
48 | 50 | ||
49 | should 'not show permissions to friend' do | 51 | should 'not show permissions to friend' do |
52 | + login_api | ||
50 | target_person = create_user('some-user').person | 53 | target_person = create_user('some-user').person |
51 | 54 | ||
52 | f = Friendship.new | 55 | f = Friendship.new |
@@ -60,6 +63,7 @@ class UsersTest < ActiveSupport::TestCase | @@ -60,6 +63,7 @@ class UsersTest < ActiveSupport::TestCase | ||
60 | end | 63 | end |
61 | 64 | ||
62 | should 'not show private attribute to logged user' do | 65 | should 'not show private attribute to logged user' do |
66 | + login_api | ||
63 | target_person = create_user('some-user').person | 67 | target_person = create_user('some-user').person |
64 | get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | 68 | get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" |
65 | json = JSON.parse(last_response.body) | 69 | json = JSON.parse(last_response.body) |
@@ -67,6 +71,7 @@ class UsersTest < ActiveSupport::TestCase | @@ -67,6 +71,7 @@ class UsersTest < ActiveSupport::TestCase | ||
67 | end | 71 | end |
68 | 72 | ||
69 | should 'show private attr to friend' do | 73 | should 'show private attr to friend' do |
74 | + login_api | ||
70 | target_person = create_user('some-user').person | 75 | target_person = create_user('some-user').person |
71 | f = Friendship.new | 76 | f = Friendship.new |
72 | f.friend = target_person | 77 | f.friend = target_person |
@@ -79,6 +84,7 @@ class UsersTest < ActiveSupport::TestCase | @@ -79,6 +84,7 @@ class UsersTest < ActiveSupport::TestCase | ||
79 | end | 84 | end |
80 | 85 | ||
81 | should 'show public attribute to logged user' do | 86 | should 'show public attribute to logged user' do |
87 | + login_api | ||
82 | target_person = create_user('some-user').person | 88 | target_person = create_user('some-user').person |
83 | target_person.fields_privacy={:email=> 'public'} | 89 | target_person.fields_privacy={:email=> 'public'} |
84 | target_person.save! | 90 | target_person.save! |
@@ -89,6 +95,7 @@ class UsersTest < ActiveSupport::TestCase | @@ -89,6 +95,7 @@ class UsersTest < ActiveSupport::TestCase | ||
89 | end | 95 | end |
90 | 96 | ||
91 | should 'show public and private field to admin' do | 97 | should 'show public and private field to admin' do |
98 | + login_api | ||
92 | Environment.default.add_admin(person) | 99 | Environment.default.add_admin(person) |
93 | 100 | ||
94 | target_person = create_user('some-user').person | 101 | target_person = create_user('some-user').person |
@@ -102,4 +109,26 @@ class UsersTest < ActiveSupport::TestCase | @@ -102,4 +109,26 @@ class UsersTest < ActiveSupport::TestCase | ||
102 | assert json["user"].has_key?("activated") | 109 | assert json["user"].has_key?("activated") |
103 | end | 110 | end |
104 | 111 | ||
112 | + should 'show public fields to anonymous' do | ||
113 | + anonymous_setup | ||
114 | + target_person = create_user('some-user').person | ||
115 | + target_person.fields_privacy={:email=> 'public'} | ||
116 | + target_person.save! | ||
117 | + | ||
118 | + get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | ||
119 | + json = JSON.parse(last_response.body) | ||
120 | + assert json["user"].has_key?("email") | ||
121 | + end | ||
122 | + | ||
123 | + should 'hide private fields to anonymous' do | ||
124 | + anonymous_setup | ||
125 | + target_person = create_user('some-user').person | ||
126 | + target_person.save! | ||
127 | + | ||
128 | + get "/api/v1/users/#{target_person.user.id}/?#{params.to_query}" | ||
129 | + json = JSON.parse(last_response.body) | ||
130 | + refute json["user"].has_key?("permissions") | ||
131 | + refute json["user"].has_key?("activated") | ||
132 | + end | ||
133 | + | ||
105 | end | 134 | end |
test/unit/organization_test.rb
@@ -437,7 +437,7 @@ class OrganizationTest < ActiveSupport::TestCase | @@ -437,7 +437,7 @@ class OrganizationTest < ActiveSupport::TestCase | ||
437 | c = fast_create(Organization, :name => 'my test profile', :identifier => 'mytestprofile') | 437 | c = fast_create(Organization, :name => 'my test profile', :identifier => 'mytestprofile') |
438 | admin = create_user('adminuser').person | 438 | admin = create_user('adminuser').person |
439 | c.add_admin(admin) | 439 | c.add_admin(admin) |
440 | - | 440 | + |
441 | assert c.is_admin?(admin) | 441 | assert c.is_admin?(admin) |
442 | end | 442 | end |
443 | 443 | ||
@@ -513,4 +513,18 @@ class OrganizationTest < ActiveSupport::TestCase | @@ -513,4 +513,18 @@ class OrganizationTest < ActiveSupport::TestCase | ||
513 | assert_includes env_admin_orgs, o7 | 513 | assert_includes env_admin_orgs, o7 |
514 | end | 514 | end |
515 | 515 | ||
516 | + should 'fetch organizations there are visible for a visitor' do | ||
517 | + visitor = nil | ||
518 | + Organization.destroy_all | ||
519 | + o1 = fast_create(Organization, :public_profile => true , :visible => true ) | ||
520 | + o2 = fast_create(Organization, :public_profile => false, :visible => true ) | ||
521 | + o3 = fast_create(Organization, :public_profile => true , :visible => false) | ||
522 | + o4 = fast_create(Organization, :public_profile => false, :visible => false) | ||
523 | + person_orgs = Organization.visible_for_person(visitor) | ||
524 | + assert_includes person_orgs, o1 | ||
525 | + assert_not_includes person_orgs, o2 | ||
526 | + assert_not_includes person_orgs, o3 | ||
527 | + assert_not_includes person_orgs, o4 | ||
528 | + end | ||
529 | + | ||
516 | end | 530 | end |
test/unit/person_test.rb
@@ -1951,4 +1951,17 @@ class PersonTest < ActiveSupport::TestCase | @@ -1951,4 +1951,17 @@ class PersonTest < ActiveSupport::TestCase | ||
1951 | person.save! | 1951 | person.save! |
1952 | end | 1952 | end |
1953 | 1953 | ||
1954 | + should 'fetch people there are visible for a visitor' do | ||
1955 | + person = nil | ||
1956 | + p1 = fast_create(Person, :public_profile => true , :visible => true) | ||
1957 | + p2 = fast_create(Person, :public_profile => false, :visible => true) | ||
1958 | + p3 = fast_create(Person, :public_profile => true , :visible => false) | ||
1959 | + p4 = fast_create(Person, :public_profile => false, :visible => false) | ||
1960 | + people_visible_by_visitor = Person.visible_for_person(person) | ||
1961 | + assert_includes people_visible_by_visitor, p1 | ||
1962 | + assert_not_includes people_visible_by_visitor, p2 | ||
1963 | + assert_not_includes people_visible_by_visitor, p3 | ||
1964 | + assert_not_includes people_visible_by_visitor, p4 | ||
1965 | + end | ||
1966 | + | ||
1954 | end | 1967 | end |