Provided by: ruby-combustion_1.3.7-1_all bug

NAME

       Combustion

       Combustion  is a library to help you test your Rails Engines in a simple and effective manner, instead of
       creating a full Rails application in your spec or test folder.

       It allows you to write your specs within the context of your engine, using only the parts of a Rails  app
       you need.

Usage

       Get  the  gem  into  either  your  gemspec  or  your  Gemfile,  depending on how you manage your engine's
       dependencies:

         # gemspec
         gem.add_development_dependency 'combustion', '~> 1.3'

         # Gemfile
         gem 'combustion', '~> 1.3'

       In your spec_helper.rb, get Combustion to set itself up -  which  has  to  happen  before  you  introduce
       rspec/rails and - if being used - capybara/rails. Here's an example within context:

         require 'bundler'

         Bundler.require :default, :development

         # If you're using all parts of Rails:
         Combustion.initialize! :all
         # Or, load just what you need:
         # Combustion.initialize! :active_record, :action_controller

         require 'rspec/rails'
         # If you're using Capybara:
         # require 'capybara/rails'

         RSpec.configure do |config|
           config.use_transactional_fixtures = true
         end

       Please  note  that  using :all as an argument for Combustion.initialize! will load all key parts of Rails
       that are considered essential for that version. For example: ActiveJob  is  only  loaded  for  Rails  4.2
       onwards,  and  Sprockets  is only loaded for Rails 3.1-6.1 (as it is no longer part of the default set in
       7.0).

       You'll also want to run the generator that creates a minimal set of files expected by Rails - run this in
       the directory of your engine:

         combust

         # or, if bundling with the git repo:
         bundle exec combust

       Minitest  support  is  considered  to  be   experimental,   but   it's   certainly   working   for   some
       https://github.com/pat/combustion/issues/78. Comments on others' experiences are welcome!

       What  Combustion  is  doing is setting up a Rails application at spec/internal - but you only need to add
       the files within that directory that you're going to use.  Read  on  for  some  detail  about  what  that
       involves.

       If   you   want   to   use   Cucumber,   I   recommend   starting   with   these   notes   in  issue  #16
       https://github.com/pat/combustion/issues/16 from Niklas Cathor.

   Configuring a different test app directory
       If you want your app to be located somewhere other than spec/internal, then make sure  you  configure  it
       before you call Combustion.initialize!:

         Combustion.path = 'spec/dummy'
         Combustion.initialize! :all

   Configuring which Rails modules should be loaded.
       By  default,  Combustion  doesn't  come with any of the Rails stack. You can customise this though - just
       pass in what you'd like loaded to the Combustion.initialize! call:

         Combustion.initialize! :active_record, :action_controller,
                                :action_view, :sprockets

       And then in your engine's Gemfile:

         group :test do
           gem 'activerecord'
           gem 'actionpack' # action_controller, action_view
           gem 'sprockets'
         end

       Make sure to specify the appropriate version that you want to use.

       ActiveSupport and Railties are always loaded, as they're an integral part of Rails.

   Using Models and ActiveRecord
       If you're using ActiveRecord, then there are two  critical  files  within  your  internal  Rails  app  at
       spec/internal that you'll need to modify:

       • config/database.yml

       • db/schema.rb

       Both  follow  the  same structure as in any normal Rails application - and the schema file lets you avoid
       migrations, as it gets run whenever the test suite starts. Here's a quick sample (note  that  tables  are
       overwritten if they already exist - this is necessary):

         ActiveRecord::Schema.define do
           create_table(:pages, :force => true) do |t|
             t.string :name
             t.text   :content
             t.timestamps
           end
         end

   Disabling Database Preparation
       If you are preparing your own database manually or through different processes, you can disable different
       parts  of the setup process by the following flags: :database_reset, :load_schema, and :database_migrate.
       All default to true.

         Combustion.initialize! :active_record,
           :database_reset => false,
           :load_schema    => false

   Configuring Combustion to initialise the test db from a .sql file instead of schema.rb
       Name the file structure.sql and configure Combustion to use it before initialising:

         Combustion.schema_format = :sql
         Combustion.initialize! :all

       Any models that aren't provided by your engine should be located at spec/internal/app/models.

   Using ActionController and ActionView
       You'll only need to add controllers and views to your internal Rails app for whatever you're testing that
       your  engine  doesn't  provide  -  this  may  be  nothing  at  all,  so  perhaps  you  don't  even   need
       spec/internal/app/views or spec/internal/app/controllers directories.

       However,  if  you're  doing  any testing of your engine's controllers or views, then you're going to need
       routes set up for them - so modify spec/internal/config/routes.rb accordingly:

         Rails.application.routes.draw do
           resources :pages
         end

       Just like in a standard Rails app, if you have a mounted engine, then its routes are  accessible  through
       whatever it has been loaded as.

   Customizing Rails application settings
       If  you  would  like  to  specify  any  Rails configuration parameter, you can do it without creating any
       environment file, simply passing a block to Combustion.initialize! like this:

         Combustion.initialize! :all do
           config.active_record.whitelist_attributes = false
         end

       Values given through the initialize! block will be  set  during  Rails  initialization  process,  exactly
       before  the  corresponding environment file inside spec/internals/config/enviroments is loaded (when that
       file exists), overriding Combustion's defaults.

       Parameters  defined  in,  for  instance,   spec/internals/config/environments/test.rb,   would   override
       Combustion's defaults and also config settings passed to initialize!.

   Using other Rails-focused libraries
       Be aware that other gems may require parts of Rails when they're loaded, and this could cause some issues
       with  Combustion's own setup. You may need to manage the loading yourself by setting :require to false in
       your Gemfile for the gem in question, and then requiring it manually in your spec_helper. View issue  #33
       https://github.com/pat/combustion/issues/33 for an example with FactoryBot.

   Environment and Logging
       Your  tests  will  execute  within  the  test  environment  for  the internal Rails app - and so logs are
       available at spec/internal/log/test.log. You should probably create that log directory so  Rails  doesn't
       complain.

   Rack it up
       Once  you've  got this set up, you can fire up your test environment quite easily with Rack - a config.ru
       file is provided by the generator. Just run rackup and visit http://localhost:9292 http://localhost:9292.

   Get your test on!
       Now you're good to go - you can write specs within your  engine's  spec  directory  just  like  you  were
       testing  a  full Rails application - models in spec/models, controllers in spec/controllers. If you bring
       Capybara into the mix, then the standard helpers from that will be loaded as well.

         require 'spec_helper'

         describe Page do
           describe '#valid' do
             it 'requires a name' do
               # This is just an example. Go write your own tests!
             end
           end
         end

Compatibility

       The current test matrix covers MRI 2.4 to 3.1, and Rails 3.1 to 7.0.  It  will  possibly  work  on  older
       versions and other Ruby implementations as well.

       You  can also use Combustion with multiple versions of Rails to test compatibility across them. Appraisal
       https://github.com/thoughtbot/appraisal is a gem that can help with this, and a good  starting  reference
       is  the  Thinking  Sphinx  https://github.com/pat/thinking-sphinx test suite, which runs against multiple
       versions https://github.com/pat/thinking-sphinx/blob/master/Appraisals of Rails.

Limitations and Known Issues

       Combustion is currently written with the expectation it'll be used with RSpec, but  others  have  got  it
       working  with Minitest https://github.com/pat/combustion/issues/78. I'd love to make this more flexible -
       if you want to give it a shot before I get around to it, patches are very much welcome.

       I've not tried using this with Cucumber, but it should work in theory without too  much  hassle.  Let  me
       know if I'm wrong!

Contributing

       Please     note     that     this     project     now    has    a    Contributor    Code    of    Conduct
       http://contributor-covenant.org/version/1/0/0/. By participating in this project you agree  to  abide  by
       its terms.

       Contributions are very much welcome - but keep in mind the following:

       • Keep patches in a separate branch

       • Don't mess with the version or history file. I'll take care of that when the patch is merged in.

       The tests are extremely minimal, and patches to extend the suite are especially welcome.

Credits

       Copyright  (c)  2011-2021, Combustion is developed and maintained by Pat Allan, and is released under the
       open MIT Licence. Many thanks to HyperTiny for encouraging its development, and all who have  contributed
       patches https://github.com/pat/combustion/contributors.

                                                  November 2022                                     COMBUSTION()