Commit 34b5b688d7b15418734c27f16d9120c0e02514af
1 parent
5ef6ad56
Exists in
theme-brasil-digital-from-staging
and in
9 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 |