# encoding: utf-8 require 'spec_helper' describe 'country input' do include FormtasticSpecHelper before do @output_buffer = '' mock_everything end describe "when country_select is not available as a helper from a plugin" do it "should raise an error, sugesting the author installs a plugin" do lambda { semantic_form_for(@new_post) do |builder| concat(builder.input(:country, :as => :country)) end }.should raise_error end end describe "when country_select is available as a helper (from a plugin)" do before do concat(semantic_form_for(@new_post) do |builder| builder.stub!(:country_select).and_return(Formtastic::Util.html_safe("")) concat(builder.input(:country, :as => :country)) end) end it_should_have_input_wrapper_with_class("country") it_should_have_input_wrapper_with_class(:input) it_should_have_input_wrapper_with_id("post_country_input") # TODO -- needs stubbing inside the builder block, tricky! #it_should_apply_error_logic_for_input_type(:country) it 'should generate a label for the input' do output_buffer.should have_tag('form li label') output_buffer.should have_tag('form li label[@for="post_country"]') output_buffer.should have_tag('form li label', /Country/) end it "should generate a select" do output_buffer.should have_tag("form li select") end end describe ":priority_countries option" do it "should be passed down to the country_select helper when provided" do priority_countries = ["Foo", "Bah"] semantic_form_for(@new_post) do |builder| builder.stub!(:country_select).and_return(Formtastic::Util.html_safe("")) builder.should_receive(:country_select).with(:country, priority_countries, {}, {:id => "post_country", :required => false, :autofocus => false}).and_return(Formtastic::Util.html_safe("")) concat(builder.input(:country, :as => :country, :priority_countries => priority_countries)) end end it "should default to the @@priority_countries config when absent" do priority_countries = Formtastic::FormBuilder.priority_countries priority_countries.should_not be_empty priority_countries.should_not be_nil semantic_form_for(@new_post) do |builder| builder.stub!(:country_select).and_return(Formtastic::Util.html_safe("")) builder.should_receive(:country_select).with(:country, priority_countries, {}, {:id => "post_country", :required => false, :autofocus => false}).and_return(Formtastic::Util.html_safe("")) concat(builder.input(:country, :as => :country)) end end end describe "when namespace is provided" do before do @output_buffer = '' mock_everything concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder| builder.stub!(:country_select).and_return(Formtastic::Util.html_safe("")) builder.should_receive(:country_select).with(:country, [], {}, {:id => "context2_post_country", :required => false, :autofocus => false}).and_return(Formtastic::Util.html_safe("")) concat(builder.input(:country, :priority_countries => [])) end) end it_should_have_input_wrapper_with_id("context2_post_country_input") it_should_have_label_for("context2_post_country") end describe "matching" do describe "when the attribute is 'country'" do before do concat(semantic_form_for(@new_post) do |builder| builder.stub!(:country_select).and_return(Formtastic::Util.html_safe("")) concat(builder.input(:country)) end) end it "should render a country input" do output_buffer.should have_tag "form li.country" end end describe "whent the attribute is 'country_something'" do before do concat(semantic_form_for(@new_post) do |builder| concat(builder.input(:country_subdivision)) concat(builder.input(:country_code)) end) end it "should render a country input" do output_buffer.should_not have_tag "form li.country" output_buffer.should have_tag "form li.string", :count => 2 end end end end