From ecfb99f8fa960b777007e00b7feeb0154e3d577e Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Fri, 16 May 2014 15:32:34 -0300 Subject: [PATCH] Added tests to api --- app/models/user.rb | 2 +- lib/api/helpers.rb | 16 ++++++---------- test/unit/api_test.rb | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 test/unit/api_test.rb diff --git a/app/models/user.rb b/app/models/user.rb index e9043e8..f702da8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -124,7 +124,7 @@ class User < ActiveRecord::Base def generate_private_token! self.private_token = SecureRandom.hex self.private_token_generated_at = DateTime.now - save(false) + save(:validate => false) end #FIXME make this test diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index b9a8e45..8fb1e39 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -32,15 +32,12 @@ module API end def period(from_date, until_date) - if from_date.nil? - begin_period = Time.at(0).to_datetime - end_period = until_date.nil? ? DateTime.now : until_date - else - begin_period = from_date - end_period = DateTime.now - end + return nil if from_date.nil? && until_date.nil? + + begin_period = from_date.nil? ? Time.at(0).to_datetime : from_date + end_period = until_date.nil? ? DateTime.now : until_date - begin_period...end_period + begin_period..end_period end def parse_content_type(content_type) @@ -50,7 +47,6 @@ module API end end - def make_conditions_with_parameter(params = {}) conditions = {} from_date = DateTime.parse(params[:from]) if params[:from] @@ -58,7 +54,7 @@ module API conditions[:type] = parse_content_type(params[:content_type]) unless params[:content_type].nil? - conditions[:created_at] = period(from_date, until_date) + conditions[:created_at] = period(from_date, until_date) if from_date || until_date conditions end diff --git a/test/unit/api_test.rb b/test/unit/api_test.rb new file mode 100644 index 0000000..4e0a8ec --- /dev/null +++ b/test/unit/api_test.rb @@ -0,0 +1,85 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class APITest < ActiveSupport::TestCase + + include Rack::Test::Methods + + def app + API::API + end + + def setup + @user = User.create!(:login => 'testapi', :password => 'testapi', :password_confirmation => 'testapi', :email => 'test@test.org', :environment => Environment.default) + @user.activate + + post "/api/v1/login?login=testapi&password=testapi" + json = JSON.parse(last_response.body) + @private_token = json["private_token"] + @params = {:private_token => @private_token} + end + attr_accessor :private_token, :user, :params + + should 'generate private token when login' do + params = {:login => "testapi", :password => "testapi"} + post "/api/v1/login?#{params.to_query}" + json = JSON.parse(last_response.body) + assert !json["private_token"].blank? + end + + should 'return 401 when login fails' do + user.destroy + params = {:login => "testapi", :password => "testapi"} + post "/api/v1/login?#{params.to_query}" + assert_equal 401, last_response.status + end + + should 'register a user' do + params = {:login => "newuserapi", :password => "newuserapi", :email => "newuserapi@email.com" } + post "/api/v1/register?#{params.to_query}" + assert_equal 201, last_response.status + end + + should 'do not register a user without email' do + params = {:login => "newuserapi", :password => "newuserapi", :email => nil } + post "/api/v1/register?#{params.to_query}" + assert_equal 400, last_response.status + end + + should 'do not register a duplicated user' do + params = {:login => "newuserapi", :password => "newuserapi", :email => "newuserapi@email.com" } + post "/api/v1/register?#{params.to_query}" + post "/api/v1/register?#{params.to_query}" + assert_equal 400, last_response.status + end + + should 'list articles' do + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") + get "/api/v1/articles/?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_includes json["articles"].map { |a| a["id"] }, article.id + end + + should 'return article by id' do + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") + get "/api/v1/articles/#{article.id}?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_equal article.id, json["article"]["id"] + end + + should 'return comments of an article' do + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") + article.comments.create!(:body => "some comment", :author => user.person) + article.comments.create!(:body => "another comment", :author => user.person) + + get "/api/v1/articles/#{article.id}/comments?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_equal 2, json["comments"].length + end + + should 'list users' do + get "/api/v1/users/?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_includes json["users"].map { |a| a["login"] }, user.login + end + +end -- libgit2 0.21.2