diff --git a/Gemfile b/Gemfile index 8405d992..5f58bf54 100644 --- a/Gemfile +++ b/Gemfile @@ -70,4 +70,5 @@ group :development, :test do gem 'rspec-rails' gem 'factory_girl_rails', '~> 4.0' gem 'faker' + gem 'capybara' end diff --git a/Gemfile.lock b/Gemfile.lock index 27e48df4..2ce2d80c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -69,6 +69,15 @@ GEM net-ssh-gateway (>= 1.1.0) capistrano-ext (1.2.1) capistrano (>= 1.0.0) + capybara (2.0.2) + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + selenium-webdriver (~> 2.0) + xpath (~> 1.0.0) + childprocess (0.3.9) + ffi (~> 1.0, >= 1.0.11) chronic (0.9.0) client_side_validations (3.1.4) coderay (1.0.8) @@ -96,6 +105,7 @@ GEM railties (>= 3.0.0) faker (1.1.2) i18n (~> 0.5) + ffi (1.4.0) haml (3.1.7) haml-rails (0.3.5) actionpack (>= 3.1, < 4.1) @@ -153,6 +163,7 @@ GEM net-ssh (2.6.7) net-ssh-gateway (1.2.0) net-ssh (>= 2.6.5) + nokogiri (1.5.10) pdf-reader (1.2.0) Ascii85 (~> 1.0.0) hashery (~> 2.0) @@ -215,11 +226,17 @@ GEM rspec-expectations (~> 2.14.0) rspec-mocks (~> 2.14.0) ruby-rc4 (0.1.5) + rubyzip (0.9.9) sass (3.2.1) sass-rails (3.2.5) railties (~> 3.2.0) sass (>= 3.1.10) tilt (~> 1.3) + selenium-webdriver (2.31.0) + childprocess (>= 0.2.5) + multi_json (~> 1.0) + rubyzip + websocket (~> 1.0.4) simple-navigation (3.9.0) activesupport (>= 2.3.2) simple-navigation-bootstrap (0.0.4) @@ -264,12 +281,15 @@ GEM uniform_notifier (1.1.1) vegas (0.1.11) rack (>= 1.0.0) + websocket (1.0.7) whenever (0.8.1) activesupport (>= 2.3.4) chronic (>= 0.6.3) wikicloth (0.8.0) builder expression_parser + xpath (1.0.0) + nokogiri (~> 1.3) PLATFORMS ruby @@ -284,6 +304,7 @@ DEPENDENCIES bullet capistrano (= 2.13.5) capistrano-ext + capybara client_side_validations coffee-rails (~> 3.2.1) daemons diff --git a/spec/integration/session_spec.rb b/spec/integration/session_spec.rb new file mode 100644 index 00000000..81eb65d9 --- /dev/null +++ b/spec/integration/session_spec.rb @@ -0,0 +1,21 @@ +require 'spec_helper' + +describe 'the session', :type => :feature do + let(:user) { FactoryGirl.create :user } + + describe 'login page', :type => :feature do + it 'is accesible' do + get login_path + expect(response).to be_success + end + it 'logs me in' do + login user.nick, user.password + expect(page).to_not have_selector('.alert-error') + end + it 'does not log me in with wrong password' do + login user.nick, 'XX'+user.password + expect(page).to have_selector('.alert-error') + end + end + +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 5bf80082..36cda713 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -4,6 +4,9 @@ require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun' +require 'capybara/rails' +require 'capybara/rspec' + # 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 } @@ -17,9 +20,6 @@ RSpec.configure do |config| # 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. @@ -35,6 +35,8 @@ RSpec.configure do |config| # the seed, which is printed after each run. # --seed 1234 config.order = "random" + + config.include(SessionHelper) end module Faker @@ -46,3 +48,12 @@ module Faker end end end + +# include default foodsoft scope in urls, so that *_path works +ActionDispatch::Integration::Runner.class_eval do + undef default_url_options + def default_url_options(options={}) + {foodcoop: FoodsoftConfig.scope}.merge(options) + end +end + diff --git a/spec/support/session_helper.rb b/spec/support/session_helper.rb new file mode 100644 index 00000000..c54d3362 --- /dev/null +++ b/spec/support/session_helper.rb @@ -0,0 +1,15 @@ + +module SessionHelper + + def login(nick=nil, password=nil) + visit login_path + if nick.nil? + user = FactoryGirl.create :user + nick, password = user.nick, user.password + end + fill_in 'nick', :with => nick + fill_in 'password', :with => password + find('input[type=submit]').click + end + +end