start using rspec for tests
This commit is contained in:
parent
f57038ff56
commit
7fa8193010
5 changed files with 158 additions and 8 deletions
9
Gemfile
9
Gemfile
|
@ -52,10 +52,6 @@ group :development do
|
|||
gem 'better_errors'
|
||||
gem 'binding_of_caller'
|
||||
|
||||
# Re-enable rails benchmarker/profiler
|
||||
gem 'ruby-prof'
|
||||
gem 'test-unit'
|
||||
|
||||
# Get infos when not using proper eager loading
|
||||
gem 'bullet'
|
||||
|
||||
|
@ -69,3 +65,8 @@ group :development do
|
|||
# Avoid having content-length warnings
|
||||
gem 'thin'
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
gem 'rspec-rails'
|
||||
gem 'factory_girl_rails', '~> 4.0'
|
||||
end
|
||||
|
|
23
Gemfile.lock
23
Gemfile.lock
|
@ -81,6 +81,7 @@ GEM
|
|||
coffee-script-source (1.3.3)
|
||||
commonjs (0.2.6)
|
||||
daemons (1.1.9)
|
||||
diff-lcs (1.2.4)
|
||||
erubis (2.7.0)
|
||||
eventmachine (1.0.3)
|
||||
exception_notification (2.6.1)
|
||||
|
@ -88,6 +89,11 @@ GEM
|
|||
execjs (1.4.0)
|
||||
multi_json (~> 1.0)
|
||||
expression_parser (0.9.0)
|
||||
factory_girl (4.2.0)
|
||||
activesupport (>= 3.0.0)
|
||||
factory_girl_rails (4.2.1)
|
||||
factory_girl (~> 4.2.0)
|
||||
railties (>= 3.0.0)
|
||||
haml (3.1.7)
|
||||
haml-rails (0.3.5)
|
||||
actionpack (>= 3.1, < 4.1)
|
||||
|
@ -195,7 +201,17 @@ GEM
|
|||
redis-namespace (~> 1.2)
|
||||
sinatra (>= 0.9.2)
|
||||
vegas (~> 0.1.2)
|
||||
ruby-prof (0.11.2)
|
||||
rspec-core (2.14.2)
|
||||
rspec-expectations (2.14.0)
|
||||
diff-lcs (>= 1.1.3, < 2.0)
|
||||
rspec-mocks (2.14.1)
|
||||
rspec-rails (2.14.0)
|
||||
actionpack (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
railties (>= 3.0)
|
||||
rspec-core (~> 2.14.0)
|
||||
rspec-expectations (~> 2.14.0)
|
||||
rspec-mocks (~> 2.14.0)
|
||||
ruby-rc4 (0.1.5)
|
||||
sass (3.2.1)
|
||||
sass-rails (3.2.5)
|
||||
|
@ -222,7 +238,6 @@ GEM
|
|||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
sqlite3 (1.3.6)
|
||||
test-unit (2.5.3)
|
||||
therubyracer (0.10.2)
|
||||
libv8 (~> 3.3.10)
|
||||
thin (1.5.1)
|
||||
|
@ -271,6 +286,7 @@ DEPENDENCIES
|
|||
coffee-rails (~> 3.2.1)
|
||||
daemons
|
||||
exception_notification
|
||||
factory_girl_rails (~> 4.0)
|
||||
haml-rails
|
||||
inherited_resources
|
||||
jquery-rails
|
||||
|
@ -283,13 +299,12 @@ DEPENDENCIES
|
|||
quiet_assets
|
||||
rails (~> 3.2.9)
|
||||
resque
|
||||
ruby-prof
|
||||
rspec-rails
|
||||
sass-rails (~> 3.2.3)
|
||||
simple-navigation
|
||||
simple-navigation-bootstrap
|
||||
simple_form
|
||||
sqlite3
|
||||
test-unit
|
||||
therubyracer
|
||||
thin
|
||||
twitter-bootstrap-rails
|
||||
|
|
33
spec/factories/user.rb
Normal file
33
spec/factories/user.rb
Normal file
|
@ -0,0 +1,33 @@
|
|||
require 'factory_girl'
|
||||
|
||||
FactoryGirl.define do
|
||||
|
||||
factory :user do
|
||||
sequence(:nick) { |n| "user#{n}"}
|
||||
first_name 'John'
|
||||
email { "#{nick}@foodcoop.test" }
|
||||
password { new_random_password }
|
||||
|
||||
factory :admin do
|
||||
sequence(:nick) { |n| "admin#{n}" }
|
||||
first_name 'Administrator'
|
||||
after :create do |user, evaluator|
|
||||
FactoryGirl.create :workgroup, role_admin: true, user_ids: [user.id]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
factory :group do
|
||||
sequence(:name) {|n| "Group ##{n}"}
|
||||
|
||||
factory :workgroup do
|
||||
type ''
|
||||
end
|
||||
|
||||
factory :ordergroup do
|
||||
type 'Ordergroup'
|
||||
sequence(:name) {|n| "Order group ##{n}"}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
63
spec/models/user_spec.rb
Normal file
63
spec/models/user_spec.rb
Normal file
|
@ -0,0 +1,63 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe User do
|
||||
|
||||
it 'is correctly created' do
|
||||
user = FactoryGirl.create :user,
|
||||
nick: 'johnnydoe', first_name: 'Johnny', last_name: 'DoeBar',
|
||||
email: 'johnnydoe@foodcoop.test', phone: '+1234567890'
|
||||
user.nick.should == 'johnnydoe'
|
||||
user.first_name.should == 'Johnny'
|
||||
user.last_name.should == 'DoeBar'
|
||||
user.name.should == 'Johnny DoeBar'
|
||||
user.email.should == 'johnnydoe@foodcoop.test'
|
||||
user.phone.should == '+1234567890'
|
||||
end
|
||||
|
||||
describe 'does not have the role' do
|
||||
let(:user) { FactoryGirl.create :user }
|
||||
it 'admin' do user.role_admin?.should be_false end
|
||||
it 'finance' do user.role_finance?.should be_false end
|
||||
it 'article_meta' do user.role_article_meta?.should be_false end
|
||||
it 'suppliers' do user.role_suppliers?.should be_false end
|
||||
it 'orders' do user.role_orders?.should be_false end
|
||||
end
|
||||
|
||||
describe do
|
||||
let(:user) { FactoryGirl.create :user, password: 'blahblah' }
|
||||
|
||||
it 'can authenticate with correct password' do
|
||||
User.authenticate(user.nick, 'blahblah').should be_true
|
||||
end
|
||||
it 'can not authenticate with incorrect password' do
|
||||
User.authenticate(user.nick, 'foobar').should be_nil
|
||||
end
|
||||
it 'can not set a password without confirmation' do
|
||||
user.password = 'abcdefghij'
|
||||
user.should_not be_valid
|
||||
end
|
||||
it 'can not set a password without matching confirmation' do
|
||||
user.password = 'abcdefghij'
|
||||
user.password_confirmation = 'foobarxyz'
|
||||
user.should_not be_valid
|
||||
end
|
||||
it 'can set a password with matching confirmation' do
|
||||
user.password = 'abcdefghij'
|
||||
user.password_confirmation = 'abcdefghij'
|
||||
user.should be_valid
|
||||
end
|
||||
|
||||
it 'has a unique nick' do
|
||||
FactoryGirl.build(:user, nick: user.nick, email: "x-#{user.email}").should_not be_valid
|
||||
end
|
||||
it 'has a unique email' do
|
||||
FactoryGirl.build(:user, email: "#{user.email}").should_not be_valid
|
||||
end
|
||||
end
|
||||
|
||||
describe 'admin' do
|
||||
let(:user) { FactoryGirl.create :admin }
|
||||
it 'default admin role' do user.role_admin?.should be_true end
|
||||
end
|
||||
|
||||
end
|
38
spec/spec_helper.rb
Normal file
38
spec/spec_helper.rb
Normal file
|
@ -0,0 +1,38 @@
|
|||
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
||||
ENV["RAILS_ENV"] ||= 'test'
|
||||
require File.expand_path("../../config/environment", __FILE__)
|
||||
require 'rspec/rails'
|
||||
require 'rspec/autorun'
|
||||
|
||||
# Requires supporting ruby files with custom matchers and macros, etc,
|
||||
# in spec/support/ and its subdirectories.
|
||||
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
|
||||
|
||||
RSpec.configure do |config|
|
||||
# ## Mock Framework
|
||||
#
|
||||
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
||||
#
|
||||
# config.mock_with :mocha
|
||||
# config.mock_with :flexmock
|
||||
# config.mock_with :rr
|
||||
|
||||
# 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
|
||||
# examples within a transaction, remove the following line or assign false
|
||||
# instead of true.
|
||||
config.use_transactional_fixtures = true
|
||||
|
||||
# If true, the base class of anonymous controllers will be inferred
|
||||
# automatically. This will be the default behavior in future versions of
|
||||
# rspec-rails.
|
||||
config.infer_base_class_for_anonymous_controllers = false
|
||||
|
||||
# Run specs in random order to surface order dependencies. If you find an
|
||||
# order dependency and want to debug it, you can fix the order by providing
|
||||
# the seed, which is printed after each run.
|
||||
# --seed 1234
|
||||
config.order = "random"
|
||||
end
|
Loading…
Reference in a new issue