Skip to content

Commit

Permalink
[SolidusAdmin] Fix mock_component helper
Browse files Browse the repository at this point in the history
The mock component in the ComponentHelpers module was not a real
constant, which messes with ViewComponent's expectations about what
render_inline is given. Using `stub_const` in the helper allows us to
give it an actual name, and view_component > 3.21.0 will work for us.

The helper is only used in the base component spec. I could have spent
more time giving it an optional block, but this solution is the most
straightforward.
  • Loading branch information
mamhoff committed Jan 3, 2025
1 parent 9aa24a5 commit 228ca12
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 13 deletions.
12 changes: 3 additions & 9 deletions admin/lib/solidus_admin/testing_support/component_helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,9 @@ module ComponentHelpers
# "Rendered"
# end
# end
def mock_component(&definition)
location = caller(1, 1).first
component_class = Class.new(SolidusAdmin::BaseComponent)
# ViewComponent will complain if we don't fake a class name:
# @see https://github.com/ViewComponent/view_component/blob/5decd07842c48cbad82527daefa3fe9c65a4226a/lib/view_component/base.rb#L371
component_class.define_singleton_method(:name) { "Foo" }
component_class.define_singleton_method(:to_s) { "#{name} (#{location})" }
component_class.class_eval(&definition) if definition
component_class
def mock_component(class_name = "Foo::Component", &definition)
component_class = stub_const(class_name, Class.new(described_class, &definition))
component_class.new
end
end
end
Expand Down
7 changes: 3 additions & 4 deletions admin/spec/components/solidus_admin/base_component_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
def call
icon_tag("user-line")
end
end.new
end

render_inline(component)

Expand Down Expand Up @@ -42,7 +42,7 @@ def call

describe ".stimulus_id" do
it "returns the stimulus id for the component" do
stub_const("SolidusAdmin::Foo::Bar::Component", Class.new(described_class))
mock_component("SolidusAdmin::Foo::Bar::Component") { erb_template "" }

expect(SolidusAdmin::Foo::Bar::Component.stimulus_id).to eq("foo--bar")
expect(SolidusAdmin::Foo::Bar::Component.new.stimulus_id).to eq("foo--bar")
Expand All @@ -55,8 +55,7 @@ def call

allow(Rails.logger).to receive(:debug) { debug_logs << _1 }

component_class = stub_const("Foo::Component", Class.new(described_class){ erb_template "" })
component = component_class.new
component = mock_component { erb_template "" }
render_inline(component)
translation = component.translate("foo.bar.baz")

Expand Down

0 comments on commit 228ca12

Please sign in to comment.