module Parliament
  module Utils
    module TestHelpers
      module RSpecHelper

        def self.load_rspec_config(config)
          # RSpec.configure do |config|
            # rspec-expectations config goes here. You can use an alternate
            # assertion/expectation library such as wrong or the stdlib/minitest
            # assertions if you prefer.
            config.expect_with :rspec do |expectations|
              # This option will default to `true` in RSpec 4. It makes the `description`
              # and `failure_message` of custom matchers include text for helper methods
              # defined using `chain`, e.g.:
              #     be_bigger_than(2).and_smaller_than(4).description
              #     # => "be bigger than 2 and smaller than 4"
              # ...rather than:
              #     # => "be bigger than 2"
              expectations.include_chain_clauses_in_custom_matcher_descriptions = true
            end

            # rspec-mocks config goes here. You can use an alternate test double
            # library (such as bogus or mocha) by changing the `mock_with` option here.
            config.mock_with :rspec do |mocks|
              # Prevents you from mocking or stubbing a method that does not exist on
              # a real object. This is generally recommended, and will default to
              # `true` in RSpec 4.
              mocks.verify_partial_doubles = true
            end

            # These two settings work together to allow you to limit a spec run
            # to individual examples or groups you care about by tagging them with
            # `:focus` metadata. When nothing is tagged with `:focus`, all examples
            # get run.
            config.filter_run :focus
            config.run_all_when_everything_filtered = true

            # Disable RSpec exposing methods globally on `Module` and `main`
            config.disable_monkey_patching!

            # Many RSpec users commonly either run the entire suite or an individual
            # file, and it's useful to allow more verbose output when running an
            # individual spec file.
            if config.files_to_run.one?
              # Use the documentation formatter for detailed output,
              # unless a formatter has already been configured
              # (e.g. via a command-line flag).
              config.default_formatter = 'doc'
            end

            # Print the 10 slowest examples and example groups at the
            # end of the spec run, to help surface which specs are running
            # particularly slow.
            config.profile_examples = 10

            config.expect_with :rspec do |c|
              c.syntax = :expect
            end

            # 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

            # Seed global randomization in this process using the `--seed` CLI option.
            # Setting this allows you to use `--seed` to deterministically reproduce
            # test failures related to randomization by passing the same `--seed` value
            # as the one that triggered the failure.
            Kernel.srand config.seed
          # end
        end
      end
    end
  end
end