diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/admin_public_body_change_requests_controller_spec.rb | 35 | ||||
-rw-r--r-- | spec/controllers/admin_public_body_controller_spec.rb | 459 | ||||
-rw-r--r-- | spec/controllers/public_body_change_requests_controller_spec.rb | 99 | ||||
-rw-r--r-- | spec/factories.rb | 12 | ||||
-rw-r--r-- | spec/models/public_body_change_request_spec.rb | 139 |
5 files changed, 578 insertions, 166 deletions
diff --git a/spec/controllers/admin_public_body_change_requests_controller_spec.rb b/spec/controllers/admin_public_body_change_requests_controller_spec.rb new file mode 100644 index 000000000..b478e851d --- /dev/null +++ b/spec/controllers/admin_public_body_change_requests_controller_spec.rb @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe AdminPublicBodyChangeRequestsController, "editing a change request" do + + it "should render the edit template" do + change_request = FactoryGirl.create(:add_body_request) + get :edit, :id => change_request.id + response.should render_template("edit") + end + +end + +describe AdminPublicBodyChangeRequestsController, 'updating a change request' do + + before do + @change_request = FactoryGirl.create(:add_body_request) + post :update, { :id => @change_request.id, + :response => 'Thanks but no', + :subject => 'Your request' } + end + + it 'should close the change request' do + PublicBodyChangeRequest.find(@change_request.id).is_open.should == false + end + + it 'should send a response email to the user who requested the change' do + deliveries = ActionMailer::Base.deliveries + deliveries.size.should == 1 + mail = deliveries[0] + mail.subject.should == 'Your request' + mail.to.should == [@change_request.get_user_email] + mail.body.should =~ /Thanks but no/ + end +end diff --git a/spec/controllers/admin_public_body_controller_spec.rb b/spec/controllers/admin_public_body_controller_spec.rb index fe5087d7c..095d23245 100644 --- a/spec/controllers/admin_public_body_controller_spec.rb +++ b/spec/controllers/admin_public_body_controller_spec.rb @@ -1,6 +1,6 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') -describe AdminPublicBodyController, "when administering public bodies" do +describe AdminPublicBodyController, "when showing the index of public bodies" do render_views it "shows the index page" do @@ -12,28 +12,255 @@ describe AdminPublicBodyController, "when administering public bodies" do assigns[:public_bodies].should == [ public_bodies(:humpadink_public_body) ] end + it "searches for 'humpa' in another locale" do + get :index, {:query => "humpa", :locale => "es"} + assigns[:public_bodies].should == [ public_bodies(:humpadink_public_body) ] + end + +end + +describe AdminPublicBodyController, "when showing a public body" do + render_views + it "shows a public body" do get :show, :id => 2 end - it "creates a new public body" do + it "sets a using_admin flag" do + get :show, :id => 2 + session[:using_admin].should == 1 + end + + it "shows a public body in another locale" do + get :show, {:id => 2, :locale => "es" } + end + +end + +describe AdminPublicBodyController, 'when showing the form for a new public body' do + + it 'should assign a new public body to the view' do + get :new + assigns[:public_body].should be_a(PublicBody) + end + + context 'when passed a change request id as a param' do + render_views + + it 'should populate the name, email address and last edit comment on the public body' do + change_request = FactoryGirl.create(:add_body_request) + get :new, :change_request_id => change_request.id + assigns[:public_body].name.should == change_request.public_body_name + assigns[:public_body].request_email.should == change_request.public_body_email + assigns[:public_body].last_edit_comment.should match('Notes: Please') + end + + it 'should assign a default response text to the view' do + change_request = FactoryGirl.create(:add_body_request) + get :new, :change_request_id => change_request.id + assigns[:change_request_user_response].should match("Thanks for your suggestion to add A New Body") + end + end + +end + +describe AdminPublicBodyController, "when creating a public body" do + render_views + + it "creates a new public body in one locale" do + n = PublicBody.count + post :create, { :public_body => { :name => "New Quango", + :short_name => "", + :tag_string => "blah", + :request_email => 'newquango@localhost', + :last_edit_comment => 'From test code' } } + PublicBody.count.should == n + 1 + + body = PublicBody.find_by_name("New Quango") + response.should redirect_to(:controller=>'admin_public_body', :action=>'show', :id=>body.id) + end + + it "creates a new public body with multiple locales" do n = PublicBody.count - post :create, { :public_body => { :name => "New Quango", :short_name => "", :tag_string => "blah", :request_email => 'newquango@localhost', :last_edit_comment => 'From test code' } } + post :create, { + :public_body => { :name => "New Quango", + :short_name => "", + :tag_string => "blah", + :request_email => 'newquango@localhost', + :last_edit_comment => 'From test code', + :translated_versions => [{ :locale => "es", + :name => "Mi Nuevo Quango", + :short_name => "", + :request_email => 'newquango@localhost' }] + } + } PublicBody.count.should == n + 1 + + body = PublicBody.find_by_name("New Quango") + body.translations.map {|t| t.locale.to_s}.sort.should == ["en", "es"] + I18n.with_locale(:en) do + body.name.should == "New Quango" + body.url_name.should == "new_quango" + body.first_letter.should == "N" + end + I18n.with_locale(:es) do + body.name.should == "Mi Nuevo Quango" + body.url_name.should == "mi_nuevo_quango" + body.first_letter.should == "M" + end + + response.should redirect_to(:controller=>'admin_public_body', :action=>'show', :id=>body.id) + end + + context 'when the body is being created as a result of a change request' do + + before do + @change_request = FactoryGirl.create(:add_body_request) + post :create, { :public_body => { :name => "New Quango", + :short_name => "", + :tag_string => "blah", + :request_email => 'newquango@localhost', + :last_edit_comment => 'From test code' }, + :change_request_id => @change_request.id, + :subject => 'Adding a new body', + :response => 'The URL will be [Authority URL will be inserted here]'} + end + + it 'should send a response to the requesting user' do + deliveries = ActionMailer::Base.deliveries + deliveries.size.should == 1 + mail = deliveries[0] + mail.subject.should == 'Adding a new body' + mail.to.should == [@change_request.get_user_email] + mail.body.should =~ /The URL will be http:\/\/test.host\/body\/new_quango/ + end + + it 'should mark the change request as closed' do + PublicBodyChangeRequest.find(@change_request.id).is_open.should be_false + end + end +end + +describe AdminPublicBodyController, "when editing a public body" do + render_views + it "edits a public body" do get :edit, :id => 2 end + it "edits a public body in another locale" do + get :edit, {:id => 3, :locale => :en} + + # When editing a body, the controller returns all available translations + assigns[:public_body].find_translation_by_locale("es").name.should == 'El Department for Humpadinking' + assigns[:public_body].name.should == 'Department for Humpadinking' + response.should render_template('edit') + end + + context 'when passed a change request id as a param' do + render_views + + before do + @change_request = FactoryGirl.create(:update_body_request) + get :edit, :id => @change_request.public_body_id, :change_request_id => @change_request.id + end + + it 'should populate the email address and last edit comment on the public body' do + change_request = FactoryGirl.create(:update_body_request) + get :edit, :id => change_request.public_body_id, :change_request_id => change_request.id + assigns[:public_body].request_email.should == @change_request.public_body_email + assigns[:public_body].last_edit_comment.should match('Notes: Please') + end + + it 'should assign a default response text to the view' do + assigns[:change_request_user_response].should match("Thanks for your suggestion to update the email address") + end + end + +end + +describe AdminPublicBodyController, "when updating a public body" do + render_views + it "saves edits to a public body" do public_bodies(:humpadink_public_body).name.should == "Department for Humpadinking" - post :update, { :id => 3, :public_body => { :name => "Renamed", :short_name => "", :tag_string => "some tags", :request_email => 'edited@localhost', :last_edit_comment => 'From test code' } } + post :update, { :id => 3, :public_body => { :name => "Renamed", + :short_name => "", + :tag_string => "some tags", + :request_email => 'edited@localhost', + :last_edit_comment => 'From test code' } } request.flash[:notice].should include('successful') pb = PublicBody.find(public_bodies(:humpadink_public_body).id) pb.name.should == "Renamed" end + it "saves edits to a public body in another locale" do + I18n.with_locale(:es) do + pb = PublicBody.find(id=3) + pb.name.should == "El Department for Humpadinking" + post :update, { + :id => 3, + :public_body => { + :name => "Department for Humpadinking", + :short_name => "", + :tag_string => "some tags", + :request_email => 'edited@localhost', + :last_edit_comment => 'From test code', + :translated_versions => { + 3 => {:locale => "es", + :name => "Renamed", + :short_name => "", + :request_email => 'edited@localhost'} + } + } + } + request.flash[:notice].should include('successful') + end + + pb = PublicBody.find(public_bodies(:humpadink_public_body).id) + I18n.with_locale(:es) do + pb.name.should == "Renamed" + end + I18n.with_locale(:en) do + pb.name.should == "Department for Humpadinking" + end + end + + context 'when the body is being updated as a result of a change request' do + + before do + @change_request = FactoryGirl.create(:update_body_request) + post :update, { :id => @change_request.public_body_id, + :public_body => { :name => "New Quango", + :short_name => "", + :request_email => 'newquango@localhost', + :last_edit_comment => 'From test code' }, + :change_request_id => @change_request.id, + :subject => 'Body update', + :response => 'Done.'} + end + + it 'should send a response to the requesting user' do + deliveries = ActionMailer::Base.deliveries + deliveries.size.should == 1 + mail = deliveries[0] + mail.subject.should == 'Body update' + mail.to.should == [@change_request.get_user_email] + mail.body.should =~ /Done./ + end + + it 'should mark the change request as closed' do + PublicBodyChangeRequest.find(@change_request.id).is_open.should be_false + end + + end +end + +describe AdminPublicBodyController, "when destroying a public body" do + render_views + it "does not destroy a public body that has associated requests" do id = public_bodies(:humpadink_public_body).id n = PublicBody.count @@ -49,10 +276,10 @@ describe AdminPublicBodyController, "when administering public bodies" do PublicBody.count.should == n - 1 end - it "sets a using_admin flag" do - get :show, :id => 2 - session[:using_admin].should == 1 - end +end + +describe AdminPublicBodyController, "when assigning public body tags" do + render_views it "mass assigns tags" do condition = "public_body_translations.locale = ?" @@ -62,81 +289,81 @@ describe AdminPublicBodyController, "when administering public bodies" do response.should redirect_to(:action=>'list') PublicBody.find_by_tag("department").count.should == n end +end - describe 'import_csv' do +describe AdminPublicBodyController, "when importing a csv" do + render_views - describe 'when handling a GET request' do + describe 'when handling a GET request' do - it 'should get the page successfully' do - get :import_csv - response.should be_success - end + it 'should get the page successfully' do + get :import_csv + response.should be_success + end + end + + describe 'when handling a POST request' do + + before do + PublicBody.stub!(:import_csv).and_return([[],[]]) + @file_object = fixture_file_upload('/files/fake-authority-type.csv') end - describe 'when handling a POST request' do + it 'should handle a nil csv file param' do + post :import_csv, { :commit => 'Dry run' } + response.should be_success + end - before do - PublicBody.stub!(:import_csv).and_return([[],[]]) - @file_object = fixture_file_upload('/files/fake-authority-type.csv') + describe 'if there is a csv file param' do + + it 'should try to get the contents and original name of a csv file param' do + @file_object.should_receive(:read).and_return('some contents') + post :import_csv, { :csv_file => @file_object, + :commit => 'Dry run'} end - it 'should handle a nil csv file param' do - post :import_csv, { :commit => 'Dry run' } - response.should be_success + it 'should assign the original filename to the view' do + post :import_csv, { :csv_file => @file_object, + :commit => 'Dry run'} + assigns[:original_csv_file].should == 'fake-authority-type.csv' end - describe 'if there is a csv file param' do + end - it 'should try to get the contents and original name of a csv file param' do - @file_object.should_receive(:read).and_return('some contents') - post :import_csv, { :csv_file => @file_object, - :commit => 'Dry run'} - end + describe 'if there is no csv file param, but there are temporary_csv_file and + original_csv_file params' do - it 'should assign the original filename to the view' do - post :import_csv, { :csv_file => @file_object, - :commit => 'Dry run'} - assigns[:original_csv_file].should == 'fake-authority-type.csv' - end + it 'should try and get the file contents from a temporary file whose name + is passed as a param' do + @controller.should_receive(:retrieve_csv_data).with('csv_upload-2046-12-31-394') + post :import_csv, { :temporary_csv_file => 'csv_upload-2046-12-31-394', + :original_csv_file => 'original_contents.txt', + :commit => 'Dry run'} + end + it 'should raise an error on an invalid temp file name' do + params = { :temporary_csv_file => 'bad_name', + :original_csv_file => 'original_contents.txt', + :commit => 'Dry run'} + expected_error = "Invalid filename in upload_csv: bad_name" + lambda{ post :import_csv, params }.should raise_error(expected_error) end - describe 'if there is no csv file param, but there are temporary_csv_file and - original_csv_file params' do - - it 'should try and get the file contents from a temporary file whose name - is passed as a param' do - @controller.should_receive(:retrieve_csv_data).with('csv_upload-2046-12-31-394') - post :import_csv, { :temporary_csv_file => 'csv_upload-2046-12-31-394', - :original_csv_file => 'original_contents.txt', - :commit => 'Dry run'} - end - - it 'should raise an error on an invalid temp file name' do - params = { :temporary_csv_file => 'bad_name', - :original_csv_file => 'original_contents.txt', - :commit => 'Dry run'} - expected_error = "Invalid filename in upload_csv: bad_name" - lambda{ post :import_csv, params }.should raise_error(expected_error) - end - - it 'should raise an error if the temp file does not exist' do - temp_name = "csv_upload-20461231-394" - params = { :temporary_csv_file => temp_name, - :original_csv_file => 'original_contents.txt', - :commit => 'Dry run'} - expected_error = "Missing file in upload_csv: csv_upload-20461231-394" - lambda{ post :import_csv, params }.should raise_error(expected_error) - end - - it 'should assign the temporary filename to the view' do - post :import_csv, { :csv_file => @file_object, - :commit => 'Dry run'} - temporary_filename = assigns[:temporary_csv_file] - temporary_filename.should match(/csv_upload-#{Time.now.strftime("%Y%m%d")}-\d{1,5}/) - end + it 'should raise an error if the temp file does not exist' do + temp_name = "csv_upload-20461231-394" + params = { :temporary_csv_file => temp_name, + :original_csv_file => 'original_contents.txt', + :commit => 'Dry run'} + expected_error = "Missing file in upload_csv: csv_upload-20461231-394" + lambda{ post :import_csv, params }.should raise_error(expected_error) + end + it 'should assign the temporary filename to the view' do + post :import_csv, { :csv_file => @file_object, + :commit => 'Dry run'} + temporary_filename = assigns[:temporary_csv_file] + temporary_filename.should match(/csv_upload-#{Time.now.strftime("%Y%m%d")}-\d{1,5}/) end end @@ -266,103 +493,3 @@ describe AdminPublicBodyController, "when administering public bodies and paying end end -describe AdminPublicBodyController, "when administering public bodies with i18n" do - render_views - - it "shows the index page" do - get :index - end - - it "searches for 'humpa'" do - get :index, {:query => "humpa", :locale => "es"} - assigns[:public_bodies].should == [ public_bodies(:humpadink_public_body) ] - end - - it "shows a public body" do - get :show, {:id => 2, :locale => "es" } - end - - it "edits a public body" do - get :edit, {:id => 3, :locale => :en} - - # When editing a body, the controller returns all available translations - assigns[:public_body].find_translation_by_locale("es").name.should == 'El Department for Humpadinking' - assigns[:public_body].name.should == 'Department for Humpadinking' - response.should render_template('edit') - end - - it "saves edits to a public body" do - I18n.with_locale(:es) do - pb = PublicBody.find(id=3) - pb.name.should == "El Department for Humpadinking" - post :update, { - :id => 3, - :public_body => { - :name => "Department for Humpadinking", - :short_name => "", - :tag_string => "some tags", - :request_email => 'edited@localhost', - :last_edit_comment => 'From test code', - :translated_versions => { - 3 => {:locale => "es", :name => "Renamed",:short_name => "", :request_email => 'edited@localhost'} - } - } - } - request.flash[:notice].should include('successful') - end - - pb = PublicBody.find(public_bodies(:humpadink_public_body).id) - I18n.with_locale(:es) do - pb.name.should == "Renamed" - end - I18n.with_locale(:en) do - pb.name.should == "Department for Humpadinking" - end - end - - it "destroy a public body" do - n = PublicBody.count - post :destroy, { :id => public_bodies(:forlorn_public_body).id } - PublicBody.count.should == n - 1 - end - -end - -describe AdminPublicBodyController, "when creating public bodies with i18n" do - render_views - - it "creates a new public body in one locale" do - n = PublicBody.count - post :create, { :public_body => { :name => "New Quango", :short_name => "", :tag_string => "blah", :request_email => 'newquango@localhost', :last_edit_comment => 'From test code' } } - PublicBody.count.should == n + 1 - - body = PublicBody.find_by_name("New Quango") - response.should redirect_to(:controller=>'admin_public_body', :action=>'show', :id=>body.id) - end - - it "creates a new public body with multiple locales" do - n = PublicBody.count - post :create, { - :public_body => { - :name => "New Quango", :short_name => "", :tag_string => "blah", :request_email => 'newquango@localhost', :last_edit_comment => 'From test code', - :translated_versions => [{ :locale => "es", :name => "Mi Nuevo Quango", :short_name => "", :request_email => 'newquango@localhost' }] - } - } - PublicBody.count.should == n + 1 - - body = PublicBody.find_by_name("New Quango") - body.translations.map {|t| t.locale.to_s}.sort.should == ["en", "es"] - I18n.with_locale(:en) do - body.name.should == "New Quango" - body.url_name.should == "new_quango" - body.first_letter.should == "N" - end - I18n.with_locale(:es) do - body.name.should == "Mi Nuevo Quango" - body.url_name.should == "mi_nuevo_quango" - body.first_letter.should == "M" - end - - response.should redirect_to(:controller=>'admin_public_body', :action=>'show', :id=>body.id) - end -end diff --git a/spec/controllers/public_body_change_requests_controller_spec.rb b/spec/controllers/public_body_change_requests_controller_spec.rb new file mode 100644 index 000000000..7b878b893 --- /dev/null +++ b/spec/controllers/public_body_change_requests_controller_spec.rb @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe PublicBodyChangeRequestsController, "making a new change request" do + + it "should show the form" do + get :new + response.should render_template("new") + end + +end + +describe PublicBodyChangeRequestsController, "creating a change request" do + + context 'when handling a request for a new authority' do + + before do + @email = "test@example.com" + name = "Test User" + @change_request_params = {:user_email => @email, + :user_name => name, + :public_body_name => 'New Body', + :public_body_email => 'new_body@example.com', + :notes => 'Please', + :source => 'http://www.example.com'} + end + + it "should send an email to the site contact address" do + post :create, {:public_body_change_request => @change_request_params} + deliveries = ActionMailer::Base.deliveries + deliveries.size.should == 1 + mail = deliveries[0] + mail.subject.should =~ /Add authority - New Body/ + mail.from.should include(@email) + mail.to.should include('postmaster@localhost') + mail.body.should include('new_body@example.com') + mail.body.should include('New Body') + mail.body.should include("Please") + mail.body.should include('http://test.host/admin/body/new?change_request_id=') + mail.body.should include('http://test.host/admin/change_request/edit/') + end + + it 'should show a notice' do + post :create, {:public_body_change_request => @change_request_params} + expected_text = "Your request to add an authority has been sent. Thank you for getting in touch! We'll get back to you soon." + flash[:notice].should == expected_text + end + + it 'should redirect to the frontpage' do + post :create, {:public_body_change_request => @change_request_params} + response.should redirect_to frontpage_url + end + + end + + context 'when handling a request for an update to an existing authority' do + + before do + @email = "test@example.com" + name = "Test User" + @public_body = FactoryGirl.create(:public_body) + @change_request_params = {:user_email => @email, + :user_name => name, + :public_body_id => @public_body.id, + :public_body_email => 'new_body@example.com', + :notes => 'Please', + :source => 'http://www.example.com'} + end + + it 'should send an email to the site contact address' do + post :create, {:public_body_change_request => @change_request_params} + deliveries = ActionMailer::Base.deliveries + deliveries.size.should == 1 + mail = deliveries[0] + mail.subject.should =~ /Update email address - #{@public_body.name}/ + mail.from.should include(@email) + mail.to.should include('postmaster@localhost') + mail.body.should include('new_body@example.com') + mail.body.should include(@public_body.name) + mail.body.should include("Please") + mail.body.should include("http://test.host/admin/body/edit/#{@public_body.id}?change_request_id=") + mail.body.should include('http://test.host/admin/change_request/edit/') + end + + it 'should show a notice' do + post :create, {:public_body_change_request => @change_request_params} + expected_text = "Your request to update the address for #{@public_body.name} has been sent. Thank you for getting in touch! We'll get back to you soon." + flash[:notice].should == expected_text + end + + it 'should redirect to the frontpage' do + post :create, {:public_body_change_request => @change_request_params} + response.should redirect_to frontpage_url + end + + end + + +end diff --git a/spec/factories.rb b/spec/factories.rb index 7d8f94ac1..8b724ae37 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -144,4 +144,16 @@ FactoryGirl.define do track_query 'Example Query' end + factory :public_body_change_request do + user + source_url 'http://www.example.com' + notes 'Please' + public_body_email 'new@example.com' + factory :add_body_request do + public_body_name 'A New Body' + end + factory :update_body_request do + public_body + end + end end diff --git a/spec/models/public_body_change_request_spec.rb b/spec/models/public_body_change_request_spec.rb new file mode 100644 index 000000000..0c4cea67b --- /dev/null +++ b/spec/models/public_body_change_request_spec.rb @@ -0,0 +1,139 @@ +# == Schema Information +# +# Table name: public_body_change_requests +# +# id :integer not null, primary key +# user_email :string(255) +# user_name :string(255) +# user_id :integer +# public_body_name :text +# public_body_id :integer +# public_body_email :string(255) +# source_url :text +# notes :text +# is_open :boolean default(TRUE), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe PublicBodyChangeRequest, 'when validating' do + + it 'should not be valid without a public body name' do + change_request = PublicBodyChangeRequest.new() + change_request.valid?.should be_false + change_request.errors[:public_body_name].should == ['Please enter the name of the authority'] + end + + it 'should not be valid without a user name if there is no user' do + change_request = PublicBodyChangeRequest.new(:public_body_name => 'New Body') + change_request.valid?.should be_false + change_request.errors[:user_name].should == ['Please enter your name'] + end + + it 'should not be valid without a user email address if there is no user' do + change_request = PublicBodyChangeRequest.new(:public_body_name => 'New Body') + change_request.valid?.should be_false + change_request.errors[:user_email].should == ['Please enter your email address'] + end + + it 'should be valid with a user and no name or email address' do + user = FactoryGirl.build(:user) + change_request = PublicBodyChangeRequest.new(:user => user, + :public_body_name => 'New Body') + change_request.valid?.should be_true + end + + it 'should validate the format of a user email address entered' do + change_request = PublicBodyChangeRequest.new(:public_body_name => 'New Body', + :user_email => '@example.com') + change_request.valid?.should be_false + change_request.errors[:user_email].should == ["Your email doesn't look like a valid address"] + end + + it 'should validate the format of a public body email address entered' do + change_request = PublicBodyChangeRequest.new(:public_body_name => 'New Body', + :public_body_email => '@example.com') + change_request.valid?.should be_false + change_request.errors[:public_body_email].should == ["The authority email doesn't look like a valid address"] + end + +end + +describe PublicBodyChangeRequest, 'get_user_name' do + + it 'should return the user_name field if there is no user association' do + change_request = PublicBodyChangeRequest.new(:user_name => 'Test User') + change_request.get_user_name.should == 'Test User' + end + + it 'should return the name of the associated user if there is one' do + user = FactoryGirl.build(:user) + change_request = PublicBodyChangeRequest.new(:user => user) + change_request.get_user_name.should == user.name + end + +end + + +describe PublicBodyChangeRequest, 'get_user_email' do + + it 'should return the user_email field if there is no user association' do + change_request = PublicBodyChangeRequest.new(:user_email => 'user@example.com') + change_request.get_user_email.should == 'user@example.com' + end + + it 'should return the email of the associated user if there is one' do + user = FactoryGirl.build(:user) + change_request = PublicBodyChangeRequest.new(:user => user) + change_request.get_user_email.should == user.email + end + +end + + +describe PublicBodyChangeRequest, 'get_public_body_name' do + + it 'should return the public_body_name field if there is no public body association' do + change_request = PublicBodyChangeRequest.new(:public_body_name => 'Test Authority') + change_request.get_public_body_name.should == 'Test Authority' + end + + it 'should return the name of the associated public body if there is one' do + public_body = FactoryGirl.build(:public_body) + change_request = PublicBodyChangeRequest.new(:public_body => public_body) + change_request.get_public_body_name.should == public_body.name + end + +end + +describe PublicBodyChangeRequest, 'when creating a comment for the associated public body' do + + it 'should include requesting user, source_url and notes' do + change_request = PublicBodyChangeRequest.new(:user_name => 'Test User', + :user_email => 'test@example.com', + :source_url => 'http://www.example.com', + :notes => 'Some notes') + expected = "Requested by: Test User (test@example.com)\nSource URL: http://www.example.com\nNotes: Some notes" + change_request.comment_for_public_body.should == expected + end + +end + +describe PublicBodyChangeRequest, 'when creating a default subject for a response email' do + + it 'should create an appropriate subject for a request to add a body' do + change_request = PublicBodyChangeRequest.new(:public_body_name => 'Test Body') + change_request.default_response_subject.should == 'Your request to add Test Body to Alaveteli' + end + + it 'should create an appropriate subject for a request to update an email address' do + public_body = FactoryGirl.build(:public_body) + change_request = PublicBodyChangeRequest.new(:public_body => public_body) + change_request.default_response_subject.should == "Your request to update #{public_body.name} on Alaveteli" + + end + +end + |