Commit ecfb99f8fa960b777007e00b7feeb0154e3d577e

Authored by Victor Costa
Committed by Rodrigo Souto
1 parent 3ddab2ed

Added tests to api

app/models/user.rb
... ... @@ -124,7 +124,7 @@ class User < ActiveRecord::Base
124 124 def generate_private_token!
125 125 self.private_token = SecureRandom.hex
126 126 self.private_token_generated_at = DateTime.now
127   - save(false)
  127 + save(:validate => false)
128 128 end
129 129  
130 130 #FIXME make this test
... ...
lib/api/helpers.rb
... ... @@ -32,15 +32,12 @@ module API
32 32 end
33 33  
34 34 def period(from_date, until_date)
35   - if from_date.nil?
36   - begin_period = Time.at(0).to_datetime
37   - end_period = until_date.nil? ? DateTime.now : until_date
38   - else
39   - begin_period = from_date
40   - end_period = DateTime.now
41   - end
  35 + return nil if from_date.nil? && until_date.nil?
  36 +
  37 + begin_period = from_date.nil? ? Time.at(0).to_datetime : from_date
  38 + end_period = until_date.nil? ? DateTime.now : until_date
42 39  
43   - begin_period...end_period
  40 + begin_period..end_period
44 41 end
45 42  
46 43 def parse_content_type(content_type)
... ... @@ -50,7 +47,6 @@ module API
50 47 end
51 48 end
52 49  
53   -
54 50 def make_conditions_with_parameter(params = {})
55 51 conditions = {}
56 52 from_date = DateTime.parse(params[:from]) if params[:from]
... ... @@ -58,7 +54,7 @@ module API
58 54  
59 55 conditions[:type] = parse_content_type(params[:content_type]) unless params[:content_type].nil?
60 56  
61   - conditions[:created_at] = period(from_date, until_date)
  57 + conditions[:created_at] = period(from_date, until_date) if from_date || until_date
62 58  
63 59 conditions
64 60 end
... ...
test/unit/api_test.rb 0 → 100644
... ... @@ -0,0 +1,85 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +class APITest < ActiveSupport::TestCase
  4 +
  5 + include Rack::Test::Methods
  6 +
  7 + def app
  8 + API::API
  9 + end
  10 +
  11 + def setup
  12 + @user = User.create!(:login => 'testapi', :password => 'testapi', :password_confirmation => 'testapi', :email => 'test@test.org', :environment => Environment.default)
  13 + @user.activate
  14 +
  15 + post "/api/v1/login?login=testapi&password=testapi"
  16 + json = JSON.parse(last_response.body)
  17 + @private_token = json["private_token"]
  18 + @params = {:private_token => @private_token}
  19 + end
  20 + attr_accessor :private_token, :user, :params
  21 +
  22 + should 'generate private token when login' do
  23 + params = {:login => "testapi", :password => "testapi"}
  24 + post "/api/v1/login?#{params.to_query}"
  25 + json = JSON.parse(last_response.body)
  26 + assert !json["private_token"].blank?
  27 + end
  28 +
  29 + should 'return 401 when login fails' do
  30 + user.destroy
  31 + params = {:login => "testapi", :password => "testapi"}
  32 + post "/api/v1/login?#{params.to_query}"
  33 + assert_equal 401, last_response.status
  34 + end
  35 +
  36 + should 'register a user' do
  37 + params = {:login => "newuserapi", :password => "newuserapi", :email => "newuserapi@email.com" }
  38 + post "/api/v1/register?#{params.to_query}"
  39 + assert_equal 201, last_response.status
  40 + end
  41 +
  42 + should 'do not register a user without email' do
  43 + params = {:login => "newuserapi", :password => "newuserapi", :email => nil }
  44 + post "/api/v1/register?#{params.to_query}"
  45 + assert_equal 400, last_response.status
  46 + end
  47 +
  48 + should 'do not register a duplicated user' do
  49 + params = {:login => "newuserapi", :password => "newuserapi", :email => "newuserapi@email.com" }
  50 + post "/api/v1/register?#{params.to_query}"
  51 + post "/api/v1/register?#{params.to_query}"
  52 + assert_equal 400, last_response.status
  53 + end
  54 +
  55 + should 'list articles' do
  56 + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
  57 + get "/api/v1/articles/?#{params.to_query}"
  58 + json = JSON.parse(last_response.body)
  59 + assert_includes json["articles"].map { |a| a["id"] }, article.id
  60 + end
  61 +
  62 + should 'return article by id' do
  63 + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
  64 + get "/api/v1/articles/#{article.id}?#{params.to_query}"
  65 + json = JSON.parse(last_response.body)
  66 + assert_equal article.id, json["article"]["id"]
  67 + end
  68 +
  69 + should 'return comments of an article' do
  70 + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
  71 + article.comments.create!(:body => "some comment", :author => user.person)
  72 + article.comments.create!(:body => "another comment", :author => user.person)
  73 +
  74 + get "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
  75 + json = JSON.parse(last_response.body)
  76 + assert_equal 2, json["comments"].length
  77 + end
  78 +
  79 + should 'list users' do
  80 + get "/api/v1/users/?#{params.to_query}"
  81 + json = JSON.parse(last_response.body)
  82 + assert_includes json["users"].map { |a| a["login"] }, user.login
  83 + end
  84 +
  85 +end
... ...