diff --git a/lib/sorcery/controller/submodules/activity_logging.rb b/lib/sorcery/controller/submodules/activity_logging.rb index 2339b0a4..996b386a 100644 --- a/lib/sorcery/controller/submodules/activity_logging.rb +++ b/lib/sorcery/controller/submodules/activity_logging.rb @@ -16,10 +16,7 @@ def self.included(base) base.send(:include, InstanceMethods) Config.module_eval do class << self - attr_accessor :register_login_time - attr_accessor :register_logout_time - attr_accessor :register_last_activity_time - attr_accessor :register_last_ip_address + attr_accessor :register_login_time, :register_logout_time, :register_last_activity_time, :register_last_ip_address def merge_activity_logging_defaults! @defaults.merge!(:@register_login_time => true, diff --git a/lib/sorcery/test_helpers/internal.rb b/lib/sorcery/test_helpers/internal.rb index 1201ac2b..941fc4dc 100644 --- a/lib/sorcery/test_helpers/internal.rb +++ b/lib/sorcery/test_helpers/internal.rb @@ -17,7 +17,7 @@ def cost # a patch to fix a bug in testing that happens when you 'destroy' a session twice. # After the first destroy, the session is an ordinary hash, and then when destroy # is called again there's an exception. - class ::Hash # rubocop:disable Style/ClassAndModuleChildren + class ::Hash def destroy clear end @@ -70,8 +70,6 @@ def reload_user_class User && Object.send(:remove_const, 'User') load 'user.rb' - return unless User.respond_to?(:reset_column_information) - User.reset_column_information end end diff --git a/lib/sorcery/test_helpers/internal/rails.rb b/lib/sorcery/test_helpers/internal/rails.rb index 78bf7e0f..3b11785b 100644 --- a/lib/sorcery/test_helpers/internal/rails.rb +++ b/lib/sorcery/test_helpers/internal/rails.rb @@ -19,14 +19,16 @@ def sorcery_reload!(submodules = [], options = {}) # remove all plugin before_actions so they won't fail other tests. # I don't like this way, but I didn't find another. - chain = SorceryController._process_action_callbacks.send :chain + callbacks = SorceryController._process_action_callbacks + chain = callbacks.send :chain chain.delete_if { |c| SUBMODULES_AUTO_ADDED_CONTROLLER_FILTERS.include?(c.filter) } + callbacks.instance_variable_set(:@all_callbacks, nil) + callbacks.instance_variable_set(:@single_callbacks, {}) # configure ::Sorcery::Controller::Config.submodules = submodules - ::Sorcery::Controller::Config.user_class = nil - ActionController::Base.send(:include, ::Sorcery::Controller) ::Sorcery::Controller::Config.user_class = 'User' + ActionController::Base.include(::Sorcery::Controller) ::Sorcery::Controller::Config.user_config do |user| options.each do |property, value| @@ -34,11 +36,6 @@ def sorcery_reload!(submodules = [], options = {}) end end User.authenticates_with_sorcery! - return unless defined?(DataMapper) && User.ancestors.include?(DataMapper::Resource) - - DataMapper.auto_migrate! - User.finalize - Authentication.finalize end def sorcery_controller_property_set(property, value) diff --git a/spec/controllers/controller_activity_logging_spec.rb b/spec/controllers/controller_activity_logging_spec.rb index bee7cae1..2fdd1c4e 100644 --- a/spec/controllers/controller_activity_logging_spec.rb +++ b/spec/controllers/controller_activity_logging_spec.rb @@ -1,30 +1,24 @@ require 'spec_helper' -# require 'shared_examples/controller_activity_logging_shared_examples' - describe SorceryController, type: :controller do + before(:all) do + MigrationHelper.migrate("#{Rails.root}/db/migrate/activity_logging") + end + after(:all) do + MigrationHelper.rollback("#{Rails.root}/db/migrate/activity_logging") sorcery_controller_property_set(:register_login_time, true) sorcery_controller_property_set(:register_logout_time, true) sorcery_controller_property_set(:register_last_activity_time, true) - # sorcery_controller_property_set(:last_login_from_ip_address_name, true) end # ----------------- ACTIVITY LOGGING ----------------------- context 'with activity logging features' do - let(:adapter) { double('sorcery_adapter') } - let(:user) { double('user', id: 42, sorcery_adapter: adapter) } + let!(:user) { User.create!(username: 'test_user', email: 'test@example.com', password: 'password') } - before(:all) do - sorcery_reload!([:activity_logging]) - end + before(:all) { sorcery_reload!([:activity_logging]) } before(:each) do - allow(user).to receive(:username) - allow(user).to receive_message_chain(:sorcery_config, :username_attribute_names, :first) { :username } - allow(User.sorcery_config).to receive(:last_login_at_attribute_name) { :last_login_at } - allow(User.sorcery_config).to receive(:last_login_from_ip_address_name) { :last_login_from_ip_address } - sorcery_controller_property_set(:register_login_time, false) sorcery_controller_property_set(:register_last_ip_address, false) sorcery_controller_property_set(:register_last_activity_time, false) @@ -35,9 +29,10 @@ Timecop.freeze(now) sorcery_controller_property_set(:register_login_time, true) - expect(user).to receive(:set_last_login_at).with(be_within(0.1).of(now)) login_user(user) + expect(user.reload.last_login_at).to be_within(0.1).of(now) + Timecop.return end @@ -45,10 +40,11 @@ login_user(user) now = Time.now.in_time_zone Timecop.freeze(now) - expect(user).to receive(:set_last_logout_at).with(be_within(0.1).of(now)) logout_user + expect(user.reload.last_logout_at).to be_within(0.1).of(now) + Timecop.return end @@ -58,56 +54,66 @@ login_user(user) now = Time.now.in_time_zone Timecop.freeze(now) - expect(user).to receive(:set_last_activity_at).with(be_within(0.1).of(now)) get :some_action + expect(user.reload.last_activity_at).to be_within(0.1).of(now) + Timecop.return end it 'logs last IP address when logged in' do sorcery_controller_property_set(:register_last_ip_address, true) - expect(user).to receive(:set_last_ip_address).with('0.0.0.0') login_user(user) + + expect(user.reload.last_login_from_ip_address).to eq('0.0.0.0') end it 'updates nothing but activity fields' do - pending 'Move to model' - original_user_name = User.last.username + sorcery_controller_property_set(:register_last_activity_time, true) + user = User.last + original_email = user.email + original_activity_at = user.last_activity_at login_user(user) get :some_action_making_a_non_persisted_change_to_the_user - - expect(User.last.username).to eq original_user_name + user.reload + expect(user.email).to eq original_email + expect(user.last_activity_at).not_to eq original_activity_at end it 'does not register login time if configured so' do sorcery_controller_property_set(:register_login_time, false) - expect(user).to receive(:set_last_login_at).never login_user(user) + + expect(user.reload.last_login_at).to be_nil end it 'does not register logout time if configured so' do sorcery_controller_property_set(:register_logout_time, false) login_user(user) - expect(user).to receive(:set_last_logout_at).never logout_user + + expect(user.reload.last_logout_at).to be_nil end it 'does not register last activity time if configured so' do sorcery_controller_property_set(:register_last_activity_time, false) - expect(user).to receive(:set_last_activity_at).never login_user(user) + get :some_action + + expect(user.reload.last_activity_at).to be_nil end it 'does not register last IP address if configured so' do sorcery_controller_property_set(:register_last_ip_address, false) - expect(user).to receive(:set_last_ip_address).never login_user(user) + + expect(user.reload.last_login_from_ip_address).to be_nil end end end diff --git a/spec/controllers/controller_brute_force_protection_spec.rb b/spec/controllers/controller_brute_force_protection_spec.rb index a871839d..8e249bc4 100644 --- a/spec/controllers/controller_brute_force_protection_spec.rb +++ b/spec/controllers/controller_brute_force_protection_spec.rb @@ -1,22 +1,21 @@ require 'spec_helper' describe SorceryController, type: :controller do - let(:user) { double('user', id: 42, email: 'bla@bla.com') } + let!(:user) { User.create!(username: 'test_user', email: 'bla@bla.com', password: 'password') } def request_test_login get :test_login, params: { email: 'bla@bla.com', password: 'blabla' } end - # ----------------- SESSION TIMEOUT ----------------------- + # ----------------- BRUTE FORCE PROTECTION ----------------------- describe 'brute force protection features' do before(:all) do + MigrationHelper.migrate("#{Rails.root}/db/migrate/brute_force_protection") sorcery_reload!([:brute_force_protection]) end - after(:each) do - Sorcery::Controller::Config.reset! - sorcery_controller_property_set(:user_class, User) - Timecop.return + after(:all) do + MigrationHelper.rollback("#{Rails.root}/db/migrate/brute_force_protection") end it 'counts login retries' do @@ -29,13 +28,15 @@ def request_test_login end it 'resets the counter on a good login' do - # dirty hack for rails 4 - allow(@controller).to receive(:register_last_activity_time_to_db) + # Set failed_logins_count to a non-zero value first + user.update!(failed_logins_count: 3) allow(User).to receive(:authenticate) { |&block| block.call(user, nil) } - expect(user).to receive_message_chain(:sorcery_adapter, :update_attribute).with(:failed_logins_count, 0) get :test_login, params: { email: 'bla@bla.com', password: 'secret' } + + user.reload + expect(user.failed_logins_count).to eq(0) end end end diff --git a/spec/controllers/controller_http_basic_auth_spec.rb b/spec/controllers/controller_http_basic_auth_spec.rb index f6b8f94f..b12d3018 100644 --- a/spec/controllers/controller_http_basic_auth_spec.rb +++ b/spec/controllers/controller_http_basic_auth_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe SorceryController, type: :controller do - let(:user) { double('user', id: 42, email: 'bla@bla.com') } + let!(:user) { User.create!(username: 'test_user', email: 'bla@bla.com', password: 'password') } describe 'with http basic auth features' do before(:all) do @@ -21,9 +21,6 @@ end it 'authenticates from http basic if credentials are sent' do - # dirty hack for rails 4 - allow(subject).to receive(:register_last_activity_time_to_db) - @request.env['HTTP_AUTHORIZATION'] = "Basic #{Base64.encode64("#{user.email}:secret")}" expect(User).to receive('authenticate').with('bla@bla.com', 'secret').and_return(user) get :test_http_basic_auth, params: {}, session: { http_authentication_used: true } @@ -53,15 +50,12 @@ end it "signs in the user's session on successful login" do - # dirty hack for rails 4 - allow(controller).to receive(:register_last_activity_time_to_db) - @request.env['HTTP_AUTHORIZATION'] = "Basic #{Base64.encode64("#{user.email}:secret")}" expect(User).to receive('authenticate').with('bla@bla.com', 'secret').and_return(user) get :test_http_basic_auth, params: {}, session: { http_authentication_used: true } - expect(session[:user_id]).to eq '42' + expect(session[:user_id]).to eq user.id.to_s end end end diff --git a/spec/controllers/controller_oauth2_spec.rb b/spec/controllers/controller_oauth2_spec.rb index 6d062095..ee0518e5 100644 --- a/spec/controllers/controller_oauth2_spec.rb +++ b/spec/controllers/controller_oauth2_spec.rb @@ -4,23 +4,18 @@ describe SorceryController, active_record: true, type: :controller do before(:all) do - if SORCERY_ORM == :active_record - MigrationHelper.migrate("#{Rails.root}/db/migrate/external") - MigrationHelper.migrate("#{Rails.root}/db/migrate/activation") - MigrationHelper.migrate("#{Rails.root}/db/migrate/activity_logging") - User.reset_column_information - end + MigrationHelper.migrate("#{Rails.root}/db/migrate/external") + MigrationHelper.migrate("#{Rails.root}/db/migrate/activation") + MigrationHelper.migrate("#{Rails.root}/db/migrate/activity_logging") sorcery_reload!([:external]) set_external_property end after(:all) do - if SORCERY_ORM == :active_record - MigrationHelper.rollback("#{Rails.root}/db/migrate/external") - MigrationHelper.rollback("#{Rails.root}/db/migrate/activity_logging") - MigrationHelper.rollback("#{Rails.root}/db/migrate/activation") - end + MigrationHelper.rollback("#{Rails.root}/db/migrate/external") + MigrationHelper.rollback("#{Rails.root}/db/migrate/activity_logging") + MigrationHelper.rollback("#{Rails.root}/db/migrate/activation") end describe 'using create_from' do @@ -58,7 +53,7 @@ sorcery_model_property_set(:authentications_class, Authentication) sorcery_controller_external_property_set(:facebook, :user_info_mapping, username: 'name') - u = double('user') + u = User.new expect(User).to receive(:create_from_provider).with('facebook', '123', { username: 'Noam Ben Ari' }).and_return(u).and_yield(u) # test_create_from_provider_with_block in controller will check for uniqueness of username get :test_create_from_provider_with_block, params: { provider: 'facebook' } @@ -68,17 +63,12 @@ # ----------------- OAuth ----------------------- context 'with OAuth features' do - let(:user) { double('user', id: 42) } + let!(:user) { User.create!(username: 'test_user', email: 'test@example.com', password: 'password') } before(:each) do stub_all_oauth2_requests! end - after(:each) do - User.sorcery_adapter.delete_all - Authentication.sorcery_adapter.delete_all - end - context 'when callback_url begin with /' do before do sorcery_controller_external_property_set(:facebook, :callback_url, '/oauth/twitter/callback') @@ -134,9 +124,6 @@ end it "'login_from' logins if user exists" do - # dirty hack for rails 4 - allow(subject).to receive(:register_last_activity_time_to_db) - sorcery_model_property_set(:authentications_class, Authentication) expect(User).to receive(:load_from_provider).with(:facebook, '123').and_return(user) get :test_login_from_facebook @@ -153,9 +140,6 @@ end it 'on successful login_from the user is redirected to the url he originally wanted' do - # dirty hack for rails 4 - allow(subject).to receive(:register_last_activity_time_to_db) - sorcery_model_property_set(:authentications_class, Authentication) expect(User).to receive(:load_from_provider).with(:facebook, '123').and_return(user) get :test_return_to_with_external_facebook, params: {}, session: { return_to_url: 'fuu' } @@ -174,9 +158,6 @@ end it "'login_from' logins if user exists" do - # dirty hack for rails 4 - allow(subject).to receive(:register_last_activity_time_to_db) - sorcery_model_property_set(:authentications_class, Authentication) expect(User).to receive(:load_from_provider).with(provider, '123').and_return(user) get :"test_login_from_#{provider}" @@ -193,9 +174,6 @@ end it "on successful login_from the user is redirected to the url he originally wanted (#{provider})" do - # dirty hack for rails 4 - allow(subject).to receive(:register_last_activity_time_to_db) - sorcery_model_property_set(:authentications_class, Authentication) expect(User).to receive(:load_from_provider).with(provider, '123').and_return(user) get :"test_return_to_with_external_#{provider}", params: {}, session: { return_to_url: 'fuu' } @@ -318,7 +296,7 @@ end describe 'OAuth with user activation features' do - let(:user) { double('user', id: 42) } + let!(:user) { User.create!(username: 'activation_user', email: 'activation@example.com', password: 'password') } before(:all) do sorcery_reload!(%i[activity_logging external]) @@ -361,7 +339,7 @@ sorcery_reload!(%i[session_timeout external]) end - let(:user) { double('user', id: 42) } + let!(:user) { User.create!(username: 'timeout_user', email: 'timeout@example.com', password: 'password') } %w[facebook github google liveid vk salesforce slack discord battlenet].each do |provider| context "when #{provider}" do @@ -386,7 +364,7 @@ it 'resets session after session timeout' do expect(User).to receive(:load_from_provider).with(provider.to_sym, '123').and_return(user) get "test_login_from_#{provider}".to_sym - expect(session[:user_id]).to eq '42' + expect(session[:user_id]).to eq user.id.to_s Timecop.travel(Time.now.in_time_zone + 0.6) get :test_should_be_logged_in diff --git a/spec/controllers/controller_oauth_spec.rb b/spec/controllers/controller_oauth_spec.rb index 925bc515..a37f0511 100644 --- a/spec/controllers/controller_oauth_spec.rb +++ b/spec/controllers/controller_oauth_spec.rb @@ -47,7 +47,7 @@ def response.body end describe SorceryController, type: :controller do - let(:user) { double('user', id: 42) } + let!(:user) { User.create!(username: 'test_user', email: 'test@example.com', password: 'password') } before(:all) do sorcery_reload!([:external]) @@ -174,7 +174,7 @@ def response.body sorcery_model_property_set(:authentications_class, Authentication) sorcery_controller_external_property_set(:twitter, :user_info_mapping, username: 'screen_name') - u = double('user') + u = User.new expect(User).to receive(:load_from_provider).with('twitter', '123').and_return(nil) expect(User).to receive(:create_from_provider).with('twitter', '123', { username: 'nbenari' }).and_return(u).and_yield(u) @@ -221,18 +221,12 @@ def response.body describe SorceryController, 'OAuth with session timeout features' do before(:all) do - if SORCERY_ORM == :active_record - MigrationHelper.migrate("#{Rails.root}/db/migrate/external") - User.reset_column_information - end - + MigrationHelper.migrate("#{Rails.root}/db/migrate/external") sorcery_reload!(%i[session_timeout external]) end after(:all) do - if SORCERY_ORM == :active_record - MigrationHelper.rollback("#{Rails.root}/db/migrate/external") - end + MigrationHelper.rollback("#{Rails.root}/db/migrate/external") end context 'when twitter' do diff --git a/spec/controllers/controller_remember_me_spec.rb b/spec/controllers/controller_remember_me_spec.rb index 386060e3..5e245aa2 100644 --- a/spec/controllers/controller_remember_me_spec.rb +++ b/spec/controllers/controller_remember_me_spec.rb @@ -1,30 +1,18 @@ require 'spec_helper' describe SorceryController, type: :controller do - let!(:user) { double('user', id: 42) } + let!(:user) { User.create!(username: 'test_user', email: 'test@example.com', password: 'password') } # ----------------- REMEMBER ME ----------------------- context 'with remember me features' do before(:all) do - if SORCERY_ORM == :active_record - MigrationHelper.migrate("#{Rails.root}/db/migrate/remember_me") - User.reset_column_information - end + MigrationHelper.migrate("#{Rails.root}/db/migrate/remember_me") sorcery_reload!([:remember_me]) end after(:all) do - if SORCERY_ORM == :active_record - MigrationHelper.rollback("#{Rails.root}/db/migrate/remember_me") - end - end - - before(:each) do - allow(user).to receive(:remember_me_token) - allow(user).to receive(:remember_me_token_expires_at) - allow(user).to receive_message_chain(:sorcery_config, :remember_me_token_attribute_name).and_return(:remember_me_token) - allow(user).to receive_message_chain(:sorcery_config, :remember_me_token_expires_at_attribute_name).and_return(:remember_me_token_expires_at) + MigrationHelper.rollback("#{Rails.root}/db/migrate/remember_me") end it 'sets cookie on remember_me!' do @@ -73,10 +61,7 @@ it 'logs user in from cookie' do session[:user_id] = user.id.to_s - expect(User.sorcery_adapter).to receive(:find_by_id).with(user.id.to_s).and_return(user) - expect(user).to receive(:remember_me!) - expect(user).to receive(:remember_me_token).and_return('token').twice - expect(user).to receive(:has_remember_me_token?) { true } + user.remember_me! subject.remember_me! subject.instance_eval do @@ -84,10 +69,7 @@ end session[:user_id] = nil - expect(User.sorcery_adapter).to receive(:find_by_remember_me_token).with('token').and_return(user) - - expect(subject).to receive(:after_remember_me!).with(user) - + # The real token will be used to find the user from cookie get :test_login_from_cookie expect(assigns[:current_user]).to eq user diff --git a/spec/controllers/controller_session_timeout_spec.rb b/spec/controllers/controller_session_timeout_spec.rb index 587df25d..d5333e84 100644 --- a/spec/controllers/controller_session_timeout_spec.rb +++ b/spec/controllers/controller_session_timeout_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe SorceryController, type: :controller do - let!(:user) { double('user', id: 42) } + let!(:user) { User.create!(username: 'test_user', email: 'test@example.com', password: 'password') } # ----------------- SESSION TIMEOUT ----------------------- context 'with session timeout features' do @@ -14,11 +14,6 @@ Timecop.return end - before(:each) do - allow(user).to receive(:username) - allow(user).to receive_message_chain(:sorcery_config, :username_attribute_names, :first) { :username } - end - it 'does not reset session before session timeout' do login_user user get :test_should_be_logged_in @@ -130,7 +125,6 @@ context "with 'session_timeout_from_last_action'" do before { create_new_user } - after { User.delete_all } it 'does not logout if there was activity' do sorcery_controller_property_set(:session_timeout_from_last_action, true) diff --git a/spec/controllers/controller_spec.rb b/spec/controllers/controller_spec.rb index dd041ac0..fcad3c9b 100644 --- a/spec/controllers/controller_spec.rb +++ b/spec/controllers/controller_spec.rb @@ -26,7 +26,7 @@ # ----------------- PLUGIN ACTIVATED ----------------------- context 'when activated with sorcery' do - let(:user) { double('user', id: 42) } + let!(:user) { User.create!(username: 'test_user', email: 'test@example.com', password: 'password') } before(:all) do sorcery_reload! @@ -85,7 +85,6 @@ it 'clears the session' do cookies[:remember_me_token] = nil session[:user_id] = user.id.to_s - expect(User.sorcery_adapter).to receive(:find_by_id).with('42') { user } get :test_logout expect(session[:user_id]).to be_nil @@ -95,7 +94,6 @@ describe '#logged_in?' do it 'returns true when user is logged in' do session[:user_id] = user.id.to_s - expect(User.sorcery_adapter).to receive(:find_by_id).with('42') { user } expect(subject.logged_in?).to be true end @@ -110,14 +108,12 @@ describe '#current_user' do it 'current_user returns the user instance if logged in' do session[:user_id] = user.id.to_s - expect(User.sorcery_adapter).to receive(:find_by_id).once.with('42') { user } 2.times { expect(subject.current_user).to eq user } # memoized! end it 'current_user returns false if not logged in' do session[:user_id] = nil - expect(User.sorcery_adapter).to_not receive(:find_by_id) 2.times { expect(subject.current_user).to be_nil } # memoized! end diff --git a/spec/rails_app/config/application.rb b/spec/rails_app/config/application.rb index 18de9ccf..0a4aed3f 100644 --- a/spec/rails_app/config/application.rb +++ b/spec/rails_app/config/application.rb @@ -4,22 +4,15 @@ require 'action_mailer/railtie' require 'rails/test_unit/railtie' -Bundler.require :default, SORCERY_ORM - -# rubocop:disable Lint/HandleExceptions -begin - require "#{SORCERY_ORM}/railtie" -rescue LoadError - # TODO: Log this issue or change require scheme. -end -# rubocop:enable Lint/HandleExceptions +Bundler.require :default +require 'active_record/railtie' require 'sorcery' module AppRoot class Application < Rails::Application - config.autoload_paths.reject! { |p| p =~ %r{/\/app\/(\w+)$/} && !%w[controllers helpers mailers views].include?(Regexp.last_match(1)) } - config.autoload_paths += ["#{config.root}/app/#{SORCERY_ORM}"] + config.autoload_paths.reject! { |p| p =~ %r{/app/(\w+)$} && !%w[controllers helpers mailers views].include?(Regexp.last_match(1)) } + config.autoload_paths += ["#{config.root}/app/active_record"] # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers diff --git a/spec/shared_examples/user_shared_examples.rb b/spec/shared_examples/user_shared_examples.rb index 9bc2e510..0c90aebb 100644 --- a/spec/shared_examples/user_shared_examples.rb +++ b/spec/shared_examples/user_shared_examples.rb @@ -319,7 +319,7 @@ class Admin2 < User; end describe 'generic send email' do before(:all) do MigrationHelper.migrate("#{Rails.root}/db/migrate/activation") - User.reset_column_information + sorcery_reload!([:activation]) end after(:all) do @@ -572,18 +572,14 @@ def self.matches?(crypted, *tokens) let(:external_user) { create_new_external_user :twitter } before(:all) do - if SORCERY_ORM == :active_record - MigrationHelper.migrate("#{Rails.root}/db/migrate/external") - MigrationHelper.migrate("#{Rails.root}/db/migrate/activation") - end + MigrationHelper.migrate("#{Rails.root}/db/migrate/external") + MigrationHelper.migrate("#{Rails.root}/db/migrate/activation") sorcery_reload! end after(:all) do - if SORCERY_ORM == :active_record - MigrationHelper.rollback("#{Rails.root}/db/migrate/external") - MigrationHelper.rollback("#{Rails.root}/db/migrate/activation") - end + MigrationHelper.rollback("#{Rails.root}/db/migrate/external") + MigrationHelper.rollback("#{Rails.root}/db/migrate/activation") end before(:each) do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ae0465bd..7db5ba54 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -3,8 +3,6 @@ ENV['RAILS_ENV'] ||= 'test' -SORCERY_ORM = :active_record - require 'rails/all' require 'rspec/rails' require 'timecop' @@ -14,7 +12,7 @@ def setup_orm; end def teardown_orm; end -require "orm/#{SORCERY_ORM}" +require 'orm/active_record' require 'rails_app/config/environment' @@ -26,7 +24,7 @@ class TestMailer < ActionMailer::Base; end config.include RSpec::Rails::ControllerExampleGroup, file_path: /controller(.)*_spec.rb$/ config.mock_with :rspec - config.use_transactional_fixtures = false + config.use_transactional_fixtures = true config.before(:suite) { setup_orm } config.after(:suite) { teardown_orm }