Commit 1107cc69ba937d885feeaccc373d6f3082273870
Committed by
Rodrigo Souto
1 parent
d7b3b82d
Exists in
api_tasks
and in
4 other branches
adding tests for helpers
Showing
3 changed files
with
166 additions
and
75 deletions
Show diff stats
lib/api/helpers.rb
@@ -76,47 +76,10 @@ module API | @@ -76,47 +76,10 @@ module API | ||
76 | objects | 76 | objects |
77 | end | 77 | end |
78 | 78 | ||
79 | -#FIXME see if its needed | ||
80 | -# def paginate(relation) | ||
81 | -# per_page = params[:per_page].to_i | ||
82 | -# paginated = relation.page(params[:page]).per(per_page) | ||
83 | -# add_pagination_headers(paginated, per_page) | ||
84 | -# | ||
85 | -# paginated | ||
86 | -# end | ||
87 | - | ||
88 | def authenticate! | 79 | def authenticate! |
89 | unauthorized! unless current_user | 80 | unauthorized! unless current_user |
90 | end | 81 | end |
91 | 82 | ||
92 | -#FIXME see if its needed | ||
93 | -# def authenticated_as_admin! | ||
94 | -# forbidden! unless current_user.is_admin? | ||
95 | -# end | ||
96 | -# | ||
97 | -#FIXME see if its needed | ||
98 | -# def authorize! action, subject | ||
99 | -# unless abilities.allowed?(current_user, action, subject) | ||
100 | -# forbidden! | ||
101 | -# end | ||
102 | -# end | ||
103 | -# | ||
104 | -#FIXME see if its needed | ||
105 | -# def can?(object, action, subject) | ||
106 | -# abilities.allowed?(object, action, subject) | ||
107 | -# end | ||
108 | - | ||
109 | - # Checks the occurrences of required attributes, each attribute must be present in the params hash | ||
110 | - # or a Bad Request error is invoked. | ||
111 | - # | ||
112 | - # Parameters: | ||
113 | - # keys (required) - A hash consisting of keys that must be present | ||
114 | - def required_attributes!(keys) | ||
115 | - keys.each do |key| | ||
116 | - bad_request!(key) unless params[key].present? | ||
117 | - end | ||
118 | - end | ||
119 | - | ||
120 | # Checks the occurrences of uniqueness of attributes, each attribute must be present in the params hash | 83 | # Checks the occurrences of uniqueness of attributes, each attribute must be present in the params hash |
121 | # or a Bad Request error is invoked. | 84 | # or a Bad Request error is invoked. |
122 | # | 85 | # |
@@ -135,8 +98,11 @@ module API | @@ -135,8 +98,11 @@ module API | ||
135 | end | 98 | end |
136 | attrs | 99 | attrs |
137 | end | 100 | end |
101 | + | ||
102 | + ########################################## | ||
103 | + # error helpers # | ||
104 | + ########################################## | ||
138 | 105 | ||
139 | - # error helpers | ||
140 | def forbidden! | 106 | def forbidden! |
141 | render_api_error!('403 Forbidden', 403) | 107 | render_api_error!('403 Forbidden', 403) |
142 | end | 108 | end |
@@ -203,6 +169,19 @@ module API | @@ -203,6 +169,19 @@ module API | ||
203 | 20 | 169 | 20 |
204 | end | 170 | end |
205 | 171 | ||
172 | + def parse_content_type(content_type) | ||
173 | + return nil if content_type.blank? | ||
174 | + content_type.split(',').map do |content_type| | ||
175 | + content_type.camelcase | ||
176 | + end | ||
177 | + end | ||
178 | + | ||
179 | + def period(from_date, until_date) | ||
180 | + begin_period = from_date.nil? ? Time.at(0).to_datetime : from_date | ||
181 | + end_period = until_date.nil? ? DateTime.now : until_date | ||
182 | + | ||
183 | + begin_period..end_period | ||
184 | + end | ||
206 | 185 | ||
207 | end | 186 | end |
208 | end | 187 | end |
lib/api/session.rb
@@ -26,8 +26,12 @@ module API | @@ -26,8 +26,12 @@ module API | ||
26 | # login - login | 26 | # login - login |
27 | # Example Request: | 27 | # Example Request: |
28 | # POST /register?email=some@mail.com&password=pas&login=some | 28 | # POST /register?email=some@mail.com&password=pas&login=some |
29 | - post "/register" do | ||
30 | - required_attributes! [:email, :login, :password] | 29 | + params do |
30 | + requires :email, type: String, desc: _("Email") | ||
31 | + requires :login, type: String, desc: _("Login") | ||
32 | + requires :password, type: String, desc: _("Password") | ||
33 | + end | ||
34 | + get "/register" do | ||
31 | unique_attributes! User, [:email, :login] | 35 | unique_attributes! User, [:email, :login] |
32 | attrs = attributes_for_keys [:email, :login, :password] | 36 | attrs = attributes_for_keys [:email, :login, :password] |
33 | attrs[:password_confirmation] = attrs[:password] | 37 | attrs[:password_confirmation] = attrs[:password] |
test/unit/api/helpers_test.rb
@@ -4,45 +4,153 @@ class APITest < ActiveSupport::TestCase | @@ -4,45 +4,153 @@ class APITest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | include API::APIHelpers | 5 | include API::APIHelpers |
6 | 6 | ||
7 | -# def setup | ||
8 | -# login_api | 7 | + should 'get the current user with valid token' do |
8 | + user = create_user('someuser') | ||
9 | + user.generate_private_token! | ||
10 | + self.params = {:private_token => user.private_token} | ||
11 | + assert_equal user, current_user | ||
12 | + end | ||
13 | + | ||
14 | + should 'not get the current user with expired token' do | ||
15 | + user = create_user('someuser') | ||
16 | + user.generate_private_token! | ||
17 | + user.private_token_generated_at = DateTime.now.prev_year | ||
18 | + user.save | ||
19 | + self.params = {:private_token => user.private_token} | ||
20 | + assert_nil current_user | ||
21 | + end | ||
22 | + | ||
23 | + should 'get the person of current user' do | ||
24 | + user = create_user('someuser') | ||
25 | + user.generate_private_token! | ||
26 | + self.params = {:private_token => user.private_token} | ||
27 | + assert_equal user.person, current_person | ||
28 | + end | ||
29 | + | ||
30 | +# #FIXME see how to make this test. Get the current_user variable | ||
31 | +# should 'set current_user to nil after logout' do | ||
32 | +# user = create_user('someuser') | ||
33 | +# user.stubs(:private_token_expired?).returns(false) | ||
34 | +# User.stubs(:find_by_private_token).returns(user) | ||
35 | +# assert_not_nil current_user | ||
36 | +# assert false | ||
37 | +# logout | ||
9 | # end | 38 | # end |
10 | 39 | ||
11 | - should 'get the current user' do | 40 | + should 'limit be defined as the params limit value' do |
41 | + local_limit = 30 | ||
42 | + self.params= {:limit => local_limit} | ||
43 | + assert_equal local_limit, limit | ||
44 | + end | ||
45 | + | ||
46 | + should 'return default limit if the limit parameter is minor than zero' do | ||
47 | + self.params= {:limit => -1} | ||
48 | + assert_equal 20, limit | ||
49 | + end | ||
50 | + | ||
51 | + should 'the default limit be 20' do | ||
52 | + assert_equal 20, limit | ||
53 | + end | ||
54 | + | ||
55 | + should 'the beginning of the period be the first existent date if no from date is passsed as parameter' do | ||
56 | + assert_equal Time.at(0).to_datetime, period(nil, nil).to_a[0] | ||
57 | + end | ||
58 | + | ||
59 | + should 'the beginning of the period be from date passsed as parameter' do | ||
60 | + from = DateTime.now | ||
61 | + assert_equal from, period(from, nil).min | ||
62 | + end | ||
63 | + | ||
64 | + should 'the end of the period be now if no until date is passsed as parameter' do | ||
65 | + assert_in_delta DateTime.now, period(nil, nil).max | ||
66 | + end | ||
67 | + | ||
68 | + should 'the end of the period be until date passsed as parameter' do | ||
69 | + until_date = DateTime.now | ||
70 | + assert_equal until_date, period(nil, until_date).max | ||
71 | + end | ||
72 | + | ||
73 | + should 'parse_content_type return nil if its blank' do | ||
74 | + assert_nil parse_content_type("") | ||
75 | + end | ||
76 | + | ||
77 | + should 'parse_content_type be an array' do | ||
78 | + assert_kind_of Array, parse_content_type("text_article") | ||
79 | + end | ||
80 | + | ||
81 | + should 'parse_content_type return all content types as an array' do | ||
82 | + assert_equivalent ['TextArticle','TinyMceArticle'], parse_content_type("TextArticle,TinyMceArticle") | ||
83 | + end | ||
84 | + | ||
85 | + should 'find_article return article by id in list passed for user with permission' do | ||
12 | user = create_user('someuser') | 86 | user = create_user('someuser') |
13 | -# params = {:private_token => user.private_token} | ||
14 | -# post "/api/v1/login?#{params.to_query}" | ||
15 | -# json = JSON.parse(last_response.body) | 87 | + a = fast_create(Article, :profile_id => user.person.id) |
88 | + fast_create(Article, :profile_id => user.person.id) | ||
89 | + fast_create(Article, :profile_id => user.person.id) | ||
90 | + | ||
91 | + user.generate_private_token! | ||
16 | User.expects(:find_by_private_token).returns(user) | 92 | User.expects(:find_by_private_token).returns(user) |
17 | - assert_equal user, current_user | ||
18 | -# | ||
19 | -# assert !json["private_token"].blank? | 93 | + assert_equal a, find_article(user.person.articles, a.id) |
20 | end | 94 | end |
21 | 95 | ||
22 | -# should 'return 401 when login fails' do | ||
23 | -# user.destroy | ||
24 | -# params = {:login => "testapi", :password => "testapi"} | ||
25 | -# post "/api/v1/login?#{params.to_query}" | ||
26 | -# assert_equal 401, last_response.status | ||
27 | -# end | ||
28 | -# | ||
29 | -# should 'register a user' do | ||
30 | -# params = {:login => "newuserapi", :password => "newuserapi", :email => "newuserapi@email.com" } | ||
31 | -# post "/api/v1/register?#{params.to_query}" | ||
32 | -# assert_equal 201, last_response.status | ||
33 | -# end | ||
34 | -# | ||
35 | -# should 'do not register a user without email' do | ||
36 | -# params = {:login => "newuserapi", :password => "newuserapi", :email => nil } | ||
37 | -# post "/api/v1/register?#{params.to_query}" | ||
38 | -# assert_equal 400, last_response.status | ||
39 | -# end | ||
40 | -# | ||
41 | -# should 'do not register a duplicated user' do | ||
42 | -# params = {:login => "newuserapi", :password => "newuserapi", :email => "newuserapi@email.com" } | ||
43 | -# post "/api/v1/register?#{params.to_query}" | ||
44 | -# post "/api/v1/register?#{params.to_query}" | ||
45 | -# assert_equal 400, last_response.status | ||
46 | -# end | ||
47 | -# | 96 | + should 'find_article return forbidden when a user try to access an article without permission' do |
97 | + user = create_user('someuser') | ||
98 | + p = fast_create(Profile) | ||
99 | + a = fast_create(Article, :published => false, :profile_id => p.id) | ||
100 | + fast_create(Article, :profile_id => p.id) | ||
101 | + | ||
102 | + user.generate_private_token! | ||
103 | + User.expects(:find_by_private_token).returns(user) | ||
104 | + assert_equal 403, find_article(p.articles, a.id).last | ||
105 | + end | ||
106 | + | ||
107 | + should 'make_conditions_with_parameter return no created at parameter if it was not defined from or until parameters' do | ||
108 | + assert_nil make_conditions_with_parameter[:created_at] | ||
109 | + end | ||
110 | + | ||
111 | + should 'make_conditions_with_parameter return created_at parameter if from period is defined' do | ||
112 | + assert_not_nil make_conditions_with_parameter(:from => '2010-10-10')[:created_at] | ||
113 | + end | ||
114 | + | ||
115 | + should 'make_conditions_with_parameter return created_at parameter if until period is defined' do | ||
116 | + assert_not_nil make_conditions_with_parameter(:until => '2010-10-10')[:created_at] | ||
117 | + end | ||
118 | + | ||
119 | +# should 'the beginning of the period be the first existent date if no from date is passsed as parameter' do | ||
120 | + should 'make_conditions_with_parameter return created_at as the first existent date as parameter if only until is defined' do | ||
121 | + assert_equal Time.at(0).to_datetime, make_conditions_with_parameter(:until => '2010-10-10')[:created_at].min | ||
122 | + end | ||
123 | + | ||
124 | + should 'make_conditions_with_parameter: the minimal created_at date be the from date passed as parameter' do | ||
125 | + date = '2010-10-10' | ||
126 | + assert_equal DateTime.parse(date), make_conditions_with_parameter(:from => date)[:created_at].min | ||
127 | + end | ||
128 | + | ||
129 | + should 'make_conditions_with_parameter: the maximum created_at date be the until date passed as parameter' do | ||
130 | + date = '2010-10-10' | ||
131 | + assert_equal DateTime.parse(date), make_conditions_with_parameter(:until => date)[:created_at].max | ||
132 | + end | ||
133 | + | ||
134 | + should 'make_conditions_with_parameter return the until date passed as parameter' do | ||
135 | + date = '2010-10-10' | ||
136 | + assert_equal DateTime.parse(date), make_conditions_with_parameter(:from => '2010-10-10')[:created_at].min | ||
137 | + end | ||
138 | + | ||
139 | + should 'make_conditions_with_parameter return no type parameter if it was not defined any content type' do | ||
140 | + assert_nil make_conditions_with_parameter[:type] | ||
141 | + end | ||
142 | + | ||
143 | + protected | ||
144 | + | ||
145 | + def error!(info, status) | ||
146 | + [info, status] | ||
147 | + end | ||
148 | + | ||
149 | + def params | ||
150 | + @params ||= {} | ||
151 | + end | ||
152 | + | ||
153 | + def params= value | ||
154 | + @params = value | ||
155 | + end | ||
48 | end | 156 | end |