require 'spec_helper' module ActiveAdminIntegrationSpecHelper extend self def load_defaults! ActiveAdmin.unload! ActiveAdmin.load! ActiveAdmin.register(Category) ActiveAdmin.register(User) ActiveAdmin.register(Post){ belongs_to :user, optional: true } reload_menus! end def reload_menus! ActiveAdmin.application.namespaces.each{|n| n.reset_menu! } end # Sometimes we need to reload the routes within # the application to test them out def reload_routes! Rails.application.reload_routes! end # Helper method to load resources and ensure that Active Admin is # setup with the new configurations. # # Eg: # load_resources do # ActiveAdmin.regiser(Post) # end # def load_resources ActiveAdmin.unload! yield reload_menus! reload_routes! end # Sets up a describe block where you can render controller # actions. Uses the Admin::PostsController as the subject # for the describe block def describe_with_render(*args, &block) describe *args do include RSpec::Rails::ControllerExampleGroup render_views # metadata[:behaviour][:describes] = ActiveAdmin.namespaces[:admin].resources['Post'].controller module_eval &block end end def arbre(assigns = {}, helpers = mock_action_view, &block) Arbre::Context.new(assigns, helpers, &block) end def render_arbre_component(assigns = {}, helpers = mock_action_view, &block) arbre(assigns, helpers, &block).children.first end # Setup a describe block which uses capybara and rails integration # test methods. def describe_with_capybara(*args, &block) describe *args do include RSpec::Rails::IntegrationExampleGroup module_eval &block end end # Returns a fake action view instance to use with our renderers def mock_action_view(assigns = {}) controller = ActionView::TestCase::TestController.new ActionView::Base.send :include, ActionView::Helpers ActionView::Base.send :include, ActiveAdmin::ViewHelpers ActionView::Base.send :include, Rails.application.routes.url_helpers ActionView::Base.new(ActionController::Base.view_paths, assigns, controller) end alias_method :action_view, :mock_action_view # A mock resource to register class MockResource end def with_translation(translation) I18n.backend.store_translations :en, translation yield ensure I18n.backend.reload! end end ENV['RAILS_ENV'] = 'test' ENV['RAILS_ROOT'] = File.expand_path("../rails/rails-#{ENV['RAILS']}", __FILE__) # Create the test app if it doesn't exists unless File.exists?(ENV['RAILS_ROOT']) system 'rake setup' end require 'rails' require 'active_record' require 'active_admin' require 'devise' ActiveAdmin.application.load_paths = [ENV['RAILS_ROOT'] + "/app/admin"] require ENV['RAILS_ROOT'] + '/config/environment' require 'rspec/rails' # Prevent Test::Unit's AutoRunner from executing during RSpec's rake task on # JRuby Test::Unit.run = true if defined?(Test::Unit) && Test::Unit.respond_to?(:run=) # Setup Some Admin stuff for us to play with include ActiveAdminIntegrationSpecHelper load_defaults! reload_routes! # Disabling authentication in specs so that we don't have to worry about # it allover the place ActiveAdmin.application.authentication_method = false ActiveAdmin.application.current_user_method = false RSpec.configure do |config| config.use_transactional_fixtures = true config.use_instantiated_fixtures = false config.render_views = false config.filter_run focus: true config.filter_run_excluding skip: true config.run_all_when_everything_filtered = true config.color = true devise = ActiveAdmin::Dependency.devise >= '4.2' ? Devise::Test::ControllerHelpers : Devise::TestHelpers config.include devise, type: :controller require 'support/active_admin_request_helpers' config.include ActiveAdminRequestHelpers, type: :request end # Force deprecations to raise an exception. # This would set `behavior = :raise`, but that wasn't added until Rails 4. ActiveSupport::Deprecation.behavior = -> message, callstack do e = StandardError.new message e.set_backtrace callstack.map(&:to_s) raise e end # improve the performance of the specs suite by not logging anything # see http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/ Rails.logger.level = 4 # Improves performance by forcing the garbage collector to run less often. unless ENV['DEFER_GC'] == '0' || ENV['DEFER_GC'] == 'false' require 'support/deferred_garbage_collection' RSpec.configure do |config| config.before(:all) { DeferredGarbageCollection.start } config.after(:all) { DeferredGarbageCollection.reconsider } end end # Make input type=hidden visible Capybara.ignore_hidden_elements = false