File: railtie_spec.rb

package info (click to toggle)
ruby-roadie-rails 3.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,280 kB
  • sloc: ruby: 1,670; sh: 47; makefile: 4
file content (64 lines) | stat: -rw-r--r-- 2,412 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# frozen_string_literal: true

require "spec_helper"

module Roadie
  module Rails
    describe Railtie do
      let(:rails_application) do
        double("Application", config: ::Rails::Railtie::Configuration.new)
      end

      before do
        allow(::Rails).to receive(:root).and_return Pathname.new("rails-root")
        allow(::Rails).to receive(:application).and_return rails_application
      end

      def run_initializer
        # Hack to make the Railtie able to be initialized again
        # Railties are global state, after all, stored on the classes.
        Railtie.instance_variable_set(:@instance, nil) # Embrace me, Cthulhu!
        Railtie.instance_variable_set(:@ran, nil)
        Railtie.run_initializers :default, rails_application
      end

      describe "asset providers" do
        it "has filesystem providers to common asset paths if asset pipeline is disabled" do
          run_initializer
          providers = Railtie.config.roadie.asset_providers.to_a
          expect(providers).to have(1).item

          expect(providers[0]).to be_instance_of(FilesystemProvider)
          expect(providers[0].path).to eq("rails-root/public")
        end

        it "also gets a AssetPipelineProvider if assets are enabled" do
          rails_application.config.assets = ActiveSupport::OrderedOptions.new

          asset_pipeline = double "The asset pipeline"
          allow(rails_application).to receive(:assets).and_return asset_pipeline
          run_initializer

          providers = Railtie.config.roadie.asset_providers.to_a
          expect(providers).to have(2).items
          expect(providers[0]).to be_instance_of(FilesystemProvider)
          expect(providers[1]).to be_instance_of(AssetPipelineProvider)
          expect(providers[1].pipeline).to eq(asset_pipeline)
        end

        # This happens inside a Rails engine as the parent app is the one
        # holding on to the pipeline.
        it "gets no AssetPipelineProvider if assets are enabled but not available" do
          rails_application.config.assets = ActiveSupport::OrderedOptions.new
          allow(rails_application).to receive(:assets).and_return nil

          run_initializer

          providers = Railtie.config.roadie.asset_providers.to_a
          expect(providers).to have(1).item
          expect(providers[0]).to be_instance_of(FilesystemProvider)
        end
      end
    end
  end
end