# encoding: UTF-8 require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') describe PublicBodyHelper do include PublicBodyHelper describe :public_body_not_requestable_reasons do before do @body = FactoryGirl.build(:public_body) end it 'returns an empty array if there are no reasons' do expect(public_body_not_requestable_reasons(@body)).to eq([]) end it 'includes a reason if the law does not apply to the authority' do @body.tag_string = 'not_apply' msg = 'Freedom of Information law does not apply to this authority, so you cannot make a request to it.' expect(public_body_not_requestable_reasons(@body)).to include(msg) end it 'includes a reason if the body no longer exists' do @body.tag_string = 'defunct' msg = 'This authority no longer exists, so you cannot make a request to it.' expect(public_body_not_requestable_reasons(@body)).to include(msg) end it 'links to the request page if the body has no contact email' do @body.request_email = '' msg = %Q(Make a request to this authority).squish expect(public_body_not_requestable_reasons(@body)).to include(msg) end it 'returns the reasons in order of importance' do @body.tag_string = 'defunct not_apply' @body.request_email = '' reasons = public_body_not_requestable_reasons(@body) expect(reasons[0]).to match(/no longer exists/) expect(reasons[1]).to match(/does not apply/) expect(reasons[2]).to match(/Make a request/) end end describe :type_of_authority do it 'falls back to "A public authority"' do public_body = FactoryGirl.build(:public_body) expect(type_of_authority(public_body)).to eq('A public authority') end it 'handles Unicode' do category = FactoryGirl.create(:public_body_category, :category_tag => 'spec', :description => 'ünicode category') heading = FactoryGirl.create(:public_body_heading) heading.add_category(category) public_body = FactoryGirl.create(:public_body, :tag_string => 'spec') expect(type_of_authority(public_body)).to eq('Ünicode category') end it 'constructs the correct string if there are tags which are not categories' do heading = FactoryGirl.create(:public_body_heading) 3.times do |i| category = FactoryGirl.create(:public_body_category, :category_tag => "spec_#{i}", :description => "spec category #{i}") heading.add_category(category) end public_body = FactoryGirl.create(:public_body, :tag_string => 'unknown spec_0 spec_2') expected = 'Spec category 0 and spec category 2' expect(type_of_authority(public_body)).to eq(expected) end context 'when associated with one category' do it 'returns the description wrapped in an anchor tag' do category = FactoryGirl.create(:public_body_category, :category_tag => 'spec', :description => 'spec category') heading = FactoryGirl.create(:public_body_heading) heading.add_category(category) public_body = FactoryGirl.create(:public_body, :tag_string => 'spec') anchor = %Q(Spec category) expect(type_of_authority(public_body)).to eq(anchor) end end context 'when associated with several categories' do it 'joins the category descriptions and capitalizes the first letter' do heading = FactoryGirl.create(:public_body_heading) 3.times do |i| category = FactoryGirl.create(:public_body_category, :category_tag => "spec_#{i}", :description => "spec category #{i}") heading.add_category(category) end public_body = FactoryGirl.create(:public_body, :tag_string => 'spec_0 spec_1 spec_2') description = [ %Q(Spec category 0), ', ', %Q(spec category 1), ' and ', %Q(spec category 2) ].join('') expect(type_of_authority(public_body)).to eq(description) end end context 'when in a non-default locale' do it 'creates the anchor href in the correct locale' do # Activate the routing filter, normally turned off for helper tests RoutingFilter.active = true category = FactoryGirl.create(:public_body_category, :category_tag => 'spec', :description => 'spec category') heading = FactoryGirl.create(:public_body_heading) heading.add_category(category) public_body = FactoryGirl.create(:public_body, :tag_string => 'spec') anchor = %Q(Spec category) I18n.with_locale(:es) { expect(type_of_authority(public_body) ).to eq(anchor) } end end end end