Add tests for api

This commit is contained in:
benji 2015-09-12 13:03:04 +02:00
parent 1b6f83f70a
commit 8a1981b1b4
14 changed files with 155 additions and 57 deletions

1
.rspec
View file

@ -1,2 +1,3 @@
--color --color
--require spec_helper --require spec_helper
--require rails_helper

View file

@ -0,0 +1,55 @@
describe TransactionsController, type: :api do
before :each do
@debtor = create :user
@creditor = create :user
@api_attributes = {
debtor: @debtor.name,
creditor: @creditor.name,
message: Faker::Lorem.sentence,
euros: 1,
cents: 25
}
@client = Client.create name: "Tap"
@key = @client.key
end
def post_transaction(extra_attributes = {})
post '/transactions', { transaction: @api_attributes.merge(extra_attributes) },
{ 'HTTP_ACCEPT' => "application/json", "HTTP_AUTHORIZATION" => "Token token=#{@key}" }
end
describe "Authentication" do
it "should require a client authentication key" do
post '/transactions'
expect(last_response.status).to eq(401)
end
it "should work with valid key" do
post_transaction
expect(last_response.status).to eq(201)
end
end
describe "successfull creating transaction" do
it "should create a transaction" do
expect { post_transaction }.to change { Transaction.count }.by(1)
end
it "should set issuer" do
post_transaction
@transaction = Transaction.last
expect(@transaction.issuer).to eq(@client)
end
end
describe "failed creating transaction" do
# it "should create a transaction" do
# expect { post_transaction(euros: -5) }.to change { Transaction.count }.by(0)
# end
# it "should give 422 status" do
# post_transaction(euros: -4)
# expect(last_response.status).to eq(422)
# end
end
end

View file

@ -1,7 +1,4 @@
require 'rails_helper' describe TransactionsController, type: :controller do
require 'spec_helper'
RSpec.describe TransactionsController, type: :controller do
describe "creating transaction" do describe "creating transaction" do
before :each do before :each do
@debtor = create(:user) @debtor = create(:user)
@ -15,7 +12,7 @@ RSpec.describe TransactionsController, type: :controller do
debtor: @debtor.name, debtor: @debtor.name,
creditor: @creditor.name, creditor: @creditor.name,
cents: 70, cents: 70,
message: 'hoi' message: "hoi"
} } } }
end end
@ -74,7 +71,7 @@ RSpec.describe TransactionsController, type: :controller do
debtor: @creditor.name, debtor: @creditor.name,
creditor: @debtor.name, creditor: @debtor.name,
euros: 10000000, euros: 10000000,
message: 'DIT IS OVERVAL' message: "DIT IS OVERVAL"
} }
end.not_to change { Transaction.count } end.not_to change { Transaction.count }
end end

View file

@ -1,5 +1,36 @@
require 'rails_helper' describe UsersController, type: :controller do
before :each do
RSpec.describe UsersController, type: :controller do @user = create :penning
sign_in @user
end
describe "GET show" do
before :each do
get :show, id: @user
end
it "should be successful" do
expect(response).to render_template(:show)
expect(response).to have_http_status(200)
end
it "should load the correct user" do
expect(assigns(:user)).to eq(@user)
end
end
describe "GET index" do
before :each do
get :index
end
it "should load an array of all users" do
expect(assigns(:users)).to eq([@user])
end
it "should render the correct template" do
expect(response).to have_http_status(200)
expect(response).to render_template(:index)
end
end
end end

View file

@ -18,7 +18,7 @@ FactoryGirl.define do
association :debtor, factory: :user association :debtor, factory: :user
association :creditor, factory: :user association :creditor, factory: :user
issuer { debtor } issuer { debtor }
amount { rand(100) } amount { 1 + rand(100) }
message { Faker::Lorem.sentence } message { Faker::Lorem.sentence }
end end
end end

View file

@ -18,5 +18,4 @@ FactoryGirl.define do
penning true penning true
end end
end end
end end

View file

@ -1,14 +0,0 @@
require 'rails_helper'
# Specs in this file have access to a helper object that includes
# the TransactionsHelper. For example:
#
# describe TransactionsHelper do
# describe "string concat" do
# it "concats two strings with spaces" do
# expect(helper.concat_strings("this","that")).to eq("this that")
# end
# end
# end
RSpec.describe TransactionsHelper, type: :helper do
end

View file

@ -1,14 +0,0 @@
require 'rails_helper'
# Specs in this file have access to a helper object that includes
# the UsersHelper. For example:
#
# describe UsersHelper do
# describe "string concat" do
# it "concats two strings with spaces" do
# expect(helper.concat_strings("this","that")).to eq("this that")
# end
# end
# end
RSpec.describe UsersHelper, type: :helper do
end

View file

@ -9,14 +9,21 @@
# updated_at :datetime not null # updated_at :datetime not null
# #
require 'rails_helper' describe Client, type: :model do
before :each do
@client = create :client
end
RSpec.describe Client, type: :model do
it "should have a valid factory" do it "should have a valid factory" do
expect(create(:client)).to be_valid expect(@client).to be_valid
end end
it "should generate a key" do it "should generate a key" do
expect(create(:client).key).to be_present expect(@client.key).to be_present
end
it "should have a unique name" do
client = build :client, name: @client.name
expect(client).to_not be_valid
end end
end end

View file

@ -13,9 +13,7 @@
# updated_at :datetime not null # updated_at :datetime not null
# #
require 'rails_helper' describe Transaction, type: :model do
RSpec.describe Transaction, type: :model do
it "has a valid factory" do it "has a valid factory" do
expect(create(:transaction)).to be_valid expect(create(:transaction)).to be_valid
end end
@ -35,4 +33,21 @@ RSpec.describe Transaction, type: :model do
expect { trans.save! }.to change { @user.balance }.by(-10) expect { trans.save! }.to change { @user.balance }.by(-10)
end end
end end
describe "amount" do
it "should be positive" do
expect(build :transaction, amount: -5).to_not be_valid
end
it "should not be 0" do
expect(build :transaction, amount: 0).to_not be_valid
end
end
describe "debtor/creditor" do
it "should be different" do
@user = create :user
expect(build :transaction, debtor: @user, creditor: @user).to_not be_valid
end
end
end end

View file

@ -10,10 +10,17 @@
# updated_at :datetime not null # updated_at :datetime not null
# #
require 'rails_helper' describe User, type: :model do
before :each do
@user = create :user
end
RSpec.describe User, type: :model do
it "has a valid factory" do it "has a valid factory" do
expect(create(:user)).to be_valid expect(@user).to be_valid
end
it "has a unique name" do
user = build :user, name: @user.name
expect(user).to_not be_valid
end end
end end

View file

@ -27,9 +27,6 @@ require 'rspec/rails'
ActiveRecord::Migration.maintain_test_schema! ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config| RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your # If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false # examples within a transaction, remove the following line or assign false
# instead of true. # instead of true.

View file

@ -22,9 +22,15 @@ Coveralls.wear!('rails')
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
require 'factory_girl' require 'factory_girl'
require 'devise' require 'devise'
Dir[File.join(File.dirname(__FILE__), 'support', '**', '*.rb')].each do |f|
require f
end
RSpec.configure do |config| RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods config.include FactoryGirl::Syntax::Methods
config.include Devise::TestHelpers, type: :controller config.include Devise::TestHelpers, type: :controller
# rspec-expectations config goes here. You can use an alternate # rspec-expectations config goes here. You can use an alternate
# assertion/expectation library such as wrong or the stdlib/minitest # assertion/expectation library such as wrong or the stdlib/minitest
# assertions if you prefer. # assertions if you prefer.

View file

@ -0,0 +1,11 @@
module ApiHelper
include Rack::Test::Methods
def app
Rails.application
end
end
RSpec.configure do |config|
config.include ApiHelper, type: :api #apply to all spec for apis folder
end