require 'spec_helper' describe 'React::TopLevelRailsComponent', js: true do before :each do on_client do module Components module Controller class Component1 include React::Component def render self.class.name.to_s end end end class Component1 include React::Component def render self.class.name.to_s end end class Component2 include React::Component def render self.class.name.to_s end end end module Controller class SomeOtherClass # see issue #80 end end class Component1 include React::Component def render self.class.name.to_s end end def render_top_level(controller, component_name) params = { controller: controller, component_name: component_name, render_params: {} } component = React::Test::Utils.render_component_into_document(React::TopLevelRailsComponent, params) component.dom_node.JS[:outerHTML] end end end it 'uses the controller name to lookup a component' do expect_evaluate_ruby('render_top_level("Controller", "Component1")').to eq('<span>Components::Controller::Component1</span>') end it 'can find the name without matching the controller' do expect_evaluate_ruby('render_top_level("Controller", "Component2")').to eq('<span>Components::Component2</span>') end it 'will find the outer most matching component' do expect_evaluate_ruby('render_top_level("OtherController", "Component1")').to eq('<span>Component1</span>') end it 'can find the correct component when the name is fully qualified' do expect_evaluate_ruby('render_top_level("Controller", "::Components::Component1")').to eq('<span>Components::Component1</span>') end describe '.html_tag?' do it 'is truthy for valid html tags' do expect_evaluate_ruby('React.html_tag?("a")').to be_truthy expect_evaluate_ruby('React.html_tag?("div")').to be_truthy end it 'is truthy for valid svg tags' do expect_evaluate_ruby('React.html_tag?("svg")').to be_truthy expect_evaluate_ruby('React.html_tag?("circle")').to be_truthy end it 'is falsey for invalid tags' do expect_evaluate_ruby('React.html_tag?("tagizzle")').to be_falsey end end describe '.html_attr?' do it 'is truthy for valid html attributes' do expect_evaluate_ruby('React.html_attr?("id")').to be_truthy expect_evaluate_ruby('React.html_attr?("data")').to be_truthy end it 'is truthy for valid svg attributes' do expect_evaluate_ruby('React.html_attr?("cx")').to be_truthy expect_evaluate_ruby('React.html_attr?("strokeWidth")').to be_truthy end it 'is falsey for invalid attributes' do expect_evaluate_ruby('React.html_tag?("attrizzle")').to be_falsey end end end