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.

(cherry picked from commit 228ca12)

# Conflicts:
#	admin/lib/solidus_admin/testing_support/component_helpers.rb
#	admin/spec/components/solidus_admin/base_component_spec.rb
  • Loading branch information
mamhoff authored and tvdeyen committed Jan 15, 2025
1 parent 8f41473 commit ffcddbe
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 10 deletions.
4 changes: 2 additions & 2 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 Down
11 changes: 3 additions & 8 deletions admin/spec/support/solidus_admin/component_helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,9 @@ module ComponentHelpers
# "Rendered"
# end
# end
def mock_component(&definition)
Class.new(SolidusAdmin::BaseComponent) do
# 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
def self.name
"Foo"
end
end.tap { |klass| klass.class_eval(&definition) if definition }
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

0 comments on commit ffcddbe

Please sign in to comment.