diff options
Diffstat (limited to 'spec/controllers')
| -rw-r--r-- | spec/controllers/admin_censor_rule_controller_spec.rb | 14 | ||||
| -rw-r--r-- | spec/controllers/admin_general_controller_spec.rb | 5 | ||||
| -rw-r--r-- | spec/controllers/admin_public_body_controller_spec.rb | 41 | ||||
| -rw-r--r-- | spec/controllers/admin_request_controller_spec.rb | 26 | ||||
| -rw-r--r-- | spec/controllers/admin_track_controller_spec.rb | 2 | ||||
| -rw-r--r-- | spec/controllers/admin_user_controller_spec.rb | 2 | ||||
| -rw-r--r-- | spec/controllers/api_controller_spec.rb | 22 | ||||
| -rw-r--r-- | spec/controllers/comment_controller_spec.rb | 2 | ||||
| -rw-r--r-- | spec/controllers/general_controller_spec.rb | 67 | ||||
| -rw-r--r-- | spec/controllers/help_controller_spec.rb | 2 | ||||
| -rw-r--r-- | spec/controllers/public_body_controller_spec.rb | 35 | ||||
| -rw-r--r-- | spec/controllers/request_controller_spec.rb | 351 | ||||
| -rw-r--r-- | spec/controllers/services_controller_spec.rb | 10 | ||||
| -rw-r--r-- | spec/controllers/track_controller_spec.rb | 18 | ||||
| -rw-r--r-- | spec/controllers/user_controller_spec.rb | 81 | 
15 files changed, 358 insertions, 320 deletions
diff --git a/spec/controllers/admin_censor_rule_controller_spec.rb b/spec/controllers/admin_censor_rule_controller_spec.rb index fb9ddf594..37ffd9764 100644 --- a/spec/controllers/admin_censor_rule_controller_spec.rb +++ b/spec/controllers/admin_censor_rule_controller_spec.rb @@ -1,20 +1,16 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  describe AdminCensorRuleController, "when making censor rules from the admin interface" do -    integrate_views -    before do -        basic_auth_login @request -        PurgeRequest.destroy_all -    end - - +    render_views +    before { basic_auth_login @request } +        it "should create a censor rule and purge the corresponding request from varnish" do -        ir = info_requests(:fancy_dog_request) +        ir = info_requests(:fancy_dog_request)           post :create, :censor_rule => {                           :text => "meat",                           :replacement => "tofu",                           :last_edit_comment => "none", -                         :info_request => ir +                         :info_request_id => ir          }          PurgeRequest.all().first.model_id.should == ir.id      end diff --git a/spec/controllers/admin_general_controller_spec.rb b/spec/controllers/admin_general_controller_spec.rb index dc1eb0d97..971960762 100644 --- a/spec/controllers/admin_general_controller_spec.rb +++ b/spec/controllers/admin_general_controller_spec.rb @@ -4,7 +4,7 @@ describe AdminGeneralController do      describe "when viewing front page of admin interface" do -        integrate_views +        render_views          before { basic_auth_login @request }          it "should render the front page" do @@ -14,8 +14,7 @@ describe AdminGeneralController do          it "should redirect to include trailing slash" do              get :index -            response.should redirect_to(:controller => 'admin_general', -                                        :action => 'index') +            response.should redirect_to admin_general_index_url(:trailing_slash => true)          end      end diff --git a/spec/controllers/admin_public_body_controller_spec.rb b/spec/controllers/admin_public_body_controller_spec.rb index 317c186fa..8a72db724 100644 --- a/spec/controllers/admin_public_body_controller_spec.rb +++ b/spec/controllers/admin_public_body_controller_spec.rb @@ -1,16 +1,7 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  describe AdminPublicBodyController, "when administering public bodies" do -    integrate_views - -    before do -        @old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new -    end - -    after do -        ActionController::Routing::Routes.filters = @old_filters -    end +    render_views      it "shows the index page" do          get :index @@ -38,7 +29,7 @@ describe AdminPublicBodyController, "when administering public bodies" do      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' } } -        response.flash[:notice].should include('successful') +        request.flash[:notice].should include('successful')          pb = PublicBody.find(public_bodies(:humpadink_public_body).id)          pb.name.should == "Renamed"      end @@ -66,7 +57,7 @@ describe AdminPublicBodyController, "when administering public bodies" do      it "mass assigns tags" do          n = PublicBody.count          post :mass_tag_add, { :new_tag => "department", :table_name => "substring" } -        response.flash[:notice].should == "Added tag to table of bodies." +        request.flash[:notice].should == "Added tag to table of bodies."          response.should redirect_to(:action=>'list')          PublicBody.find_by_tag("department").count.should == n      end @@ -86,8 +77,7 @@ describe AdminPublicBodyController, "when administering public bodies" do              before do                  PublicBody.stub!(:import_csv).and_return([[],[]]) -                @file_object = mock("a file upload", :read => 'some contents', -                                                     :original_filename => 'contents.txt') +                @file_object = fixture_file_upload('/files/fake-authority-type.csv')              end              it 'should handle a nil csv file param' do @@ -106,7 +96,7 @@ describe AdminPublicBodyController, "when administering public bodies" 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 == 'contents.txt' +                    assigns[:original_csv_file].should == 'fake-authority-type.csv'                  end              end @@ -154,7 +144,7 @@ end  describe AdminPublicBodyController, "when administering public bodies and paying attention to authentication" do -    integrate_views +    render_views      before do          config = MySociety::Config.load_default() @@ -217,7 +207,7 @@ describe AdminPublicBodyController, "when administering public bodies and paying      it "doesn't let people with good emergency account credentials log in if the emergency user is disabled" do          setup_emergency_credentials('biz', 'fuz') -        Configuration.stub!(:disable_emergency_user).and_return(true) +        AlaveteliConfiguration.stub!(:disable_emergency_user).and_return(true)          n = PublicBody.count          basic_auth_login(@request, "biz", "fuz")          post :show, { :id => public_bodies(:humpadink_public_body).id, :emergency => 1} @@ -276,7 +266,7 @@ describe AdminPublicBodyController, "when administering public bodies and paying  end  describe AdminPublicBodyController, "when administering public bodies with i18n" do -    integrate_views +    render_views      it "shows the index page" do          get :index @@ -295,7 +285,7 @@ describe AdminPublicBodyController, "when administering public bodies with i18n"          get :edit, {:id => 3, :locale => :en}          # When editing a body, the controller returns all available translations -        assigns[:public_body].translation("es").name.should == 'El Department for Humpadinking' +        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 @@ -317,7 +307,7 @@ describe AdminPublicBodyController, "when administering public bodies with i18n"                          }                      }                  } -            response.flash[:notice].should include('successful') +            request.flash[:notice].should include('successful')          end          pb = PublicBody.find(public_bodies(:humpadink_public_body).id) @@ -338,16 +328,7 @@ describe AdminPublicBodyController, "when administering public bodies with i18n"  end  describe AdminPublicBodyController, "when creating public bodies with i18n" do -    integrate_views - -    before do -        @old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new -    end - -    after do -        ActionController::Routing::Routes.filters = @old_filters -    end +    render_views      it "creates a new public body in one locale" do          n = PublicBody.count diff --git a/spec/controllers/admin_request_controller_spec.rb b/spec/controllers/admin_request_controller_spec.rb index 8a3934685..b7b726507 100644 --- a/spec/controllers/admin_request_controller_spec.rb +++ b/spec/controllers/admin_request_controller_spec.rb @@ -1,16 +1,11 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  describe AdminRequestController, "when administering requests" do -    integrate_views +    render_views      before { basic_auth_login @request }      before(:each) do          load_raw_emails_data -        @old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new -    end -    after do -        ActionController::Routing::Routes.filters = @old_filters      end      it "shows the index/list page" do @@ -39,7 +34,7 @@ describe AdminRequestController, "when administering requests" do                                             :awaiting_description => false,                                             :allow_new_responses_from => 'anybody',                                             :handle_rejected_responses => 'bounce' } } -        response.flash[:notice].should include('successful') +        request.flash[:notice].should include('successful')          ir = InfoRequest.find(info_requests(:fancy_dog_request).id)          ir.title.should == "Renamed"      end @@ -64,7 +59,7 @@ describe AdminRequestController, "when administering requests" do      it "saves edits to an outgoing_message" do          outgoing_messages(:useless_outgoing_message).body.should include("fancy dog")          post :update_outgoing, { :id => outgoing_messages(:useless_outgoing_message), :outgoing_message => { :body => "Why do you have such a delicious cat?" } } -        response.flash[:notice].should include('successful') +        request.flash[:notice].should include('successful')          ir = OutgoingMessage.find(outgoing_messages(:useless_outgoing_message).id)          ir.body.should include("delicious cat")      end @@ -82,15 +77,10 @@ describe AdminRequestController, "when administering requests" do  end  describe AdminRequestController, "when administering the holding pen" do -    integrate_views +    render_views      before(:each) do          basic_auth_login @request          load_raw_emails_data -        @old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new -    end -    after do -        ActionController::Routing::Routes.filters = @old_filters      end      it "shows a rejection reason for an incoming message from an invalid address" do @@ -100,7 +90,7 @@ describe AdminRequestController, "when administering the holding pen" do          ir.save!          receive_incoming_mail('incoming-request-plain.email', ir.incoming_email, "frob@nowhere.com")          get :show_raw_email, :id => InfoRequest.holding_pen_request.get_last_response.raw_email.id -        response.should have_text(/Only the authority can reply to this request/) +        response.should contain "Only the authority can reply to this request"      end      it "allows redelivery even to a closed request" do @@ -164,7 +154,7 @@ describe AdminRequestController, "when administering the holding pen" do          receive_incoming_mail('incoming-request-plain.email', ir.incoming_email, "")          InfoRequest.holding_pen_request.incoming_messages.length.should == 2          get :show_raw_email, :id => interesting_email -        response.should have_text(/Could not identify the request/) +        response.should contain "Could not identify the request"          assigns[:info_requests][0].should == ir      end @@ -260,13 +250,13 @@ describe AdminRequestController, "when administering the holding pen" do              end              it 'should not send a notification email' do -                ContactMailer.should_not_receive(:deliver_from_admin_message) +                ContactMailer.should_not_receive(:from_admin_message)                  make_request              end              it 'should add a notice to the flash saying that the request has been hidden' do                  make_request -                response.flash[:notice].should == "This external request has been hidden" +                request.flash[:notice].should == "This external request has been hidden"              end              it 'should expire the file cache for the request' do diff --git a/spec/controllers/admin_track_controller_spec.rb b/spec/controllers/admin_track_controller_spec.rb index 728c79f1f..f2de6c0d3 100644 --- a/spec/controllers/admin_track_controller_spec.rb +++ b/spec/controllers/admin_track_controller_spec.rb @@ -1,7 +1,7 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  describe AdminTrackController, "when administering tracks" do -    integrate_views +    render_views      it "shows the list page" do          get :list diff --git a/spec/controllers/admin_user_controller_spec.rb b/spec/controllers/admin_user_controller_spec.rb index cf3665c9f..a6e5a0d7e 100644 --- a/spec/controllers/admin_user_controller_spec.rb +++ b/spec/controllers/admin_user_controller_spec.rb @@ -1,7 +1,7 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  describe AdminUserController, "when administering users" do -    integrate_views +    render_views      it "shows the index/list page" do          get :index diff --git a/spec/controllers/api_controller_spec.rb b/spec/controllers/api_controller_spec.rb index 1c320f85c..66b8e33f0 100644 --- a/spec/controllers/api_controller_spec.rb +++ b/spec/controllers/api_controller_spec.rb @@ -7,7 +7,7 @@ def normalise_whitespace(s)      return s  end -Spec::Matchers.define :be_equal_modulo_whitespace_to do |expected| +RSpec::Matchers.define :be_equal_modulo_whitespace_to do |expected|    match do |actual|      normalise_whitespace(actual) == normalise_whitespace(expected)    end @@ -173,7 +173,7 @@ describe ApiController, "when using the API" do                  "body" => "xxx"              }.to_json -        response.status.should == "500 Internal Server Error" +        response.status.should == 500          ActiveSupport::JSON.decode(response.body)["errors"].should == [            "Request #{request_id} cannot be updated using the API"] @@ -195,7 +195,7 @@ describe ApiController, "when using the API" do                  "body" => "xxx"              }.to_json -        response.status.should == "500 Internal Server Error" +        response.status.should == 500          ActiveSupport::JSON.decode(response.body)["errors"].should == [            "You do not own request #{request_id}"] @@ -213,12 +213,12 @@ describe ApiController, "when using the API" do                      "body" => "Are you joking, or are you serious?"                  }.to_json,              :attachments => [ -                fixture_file_upload("files/tfl.pdf") +                fixture_file_upload("/files/tfl.pdf")              ]          # Make sure it worked -        response.status.to_i.should == 500 +        response.status.should == 500          errors = ActiveSupport::JSON.decode(response.body)["errors"]          errors.should == ["You cannot attach files to messages in the 'request' direction"]      end @@ -242,7 +242,7 @@ describe ApiController, "when using the API" do                      "body" => response_body                  }.to_json,              :attachments => [ -                fixture_file_upload("files/tfl.pdf") +                fixture_file_upload("/files/tfl.pdf")              ]          # And make sure it worked @@ -259,7 +259,7 @@ describe ApiController, "when using the API" do          attachments.size.should == 1          attachment = attachments[0]          attachment.filename.should == "tfl.pdf" -        attachment.body.should == load_file_fixture("tfl.pdf", as_binary=true) +        attachment.body.should == load_file_fixture("tfl.pdf")      end      it "should show information about a request" do @@ -286,7 +286,7 @@ describe ApiController, "when using the API" do              :feed_type => "atom"          response.should be_success -        response.should render_template("api/request_events.atom") +        response.should render_template("api/request_events")          assigns[:events].size.should > 0          assigns[:events].each do |event|              event.info_request.public_body.should == public_bodies(:geraldine_public_body) @@ -341,7 +341,7 @@ describe ApiController, "when using the API" do              :feed_type => "atom"          response.should be_success -        response.should render_template("api/request_events.atom") +        response.should render_template("api/request_events")          assigns[:events].size.should > 0          assigns[:events].each do |event|              event.created_at.should >= Date.new(2010, 1, 1) @@ -360,7 +360,7 @@ describe ApiController, "when using the API" do                  "sent_at" => sent_at,                  "body" => response_body              }.to_json -        response.status.should == "404 Not Found" +        response.status.should == 404          ActiveSupport::JSON.decode(response.body)["errors"].should == ["Could not find request 123459876"]      end @@ -376,7 +376,7 @@ describe ApiController, "when using the API" do                  "sent_at" => sent_at,                  "body" => response_body              }.to_json -        response.status.should == "500 Internal Server Error" +        response.status.should == 500          ActiveSupport::JSON.decode(response.body)["errors"].should == ["Request #{request_id} cannot be updated using the API"]      end  end diff --git a/spec/controllers/comment_controller_spec.rb b/spec/controllers/comment_controller_spec.rb index 4a7acee23..c03615ce2 100644 --- a/spec/controllers/comment_controller_spec.rb +++ b/spec/controllers/comment_controller_spec.rb @@ -1,7 +1,7 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  describe CommentController, "when commenting on a request" do -    integrate_views +    render_views      it "should give an error and render 'new' template when body text is just some whitespace" do          post :new, :url_title => info_requests(:naughty_chicken_request).url_title, diff --git a/spec/controllers/general_controller_spec.rb b/spec/controllers/general_controller_spec.rb index 642ed0e05..4a1c8b134 100644 --- a/spec/controllers/general_controller_spec.rb +++ b/spec/controllers/general_controller_spec.rb @@ -12,30 +12,39 @@ describe GeneralController, "when trying to show the blog" do      it "should fail silently if the blog is returning an error" do          FakeWeb.register_uri(:get, %r|.*|, :body => "Error", :status => ["500", "Error"])          get :blog -        response.status.should == "200 OK" +        response.status.should == 200          assigns[:blog_items].count.should == 0      end  end  describe GeneralController, 'when getting the blog feed' do +    before do +        AlaveteliConfiguration.stub!(:blog_feed).and_return("http://blog.example.com") +    end +      it 'should add a lang param correctly to a url with no querystring' do -        Configuration.stub!(:blog_feed).and_return("http://blog.example.com")          get :blog          assigns[:feed_url].should == "http://blog.example.com?lang=en"      end      it 'should add a lang param correctly to a url with an existing querystring' do -        Configuration.stub!(:blog_feed).and_return("http://blog.example.com?alt=rss") +        AlaveteliConfiguration.stub!(:blog_feed).and_return("http://blog.example.com?alt=rss")          get :blog          assigns[:feed_url].should == "http://blog.example.com?alt=rss&lang=en"      end +    it 'should parse an item from an example feed' do +        controller.stub!(:quietly_try_to_open).and_return(load_file_fixture("blog_feed.atom")) +        get :blog +        assigns[:blog_items].count.should == 1 +    end +  end  describe GeneralController, "when showing the frontpage" do -    integrate_views +    render_views      before do        public_body = mock_model(PublicBody, :name => "Example Public Body", @@ -58,14 +67,14 @@ describe GeneralController, "when showing the frontpage" do      it "should render the front page with default language" do          get :frontpage -        response.should have_tag('html[lang="en"]') +        response.should have_selector('html[lang="en"]')      end      it "should render the front page with default language" do          old_default_locale = I18n.default_locale          I18n.default_locale = "es"          get :frontpage -        response.should have_tag('html[lang="es"]') +        response.should have_selector('html[lang="es"]')          I18n.default_locale = old_default_locale      end @@ -77,7 +86,7 @@ describe GeneralController, "when showing the frontpage" do          old_default_locale = I18n.default_locale          I18n.default_locale = "es"          get :frontpage -        response.should have_tag('html[lang="es"]') +        response.should have_selector('html[lang="es"]')          I18n.default_locale = old_default_locale      end @@ -87,7 +96,7 @@ describe GeneralController, "when showing the frontpage" do          accept_language = "es-ES,en-GB,en-US;q=0.8,en;q=0.6"          request.env['HTTP_ACCEPT_LANGUAGE'] = accept_language          get :frontpage -        response.should have_tag('html[lang="es"]') +        response.should have_selector('html[lang="es"]')          request.env['HTTP_ACCEPT_LANGUAGE'] = nil      end @@ -104,11 +113,11 @@ describe GeneralController, "when showing the frontpage" do              before do                  @default_lang_home_link = /href=".*\/en\//                  @other_lang_home_link = /href=".*\/es\// -                @old_include_default_locale_in_urls = Configuration::include_default_locale_in_urls +                @old_include_default_locale_in_urls = AlaveteliConfiguration::include_default_locale_in_urls              end              def set_default_locale_in_urls(value) -                Configuration.stub!(:include_default_locale_in_urls).and_return(value) +                AlaveteliConfiguration.stub!(:include_default_locale_in_urls).and_return(value)                  load Rails.root.join("config/initializers/fast_gettext.rb")              end @@ -120,13 +129,13 @@ describe GeneralController, "when showing the frontpage" do                  it 'should generate URLs without a locale prepended' do                      get :frontpage -                    response.should_not have_text(@default_lang_home_link) +                    response.should_not contain @default_lang_home_link                  end                  it 'should render the front page in the default language when no locale param                      is present and the session locale is not the default' do                      get(:frontpage, {}, {:locale => 'es'}) -                    response.should_not have_text(@other_lang_home_link) +                    response.should_not contain @other_lang_home_link                  end              end @@ -134,7 +143,7 @@ describe GeneralController, "when showing the frontpage" do                  INCLUDE_DEFAULT_LOCALE_IN_URLS is true' do                  set_default_locale_in_urls(true)                  get :frontpage -                response.should have_text(@default_lang_home_link) +                response.body.should match /#{@default_lang_home_link}/              end              after do @@ -150,28 +159,28 @@ describe GeneralController, "when showing the frontpage" do          it "should generate URLs with a locale prepended when there's more than one locale set" do              get :frontpage -            response.should have_text(home_link_regex) +            response.body.should match home_link_regex          end          it "should use our test PO files rather than the application one" do              I18n.default_locale = :es              get :frontpage -            response.should have_text(/XOXO/) +            response.body.should match /XOXO/              I18n.default_locale = :en          end          it "should generate URLs that include the locale when using one that includes an underscore" do              I18n.default_locale = :"en_GB"              get :frontpage -            response.should have_text(/href="\/en_GB\//) +            response.body.should match /href="\/en_GB\//              I18n.default_locale = :en          end          it "should fall back to the language if the territory is unknown" do              I18n.default_locale = :"en_US"              get :frontpage -            response.should have_text(/href="\/en\//) -            response.should_not have_text(/href="\/en_US\//) +            response.body.should match /href="\/en\// +            response.body.should_not match /href="\/en_US\//              I18n.default_locale = :en          end @@ -181,7 +190,7 @@ describe GeneralController, "when showing the frontpage" do              FastGettext.default_available_locales = I18n.available_locales = ['en']              get :frontpage -            response.should_not have_text(home_link_regex) +            response.should_not contain home_link_regex              FastGettext.default_available_locales = old_fgt_available_locales              I18n.available_locales = old_i18n_available_locales @@ -235,7 +244,7 @@ end  describe GeneralController, 'when using xapian search' do -    integrate_views +    render_views      # rebuild xapian index after fixtures loaded      before(:each) do @@ -249,7 +258,7 @@ describe GeneralController, 'when using xapian search' do      end      it "should find info request when searching for '\"fancy dog\"'" do -      get :search, :combined => ['"fancy dog"'] +      get :search, :combined => '"fancy dog"'        response.should render_template('search')        assigns[:xapian_requests].matches_estimated.should == 1        assigns[:xapian_requests].results.size.should == 1 @@ -259,7 +268,7 @@ describe GeneralController, 'when using xapian search' do      end      it "should find public body and incoming message when searching for 'geraldine quango'" do -      get :search, :combined => ['geraldine quango'] +      get :search, :combined => 'geraldine quango'        response.should render_template('search')        assigns[:xapian_requests].matches_estimated.should == 1 @@ -272,7 +281,7 @@ describe GeneralController, 'when using xapian search' do      end      it "should filter results based on end of URL being 'all'" do -        get :search, :combined => ['"bob"', "all"] +        get :search, :combined => "bob/all"          assigns[:xapian_requests].results.map{|x| x[:model]}.should =~ [              info_request_events(:useless_outgoing_message_event),              info_request_events(:silly_outgoing_message_event), @@ -284,14 +293,14 @@ describe GeneralController, 'when using xapian search' do      end      it "should filter results based on end of URL being 'users'" do -        get :search, :combined => ['"bob"', "users"] +        get :search, :combined => "bob/users"          assigns[:xapian_requests].should == nil          assigns[:xapian_users].results.map{|x| x[:model]}.should == [users(:bob_smith_user)]          assigns[:xapian_bodies].should == nil      end      it "should filter results based on end of URL being 'requests'" do -        get :search, :combined => ['"bob"', "requests"] +        get :search, :combined => "bob/requests"          assigns[:xapian_requests].results.map{|x|x[:model]}.should =~ [              info_request_events(:useless_outgoing_message_event),              info_request_events(:silly_outgoing_message_event), @@ -303,7 +312,7 @@ describe GeneralController, 'when using xapian search' do      end      it "should filter results based on end of URL being 'bodies'" do -        get :search, :combined => ['"quango"', "bodies"] +        get :search, :combined => "quango/bodies"          assigns[:xapian_requests].should == nil          assigns[:xapian_users].should == nil          assigns[:xapian_bodies].results.map{|x|x[:model]}.should == [public_bodies(:geraldine_public_body)] @@ -317,7 +326,7 @@ describe GeneralController, 'when using xapian search' do      end      it "should not show unconfirmed users" do -        get :search, :combined => ["unconfirmed", "users"] +        get :search, :combined => "unconfirmed/users"          response.should render_template('search')          assigns[:xapian_users].results.map{|x|x[:model]}.should == []      end @@ -328,13 +337,13 @@ describe GeneralController, 'when using xapian search' do          u.save!          update_xapian_index -        get :search, :combined => ["unconfirmed", "users"] +        get :search, :combined => "unconfirmed/users"          response.should render_template('search')          assigns[:xapian_users].results.map{|x|x[:model]}.should == [u]      end      it "should show tracking links for requests-only searches" do -        get :search, :combined => ['"bob"', "requests"] +        get :search, :combined => "bob/requests"          response.body.should include('Track this search')      end diff --git a/spec/controllers/help_controller_spec.rb b/spec/controllers/help_controller_spec.rb index 28fd08c80..0f6f75eb9 100644 --- a/spec/controllers/help_controller_spec.rb +++ b/spec/controllers/help_controller_spec.rb @@ -1,7 +1,7 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  describe HelpController, "when using help" do -    integrate_views +    render_views      it "shows the about page" do          get :about diff --git a/spec/controllers/public_body_controller_spec.rb b/spec/controllers/public_body_controller_spec.rb index 8f5b79489..22d8418c9 100644 --- a/spec/controllers/public_body_controller_spec.rb +++ b/spec/controllers/public_body_controller_spec.rb @@ -2,7 +2,7 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  describe PublicBodyController, "when showing a body" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data @@ -50,17 +50,16 @@ describe PublicBodyController, "when showing a body" do      it "should assign the body using same locale as that used in url_name" do          get :show, {:url_name => "edfh", :view => 'all', :show_locale => "es"} -        response.should include_text("Baguette") +        response.should contain("Baguette")      end      it "should redirect use to the relevant locale even when url_name is for a different locale" do -        old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new +        RoutingFilter.active = false          get :show, {:url_name => "edfh", :view => 'all'}          response.should redirect_to "http://test.host/body/dfh" -        ActionController::Routing::Routes.filters = old_filters +        RoutingFilter.active = true      end      it "should remember the filter (view) setting on redirecting" do @@ -80,7 +79,7 @@ describe PublicBodyController, "when showing a body" do  end  describe PublicBodyController, "when listing bodies" do -    integrate_views +    render_views      it "should be successful" do          get :list @@ -108,9 +107,12 @@ describe PublicBodyController, "when listing bodies" do          response.should render_template('list') -        assigns[:public_bodies].should == PublicBody.all( -            :conditions => "id <> #{PublicBody.internal_admin_body.id}", -            :order => "(select name from public_body_translations where public_body_id=public_bodies.id and locale='en')") +        assigns[:public_bodies].should == [ public_bodies(:other_public_body), +            public_bodies(:humpadink_public_body), +            public_bodies(:forlorn_public_body), +            public_bodies(:geraldine_public_body), +            public_bodies(:sensible_walks_public_body), +            public_bodies(:silly_walks_public_body) ]          assigns[:tag].should == "all"          assigns[:description].should == ""      end @@ -148,11 +150,20 @@ describe PublicBodyController, "when listing bodies" do          get :list, :tag => "other"          response.should render_template('list') -        assigns[:public_bodies].should =~ PublicBody.all(:conditions => "id not in (#{public_bodies(:humpadink_public_body).id}, #{PublicBody.internal_admin_body.id})") +        assigns[:public_bodies].should == [ public_bodies(:other_public_body), +            public_bodies(:forlorn_public_body), +            public_bodies(:geraldine_public_body), +            public_bodies(:sensible_walks_public_body), +            public_bodies(:silly_walks_public_body) ]          get :list          response.should render_template('list') -        assigns[:public_bodies].should =~ PublicBody.all(:conditions => "id <> #{PublicBody.internal_admin_body.id}") +        assigns[:public_bodies].should == [ public_bodies(:other_public_body), +            public_bodies(:humpadink_public_body), +            public_bodies(:forlorn_public_body), +            public_bodies(:geraldine_public_body), +            public_bodies(:sensible_walks_public_body), +            public_bodies(:silly_walks_public_body) ]      end      it "should list a machine tagged thing, should get it in both ways" do @@ -194,7 +205,7 @@ end  describe PublicBodyController, "when doing type ahead searches" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 672c2c361..83e2b1767 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2,7 +2,6 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  describe RequestController, "when listing recent requests" do -      before(:each) do          load_raw_emails_data          get_fixtures_xapian_index @@ -90,7 +89,7 @@ describe RequestController, "when listing recent requests" do      end      it "should assign the first page of results" do -        xap_results = mock_model(ActsAsXapian::Search, +        xap_results = mock(ActsAsXapian::Search,                     :results => (1..25).to_a.map { |m| { :model => m } },                     :matches_estimated => 1000000) @@ -103,7 +102,7 @@ describe RequestController, "when listing recent requests" do      end      it "should return 404 for pages we don't want to serve up" do -        xap_results = mock_model(ActsAsXapian::Search, +        xap_results = mock(ActsAsXapian::Search,                     :results => (1..25).to_a.map { |m| { :model => m } },                     :matches_estimated => 1000000)          lambda { @@ -120,10 +119,7 @@ describe RequestController, "when listing recent requests" do  end  describe RequestController, "when changing things that appear on the request page" do - -    before do -      PurgeRequest.destroy_all -    end +    render_views      it "should purge the downstream cache when mail is received" do          ir = info_requests(:fancy_dog_request) @@ -189,7 +185,7 @@ describe RequestController, "when changing things that appear on the request pag  end  describe RequestController, "when showing one request" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data @@ -218,20 +214,20 @@ describe RequestController, "when showing one request" do      end      it "should redirect from a numeric URL to pretty one" do -        get :show, :url_title => info_requests(:naughty_chicken_request).id +        get :show, :url_title => info_requests(:naughty_chicken_request).id.to_s          response.should redirect_to(:action => 'show', :url_title => info_requests(:naughty_chicken_request).url_title)      end      it 'should show actions the request owner can take' do          get :show, :url_title => 'why_do_you_have_such_a_fancy_dog' -        response.should have_tag('div#owner_actions') +        response.should have_selector('div#owner_actions')      end      describe 'when the request does allow comments' do        it 'should have a comment link' do          get :show, { :url_title => 'why_do_you_have_such_a_fancy_dog' },                     { :user_id => users(:admin_user).id } -        response.should have_tag('#anyone_actions', /Add an annotation/) +        response.should have_selector('#anyone_actions', :content => "Add an annotation")        end      end @@ -239,7 +235,7 @@ describe RequestController, "when showing one request" do        it 'should not have a comment link' do          get :show, { :url_title => 'spam_1' },                     { :user_id => users(:admin_user).id } -        response.should_not have_tag('#anyone_actions', /Add an annotation/) +        response.should_not have_selector('#anyone_actions', :content => "Add an annotation")        end      end @@ -256,13 +252,13 @@ describe RequestController, "when showing one request" do              it 'should show the describe state form' do                  get :show, { :url_title => 'why_do_you_have_such_a_fancy_dog' },                             { :user_id => users(:admin_user).id } -                response.should have_tag('div.describe_state_form') +                response.should have_selector('div.describe_state_form')              end              it 'should ask the user to use the describe state from' do                  get :show, { :url_title => 'why_do_you_have_such_a_fancy_dog' },                             { :user_id => users(:admin_user).id } -                response.should have_tag('p#request_status', :text => /answer the question above/) +                response.should have_selector('p#request_status', :content => "answer the question above")              end          end @@ -280,7 +276,7 @@ describe RequestController, "when showing one request" do              it 'should give a link to requesting an internal review' do                  get :show, { :url_title => 'why_do_you_have_such_a_fancy_dog' },                             { :user_id => users(:admin_user).id } -                response.should have_tag('p#request_status', :text =>/requesting an internal review/) +                response.should have_selector('p#request_status', :content => "requesting an internal review")              end          end @@ -298,7 +294,7 @@ describe RequestController, "when showing one request" do              it 'should give a link to make a followup' do                  get :show, { :url_title => 'why_do_you_have_such_a_fancy_dog' },                             { :user_id => users(:admin_user).id } -                response.should have_tag('p#request_status a', :text =>/send a follow up message/) +                response.should have_selector('p#request_status a', :content => "send a follow up message")              end          end @@ -315,7 +311,7 @@ describe RequestController, "when showing one request" do              it 'should not display actions the request owner can take' do                  get :show, :url_title => 'balalas' -                response.should_not have_tag('div#owner_actions') +                response.should_not have_selector('div#owner_actions')              end          end @@ -341,12 +337,12 @@ describe RequestController, "when showing one request" do                  it 'should not show the describe state form' do                      make_request -                    response.should_not have_tag('div.describe_state_form') +                    response.should_not have_selector('div.describe_state_form')                  end                  it 'should not ask the user to use the describe state form' do                      make_request -                    response.should_not have_tag('p#request_status', :text => /answer the question above/) +                    response.should_not have_selector('p#request_status', :content => "answer the question above")                  end              end @@ -363,7 +359,7 @@ describe RequestController, "when showing one request" do                  it 'should not give a link to requesting an internal review' do                      make_request -                    response.should_not have_tag('p#request_status', :text =>/requesting an internal review/) +                    response.should_not have_selector('p#request_status', :content => "requesting an internal review")                  end              end @@ -379,12 +375,12 @@ describe RequestController, "when showing one request" do                  it 'should not give a link to make a followup' do                      make_request -                    response.should_not have_tag('p#request_status a', :text =>/send a follow up message/) +                    response.should_not have_selector('p#request_status a', :content => "send a follow up message")                  end                  it 'should not give a link to sign in (in the request status paragraph)' do                      make_request -                    response.should_not have_tag('p#request_status a', :text => /sign in/) +                    response.should_not have_selector('p#request_status a', :content => "sign in")                  end              end @@ -447,7 +443,7 @@ describe RequestController, "when showing one request" do      describe 'when handling incoming mail' do -        integrate_views +        render_views          it "should receive incoming messages, send email to creator, and show them" do              ir = info_requests(:fancy_dog_request) @@ -481,13 +477,13 @@ describe RequestController, "when showing one request" do              (assigns[:info_request_events].size - size_before).should == 1              ir.reload -            get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['hello.txt'], :skip_cache => 1 +            get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'hello world.txt', :skip_cache => 1              response.content_type.should == "text/plain" -            response.should have_text(/Second hello/) +            response.should contain "Second hello" -            get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 3, :file_name => ['hello.txt'], :skip_cache => 1 +            get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 3, :file_name => 'hello world.txt', :skip_cache => 1              response.content_type.should == "text/plain" -            response.should have_text(/First hello/) +            response.should contain "First hello"          end          it 'should cache an attachment on a request with normal prominence' do @@ -498,24 +494,23 @@ describe RequestController, "when showing one request" do              get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id,                                   :id => ir.id,                                   :part => 2, -                                 :file_name => ['hello.txt'] - +                                 :file_name => 'hello world.txt'          end          it "should convert message body to UTF8" do              ir = info_requests(:fancy_dog_request)              receive_incoming_mail('iso8859_2_raw_email.email', ir.incoming_email)              get :show, :url_title => 'why_do_you_have_such_a_fancy_dog' -            response.should have_text(/tënde/u) +            response.should contain "tënde"          end          it "should generate valid HTML verson of plain text attachments" do              ir = info_requests(:fancy_dog_request)              receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)              ir.reload -            get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['hello.txt.html'], :skip_cache => 1 +            get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'hello world.txt.html', :skip_cache => 1              response.content_type.should == "text/html" -            response.should have_text(/Second hello/) +            response.should contain "Second hello"          end          # This is a regression test for a bug where URLs of this form were causing 500 errors @@ -534,11 +529,11 @@ describe RequestController, "when showing one request" do              ir.reload              ugly_id = "55195"              lambda { -                get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ugly_id, :part => 2, :file_name => ['hello.txt.html'], :skip_cache => 1 +                get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ugly_id, :part => 2, :file_name => 'hello world.txt.html', :skip_cache => 1              }.should raise_error(ActiveRecord::RecordNotFound)              lambda { -                get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ugly_id, :part => 2, :file_name => ['hello.txt'], :skip_cache => 1 +                get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ugly_id, :part => 2, :file_name => 'hello world.txt', :skip_cache => 1              }.should raise_error(ActiveRecord::RecordNotFound)          end          it "should return 404 when incoming message and request ids don't match" do @@ -547,7 +542,7 @@ describe RequestController, "when showing one request" do              receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)              ir.reload              lambda { -                get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => wrong_id, :part => 2, :file_name => ['hello.txt.html'], :skip_cache => 1 +                get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => wrong_id, :part => 2, :file_name => 'hello world.txt.html', :skip_cache => 1              }.should raise_error(ActiveRecord::RecordNotFound)          end          it "should return 404 for ugly URLs contain a request id that isn't an integer, even if the integer prefix refers to an actual request" do @@ -557,11 +552,11 @@ describe RequestController, "when showing one request" do              ugly_id = "%d95" % [info_requests(:naughty_chicken_request).id]              lambda { -                get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ugly_id, :part => 2, :file_name => ['hello.txt.html'], :skip_cache => 1 +                get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ugly_id, :part => 2, :file_name => 'hello world.txt.html', :skip_cache => 1              }.should raise_error(ActiveRecord::RecordNotFound)              lambda { -                get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ugly_id, :part => 2, :file_name => ['hello.txt'], :skip_cache => 1 +                get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ugly_id, :part => 2, :file_name => 'hello world.txt', :skip_cache => 1              }.should raise_error(ActiveRecord::RecordNotFound)          end          it "should return 404 when incoming message and request ids don't match" do @@ -570,7 +565,7 @@ describe RequestController, "when showing one request" do              receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)              ir.reload              lambda { -                get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => wrong_id, :part => 2, :file_name => ['hello.txt.html'], :skip_cache => 1 +                get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => wrong_id, :part => 2, :file_name => 'hello world.txt.html', :skip_cache => 1              }.should raise_error(ActiveRecord::RecordNotFound)          end @@ -578,41 +573,64 @@ describe RequestController, "when showing one request" do              ir = info_requests(:fancy_dog_request)              receive_incoming_mail('incoming-request-pdf-attachment.email', ir.incoming_email)              ir.reload -            get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['fs_50379341.pdf.html'], :skip_cache => 1 +            get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'fs 50379341.pdf.html', :skip_cache => 1              response.content_type.should == "text/html" -            response.should have_text(/Walberswick Parish Council/) +            response.should contain "Walberswick Parish Council"          end -        it "should not cause a reparsing of the raw email, even when the result would be a 404" do +        it "should not cause a reparsing of the raw email, even when the attachment can't be found" do              ir = info_requests(:fancy_dog_request)              receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)              ir.reload -            attachment = IncomingMessage.get_attachment_by_url_part_number(ir.incoming_messages[1].get_attachments_for_display, 2) -            attachment.body.should have_text(/Second hello/) +            attachment = IncomingMessage.get_attachment_by_url_part_number_and_filename(ir.incoming_messages[1].get_attachments_for_display, 2, 'hello world.txt') +            attachment.body.should contain "Second hello"              # change the raw_email associated with the message; this only be reparsed when explicitly asked for              ir.incoming_messages[1].raw_email.data = ir.incoming_messages[1].raw_email.data.sub("Second", "Third") -            # asking for an attachment by the wrong filename results -            # in a 404 for browsing users.  This shouldn't cause a -            # re-parse... -            lambda { -                get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['hello.txt.baz.html'], :skip_cache => 1 -            }.should raise_error(ActiveRecord::RecordNotFound) +            # asking for an attachment by the wrong filename should result in redirecting +            # back to the incoming message, but shouldn't cause a reparse: +            get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'hello world.txt.baz.html', :skip_cache => 1 +            response.status.should == 303 -            attachment = IncomingMessage.get_attachment_by_url_part_number(ir.incoming_messages[1].get_attachments_for_display, 2) -            attachment.body.should have_text(/Second hello/) +            attachment = IncomingMessage.get_attachment_by_url_part_number_and_filename(ir.incoming_messages[1].get_attachments_for_display, 2, 'hello world.txt') +            attachment.body.should contain "Second hello"              # ...nor should asking for it by its correct filename... -            get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['hello.txt.html'], :skip_cache => 1 -            response.should_not have_text(/Third hello/) +            get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'hello world.txt.html', :skip_cache => 1 +            response.should_not contain "Third hello"              # ...but if we explicitly ask for attachments to be extracted, then they should be              force = true              ir.incoming_messages[1].parse_raw_email!(force) -            attachment = IncomingMessage.get_attachment_by_url_part_number(ir.incoming_messages[1].get_attachments_for_display, 2) -            attachment.body.should have_text(/Second hello/) -            get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['hello.txt.html'], :skip_cache => 1 -            response.should have_text(/Third hello/) +            ir.reload +            attachment = IncomingMessage.get_attachment_by_url_part_number_and_filename(ir.incoming_messages[1].get_attachments_for_display, 2, 'hello world.txt') +            attachment.body.should contain "Third hello" +            get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'hello world.txt.html', :skip_cache => 1 +            response.should contain "Third hello" +        end + +        it "should redirect to the incoming message if there's a wrong part number and an ambiguous filename" do +            ir = info_requests(:fancy_dog_request) +            receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email) +            ir.reload + +            im = ir.incoming_messages[1] + +            attachment = IncomingMessage.get_attachment_by_url_part_number_and_filename(im.get_attachments_for_display, 5, 'hello world.txt') +            attachment.should be_nil + +            get :get_attachment_as_html, :incoming_message_id => im.id, :id => ir.id, :part => 5, :file_name => 'hello world.txt', :skip_cache => 1 +            response.status.should == 303 +            new_location = response.header['Location'] +            new_location.should match(/request\/#{ir.url_title}#incoming-#{im.id}/) +        end + +        it "should find a uniquely named filename even if the URL part number was wrong" do +            ir = info_requests(:fancy_dog_request) +            receive_incoming_mail('incoming-request-pdf-attachment.email', ir.incoming_email) +            ir.reload +            get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 5, :file_name => 'fs 50379341.pdf', :skip_cache => 1 +            response.content_type.should == "application/pdf"          end          it "should treat attachments with unknown extensions as binary" do @@ -620,19 +638,17 @@ describe RequestController, "when showing one request" do              receive_incoming_mail('incoming-request-attachment-unknown-extension.email', ir.incoming_email)              ir.reload -            get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['hello.qwglhm'], :skip_cache => 1 +            get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'hello.qwglhm', :skip_cache => 1              response.content_type.should == "application/octet-stream" -            response.should have_text(/an unusual sort of file/) +            response.should contain "an unusual sort of file"          end          it "should not download attachments with wrong file name" do              ir = info_requests(:fancy_dog_request)              receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email) -            lambda { -                get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, -                    :file_name => ['http://trying.to.hack'] -            }.should raise_error(ActiveRecord::RecordNotFound) +            get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'http://trying.to.hack' +            response.status.should == 303          end          it "should censor attachments downloaded as binary" do @@ -648,9 +664,9 @@ describe RequestController, "when showing one request" do              begin                  receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email) -                get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['hello.txt'], :skip_cache => 1 +                get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'hello world.txt', :skip_cache => 1                  response.content_type.should == "text/plain" -                response.should have_text(/xxxxxx hello/) +                response.should contain "xxxxxx hello"              ensure                  ir.censor_rules.clear              end @@ -670,9 +686,9 @@ describe RequestController, "when showing one request" do                  receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)                  ir.reload -                get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['hello.txt'], :skip_cache => 1 +                get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => 'hello world.txt', :skip_cache => 1                  response.content_type.should == "text/plain" -                response.should have_text(/xxxxxx hello/) +                response.should contain "xxxxxx hello"              ensure                  ir.user.censor_rules.clear              end @@ -694,21 +710,27 @@ describe RequestController, "when showing one request" do              get :show, :url_title => 'why_do_you_have_such_a_fancy_dog'              assert assigns[:info_request].info_request_events[3].incoming_message.get_attachments_for_display.count == 2              # the issue is that the info_request_events have got cached on them the old info_requests. -            # where i'm at: trying to replace those fields that got re-read from the raw email.  however tests are failing in very strange ways.  currently I don't appear to be getting any attachments parsed in at all when in the template (see "*****" in _correspondence.rhtml) but do when I'm in the code. +            # where i'm at: trying to replace those fields that got re-read from the raw email.  however tests are failing in very strange ways.  currently I don't appear to be getting any attachments parsed in at all when in the template (see "*****" in _correspondence.html.erb) but do when I'm in the code.              # so at this point, assigns[:info_request].incoming_messages[1].get_attachments_for_display is returning stuff, but the equivalent thing in the template isn't.              # but something odd is that the above is return a whole load of attachments which aren't there in the controller -            response.body.should have_tag("p.attachment strong", /hello.txt/m) +            response.body.should have_selector("p.attachment strong") do |s| +                s.should contain /hello world.txt/m +            end              censor_rule = CensorRule.new() -            censor_rule.text = "hello.txt" +            # Note that the censor rule applies to the original filename, +            # not the display_filename: +            censor_rule.text = "hello-world.txt"              censor_rule.replacement = "goodbye.txt"              censor_rule.last_edit_editor = "unknown"              censor_rule.last_edit_comment = "none"              ir.censor_rules << censor_rule              begin                  get :show, :url_title => 'why_do_you_have_such_a_fancy_dog' -                response.body.should have_tag("p.attachment strong", /goodbye.txt/m) +                response.body.should have_selector("p.attachment strong") do |s| +                    s.should contain /goodbye.txt/m +                end              ensure                  ir.censor_rules.clear              end @@ -731,19 +753,19 @@ describe RequestController, "when showing one request" do                  ir = info_requests(:fancy_dog_request)                  session[:user_id] = ir.user.id # bob_smith_user                  get :download_entire_request, :url_title => title -                assigns[:url_path].should have_text(/#{title}.zip$/) +                assigns[:url_path].should contain /#{title}.zip$/                  old_path = assigns[:url_path] -                response.location.should have_text(/#{assigns[:url_path]}$/) +                response.location.should contain /#{assigns[:url_path]}$/                  zipfile = Zip::ZipFile.open(File.join(File.dirname(__FILE__), "../../cache/zips", old_path)) { |zipfile|                      zipfile.count.should == 1 # just the message                  }                  receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)                  get :download_entire_request, :url_title => title -                assigns[:url_path].should have_text(/#{title}.zip$/) +                assigns[:url_path].should contain /#{title}.zip$/                  old_path = assigns[:url_path] -                response.location.should have_text(/#{assigns[:url_path]}$/) +                response.location.should contain /#{assigns[:url_path]}$/                  zipfile = Zip::ZipFile.open(File.join(File.dirname(__FILE__), "../../cache/zips", old_path)) { |zipfile| -                    zipfile.count.should == 3 # the message plus two "hello.txt" files +                    zipfile.count.should == 3 # the message plus two "hello-world.txt" files                  }                  # The path of the zip file is based on the hash of the timestamp of the last request @@ -752,11 +774,11 @@ describe RequestController, "when showing one request" do                  sleep 1                  receive_incoming_mail('incoming-request-attachment-unknown-extension.email', ir.incoming_email)                  get :download_entire_request, :url_title => title -                assigns[:url_path].should have_text(/#{title}.zip$/) +                assigns[:url_path].should contain /#{title}.zip$/                  assigns[:url_path].should_not == old_path -                response.location.should have_text(/#{assigns[:url_path]}/) +                response.location.should contain assigns[:url_path]                  zipfile = Zip::ZipFile.open(File.join(File.dirname(__FILE__), "../../cache/zips", assigns[:url_path])) { |zipfile| -                    zipfile.count.should == 4 # the message, two hello.txt plus the unknown attachment +                    zipfile.count.should == 4 # the message, two hello-world.txt plus the unknown attachment                  }              end @@ -764,14 +786,13 @@ describe RequestController, "when showing one request" do                  info_request = info_requests(:external_request)                  get :download_entire_request, { :url_title => info_request.url_title },                                                { :user_id => users(:bob_smith_user) } -                response.location.should have_text(/#{assigns[:url_path]}$/) +                response.location.should contain /#{assigns[:url_path]}$/              end          end      end  end  describe RequestController, "when changing prominence of a request" do -      before(:each) do          load_raw_emails_data      end @@ -795,6 +816,16 @@ describe RequestController, "when changing prominence of a request" do          response.should render_template('hidden')      end +    it 'should not show hidden requests if requested using json' do +        ir = info_requests(:fancy_dog_request) +        ir.prominence = 'hidden' +        ir.save! + +        session[:user_id] = ir.user.id # bob_smith_user +        get :show, :url_title => 'why_do_you_have_such_a_fancy_dog', :format => 'json' +        response.code.should == '410' +    end +      it "should show hidden requests if logged in as super user" do          ir = info_requests(:fancy_dog_request)          ir.prominence = 'hidden' @@ -853,14 +884,14 @@ describe RequestController, "when changing prominence of a request" do                               :part => 2,                               :skip_cache => 1          response.content_type.should == "text/html" -        response.should_not have_text(/Second hello/) +        response.should_not contain "Second hello"          response.should render_template('request/hidden')          get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id,                               :id => ir.id,                               :part => 3,                               :skip_cache => 1          response.content_type.should == "text/html" -        response.should_not have_text(/First hello/) +        response.should_not contain "First hello"          response.should render_template('request/hidden')          response.code.should == '410'      end @@ -876,7 +907,7 @@ describe RequestController, "when changing prominence of a request" do              get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id,                                        :id => ir.id,                                        :part => 2, -                                      :file_name => ['hello.txt'] +                                      :file_name => 'hello world.txt'          end.should raise_error(ActiveRecord::RecordNotFound)      end @@ -891,7 +922,7 @@ describe RequestController, "when changing prominence of a request" do              get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id,                                        :id => ir.id,                                        :part => 2, -                                      :file_name => ['hello.txt'] +                                      :file_name => 'hello world.txt'          end.should raise_error(ActiveRecord::RecordNotFound)      end @@ -904,11 +935,11 @@ end  #  end  describe RequestController, "when searching for an authority" do -      # Whether or not sign-in is required for this step is configurable,      # so we make sure we're logged in, just in case      before do          @user = users(:bob_smith_user) +        get_fixtures_xapian_index      end      it "should return nothing for the empty query string" do @@ -920,6 +951,7 @@ describe RequestController, "when searching for an authority" do      end      it "should return matching bodies" do +          session[:user_id] = @user.id          get :select_authority, :query => "Quango" @@ -944,7 +976,7 @@ describe RequestController, "when searching for an authority" do  end  describe RequestController, "when creating a new request" do -    integrate_views +    render_views      before do          @user = users(:bob_smith_user) @@ -1036,7 +1068,7 @@ describe RequestController, "when creating a new request" do          response.should redirect_to show_new_request_url(:url_title => ir.url_title)          # This test uses an explicit path because it's relied in          # Google Analytics goals: -        response.redirected_to.should =~ /request\/why_is_your_quango_called_gerald\/new$/ +        response.redirect_url.should =~ /request\/why_is_your_quango_called_gerald\/new$/      end      it "should give an error if the same request is submitted twice" do @@ -1180,7 +1212,7 @@ describe RequestController, "when making a new request" do  end  describe RequestController, "when viewing an individual response for reply/followup" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data @@ -1201,7 +1233,7 @@ describe RequestController, "when viewing an individual response for reply/follo      it "should offer the opportunity to reply to the main address" do          session[:user_id] = users(:bob_smith_user).id          get :show_response, :id => info_requests(:fancy_dog_request).id, :incoming_message_id => incoming_messages(:useless_incoming_message) -        response.body.should have_tag("div#other_recipients ul li", /the main FOI contact address for/) +        response.body.should have_selector("div#other_recipients ul li", :content => "the main FOI contact address for")      end      it "should offer an opportunity to reply to another address" do @@ -1211,17 +1243,32 @@ describe RequestController, "when viewing an individual response for reply/follo          ir.save!          receive_incoming_mail('incoming-request-plain.email', ir.incoming_email, "Frob <frob@bonce.com>")          get :show_response, :id => ir.id, :incoming_message_id => incoming_messages(:useless_incoming_message) -        response.body.should have_tag("div#other_recipients ul li", /Frob/) +        response.body.should have_selector("div#other_recipients ul li", :content => "Frob")      end -    it "should not show individual responses if request hidden, even if request owner" do -        ir = info_requests(:fancy_dog_request) -        ir.prominence = 'hidden' -        ir.save! +    context 'when a request is hidden' do + +        before do +            ir = info_requests(:fancy_dog_request) +            ir.prominence = 'hidden' +            ir.save! + +            session[:user_id] = users(:bob_smith_user).id +        end + +        it "should not show individual responses, even if request owner" do +            get :show_response, :id => info_requests(:fancy_dog_request).id, :incoming_message_id => incoming_messages(:useless_incoming_message) +            response.should render_template('request/hidden') +        end + +        it 'should respond to a json request for a hidden request with a 410 code and no body' do +            get :show_response, :id => info_requests(:fancy_dog_request).id, +                                :incoming_message_id => incoming_messages(:useless_incoming_message), +                                :format => 'json' + +            response.code.should == '410' +        end -        session[:user_id] = users(:bob_smith_user).id -        get :show_response, :id => info_requests(:fancy_dog_request).id, :incoming_message_id => incoming_messages(:useless_incoming_message) -        response.should render_template('request/hidden')      end      describe 'when viewing a response for an external request' do @@ -1295,7 +1342,9 @@ describe RequestController, "when classifying an information request" do              before do                  @dog_request.stub!(:is_old_unclassified?).and_return(true) -                RequestMailer.stub!(:deliver_old_unclassified_updated) +                mail_mock = mock("mail") +                mail_mock.stub(:deliver) +                RequestMailer.stub!(:old_unclassified_updated).and_return(mail_mock)              end              describe 'when the user is not logged in' do @@ -1332,7 +1381,7 @@ describe RequestController, "when classifying an information request" do                  end                  it 'should send an email to the requester letting them know someone has updated the status of their request' do -                    RequestMailer.should_receive(:deliver_old_unclassified_updated) +                    RequestMailer.should_receive(:old_unclassified_updated)                      post_status('rejected')                  end @@ -1364,7 +1413,7 @@ describe RequestController, "when classifying an information request" do                      deliveries = ActionMailer::Base.deliveries                      deliveries.size.should == 1                      mail = deliveries[0] -                    mail.from_addrs.first.to_s.should == users(:silly_name_user).name_and_email +                    mail.from_addrs.first.to_s.should == users(:silly_name_user).email                  end              end          end @@ -1403,7 +1452,9 @@ describe RequestController, "when classifying an information request" do              end              it 'should send an email to the requester letting them know someone has updated the status of their request' do -                RequestMailer.should_receive(:deliver_old_unclassified_updated) +                mail_mock = mock("mail") +                mail_mock.stub :deliver +                RequestMailer.should_receive(:old_unclassified_updated).and_return(mail_mock)                  post_status('rejected')              end @@ -1442,7 +1493,7 @@ describe RequestController, "when classifying an information request" do              end              it 'should not send an email to the requester letting them know someone has updated the status of their request' do -                RequestMailer.should_not_receive(:deliver_old_unclassified_updated) +                RequestMailer.should_not_receive(:old_unclassified_updated)                  post_status('rejected')              end @@ -1499,7 +1550,7 @@ describe RequestController, "when classifying an information request" do              end              it 'should not send an email to the requester letting them know someone has updated the status of their request' do -                RequestMailer.should_not_receive(:deliver_old_unclassified_updated) +                RequestMailer.should_not_receive(:old_unclassified_updated)                  post_status('rejected')              end @@ -1562,11 +1613,10 @@ describe RequestController, "when classifying an information request" do                  @dog_request = info_requests(:fancy_dog_request)                  @dog_request.stub!(:each).and_return([@dog_request])                  InfoRequest.stub!(:find).and_return(@dog_request) -                @old_filters = ActionController::Routing::Routes.filters -                ActionController::Routing::Routes.filters = RoutingFilter::Chain.new +                RoutingFilter.active = false              end              after do -                ActionController::Routing::Routes.filters = @old_filters +                RoutingFilter.active = true              end              def request_url @@ -1670,7 +1720,7 @@ describe RequestController, "when classifying an information request" do  end  describe RequestController, "when sending a followup message" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data @@ -1723,7 +1773,7 @@ describe RequestController, "when sending a followup message" do          deliveries.size.should == 1          mail = deliveries[0]          mail.body.should =~ /What a useless response! You suck./ -        mail.to_addrs.first.to_s.should == "FOI Person <foiperson@localhost>" +        mail.to_addrs.first.to_s.should == "foiperson@localhost"          response.should redirect_to(:action => 'show', :url_title => info_requests(:fancy_dog_request).url_title) @@ -1752,7 +1802,7 @@ end  # it can't check the URLs in the emails I don't think, ugh.  describe RequestController, "sending overdue request alerts" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data @@ -1770,9 +1820,9 @@ describe RequestController, "sending overdue request alerts" do          mail = chicken_mails[0]          mail.body.should =~ /promptly, as normally/ -        mail.to_addrs.first.to_s.should == info_requests(:naughty_chicken_request).user.name_and_email +        mail.to_addrs.first.to_s.should == info_requests(:naughty_chicken_request).user.email -        mail.body =~ /(http:\/\/.*\/c\/(.*))/ +        mail.body.to_s =~ /(http:\/\/.*\/c\/(.*))/          mail_url = $1          mail_token = $2 @@ -1799,7 +1849,7 @@ describe RequestController, "sending overdue request alerts" do          mail = chicken_mails[0]          mail.body.should =~ /promptly, as normally/ -        mail.to_addrs.first.to_s.should == info_requests(:naughty_chicken_request).user.name_and_email +        mail.to_addrs.first.to_s.should == info_requests(:naughty_chicken_request).user.email      end      it "should send not actually send the overdue alert if the user is banned but should @@ -1827,9 +1877,9 @@ describe RequestController, "sending overdue request alerts" do          mail = chicken_mails[0]          mail.body.should =~ /required by law/ -        mail.to_addrs.first.to_s.should == info_requests(:naughty_chicken_request).user.name_and_email +        mail.to_addrs.first.to_s.should == info_requests(:naughty_chicken_request).user.email -        mail.body =~ /(http:\/\/.*\/c\/(.*))/ +        mail.body.to_s =~ /(http:\/\/.*\/c\/(.*))/          mail_url = $1          mail_token = $2 @@ -1897,7 +1947,7 @@ describe RequestController, "sending overdue request alerts" do  end  describe RequestController, "sending unclassified new response reminder alerts" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data @@ -1910,8 +1960,8 @@ describe RequestController, "sending unclassified new response reminder alerts"          deliveries.size.should == 3 # sufficiently late it sends reminders too          mail = deliveries[0]          mail.body.should =~ /To let everyone know/ -        mail.to_addrs.first.to_s.should == info_requests(:fancy_dog_request).user.name_and_email -        mail.body =~ /(http:\/\/.*\/c\/(.*))/ +        mail.to_addrs.first.to_s.should == info_requests(:fancy_dog_request).user.email +        mail.body.to_s =~ /(http:\/\/.*\/c\/(.*))/          mail_url = $1          mail_token = $2 @@ -1927,7 +1977,7 @@ describe RequestController, "sending unclassified new response reminder alerts"  end  describe RequestController, "clarification required alerts" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data      end @@ -1946,8 +1996,8 @@ describe RequestController, "clarification required alerts" do          deliveries.size.should == 1          mail = deliveries[0]          mail.body.should =~ /asked you to explain/ -        mail.to_addrs.first.to_s.should == info_requests(:fancy_dog_request).user.name_and_email -        mail.body =~ /(http:\/\/.*\/c\/(.*))/ +        mail.to_addrs.first.to_s.should == info_requests(:fancy_dog_request).user.email +        mail.body.to_s =~ /(http:\/\/.*\/c\/(.*))/          mail_url = $1          mail_token = $2 @@ -1980,7 +2030,7 @@ describe RequestController, "clarification required alerts" do  end  describe RequestController, "comment alerts" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data      end @@ -1999,8 +2049,8 @@ describe RequestController, "comment alerts" do          deliveries = ActionMailer::Base.deliveries          mail = deliveries[0]          mail.body.should =~ /has annotated your/ -        mail.to_addrs.first.to_s.should == info_requests(:fancy_dog_request).user.name_and_email -        mail.body =~ /(http:\/\/.*)/ +        mail.to_addrs.first.to_s.should == info_requests(:fancy_dog_request).user.email +        mail.body.to_s =~ /(http:\/\/.*)/          mail_url = $1          mail_url.should match("/request/why_do_you_have_such_a_fancy_dog#comment-#{new_comment.id}") @@ -2049,8 +2099,8 @@ describe RequestController, "comment alerts" do          deliveries.size.should == 1          mail = deliveries[0]          mail.body.should =~ /There are 2 new annotations/ -        mail.to_addrs.first.to_s.should == info_requests(:fancy_dog_request).user.name_and_email -        mail.body =~ /(http:\/\/.*)/ +        mail.to_addrs.first.to_s.should == info_requests(:fancy_dog_request).user.email +        mail.body.to_s =~ /(http:\/\/.*)/          mail_url = $1          mail_url.should match("/request/why_do_you_have_such_a_fancy_dog#comment-#{comments(:silly_comment).id}") @@ -2059,7 +2109,7 @@ describe RequestController, "comment alerts" do  end  describe RequestController, "when viewing comments" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data      end @@ -2067,22 +2117,26 @@ describe RequestController, "when viewing comments" do      it "should link to the user who submitted it" do          session[:user_id] = users(:bob_smith_user).id          get :show, :url_title => 'why_do_you_have_such_a_fancy_dog' -        response.body.should have_tag("div#comment-1 h2", /Silly.*left an annotation/m) -        response.body.should_not have_tag("div#comment-1 h2", /You.*left an annotation/m) +        response.body.should have_selector("div#comment-1 h2") do |s| +            s.should contain /Silly.*left an annotation/m +            s.should_not contain /You.*left an annotation/m +        end      end      it "should link to the user who submitted to it, even if it is you" do          session[:user_id] = users(:silly_name_user).id          get :show, :url_title => 'why_do_you_have_such_a_fancy_dog' -        response.body.should have_tag("div#comment-1 h2", /Silly.*left an annotation/m) -        response.body.should_not have_tag("div#comment-1 h2", /You.*left an annotation/m) +        response.body.should have_selector("div#comment-1 h2") do |s| +            s.should contain /Silly.*left an annotation/m +            s.should_not contain /You.*left an annotation/m +        end      end  end  describe RequestController, "authority uploads a response from the web interface" do -    integrate_views +    render_views      before(:each) do          # domain after the @ is used for authentication of FOI officers, so to test it @@ -2120,7 +2174,7 @@ describe RequestController, "authority uploads a response from the web interface          session[:user_id] = @normal_user.id          # post up a photo of the parrot -        parrot_upload = fixture_file_upload('files/parrot.png','image/png') +        parrot_upload = fixture_file_upload('/files/parrot.png','image/png')          post :upload_response, :url_title => 'why_do_you_have_such_a_fancy_dog',              :body => "Find attached a picture of a parrot",              :file_1 => parrot_upload, @@ -2148,7 +2202,7 @@ describe RequestController, "authority uploads a response from the web interface          session[:user_id] = @foi_officer_user.id          # post up a photo of the parrot -        parrot_upload = fixture_file_upload('files/parrot.png','image/png') +        parrot_upload = fixture_file_upload('/files/parrot.png','image/png')          post :upload_response, :url_title => 'why_do_you_have_such_a_fancy_dog',              :body => "Find attached a picture of a parrot",              :file_1 => parrot_upload, @@ -2172,7 +2226,6 @@ describe RequestController, "authority uploads a response from the web interface  end  describe RequestController, "when showing JSON version for API" do -      before(:each) do          load_raw_emails_data      end @@ -2191,25 +2244,28 @@ describe RequestController, "when showing JSON version for API" do  end  describe RequestController, "when doing type ahead searches" do +    render_views -    integrate_views +    before :each do +        get_fixtures_xapian_index +    end      it "should return nothing for the empty query string" do          get :search_typeahead, :q => "" -        response.should render_template('request/_search_ahead.rhtml') +        response.should render_template('request/_search_ahead')          assigns[:xapian_requests].should be_nil      end      it "should return a request matching the given keyword, but not users with a matching description" do          get :search_typeahead, :q => "chicken" -        response.should render_template('request/_search_ahead.rhtml') +        response.should render_template('request/_search_ahead')          assigns[:xapian_requests].results.size.should == 1          assigns[:xapian_requests].results[0][:model].title.should == info_requests(:naughty_chicken_request).title      end      it "should return all requests matching any of the given keywords" do          get :search_typeahead, :q => "money dog" -        response.should render_template('request/_search_ahead.rhtml') +        response.should render_template('request/_search_ahead')          assigns[:xapian_requests].results.map{|x|x[:model].info_request}.should =~ [              info_requests(:fancy_dog_request),              info_requests(:naughty_chicken_request), @@ -2219,13 +2275,13 @@ describe RequestController, "when doing type ahead searches" do      it "should not return matches for short words" do          get :search_typeahead, :q => "a" -        response.should render_template('request/_search_ahead.rhtml') +        response.should render_template('request/_search_ahead')          assigns[:xapian_requests].should be_nil      end      it "should do partial matches for longer words" do          get :search_typeahead, :q => "chick" -        response.should render_template('request/_search_ahead.rhtml') +        response.should render_template('request/_search_ahead')          assigns[:xapian_requests].results.size.should ==1      end @@ -2250,7 +2306,11 @@ describe RequestController, "when doing type ahead searches" do  end  describe RequestController, "when showing similar requests" do -    integrate_views +    render_views + +    before do +        get_fixtures_xapian_index +    end      it "should work" do          get :similar, :url_title => info_requests(:badger_request).url_title @@ -2292,7 +2352,7 @@ describe RequestController, "when reporting a request when not logged in" do  end  describe RequestController, "when reporting a request (logged in)" do -    integrate_views +    render_views      before do          @user = users(:robin_user) @@ -2368,7 +2428,6 @@ describe RequestController, "when reporting a request (logged in)" do  end  describe RequestController, "when caching fragments" do -      it "should not fail with long filenames" do          long_name = "blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah.txt"          info_request = mock(InfoRequest, :user_can_view? => true, @@ -2382,9 +2441,9 @@ describe RequestController, "when caching fragments" do          attachment = mock(FoiAttachment, :display_filename => long_name,                                           :body_as_html => ['some text', 'wrapper'])          IncomingMessage.stub!(:find).with("44").and_return(incoming_message) -        IncomingMessage.stub!(:get_attachment_by_url_part_number).and_return(attachment) +        IncomingMessage.stub!(:get_attachment_by_url_part_number_and_filename).and_return(attachment)          InfoRequest.stub!(:find).with("132").and_return(info_request) -        params = { :file_name => [long_name], +        params = { :file_name => long_name,                     :controller => "request",                     :action => "get_attachment_as_html",                     :id => "132", diff --git a/spec/controllers/services_controller_spec.rb b/spec/controllers/services_controller_spec.rb index a9950d520..399f48acb 100644 --- a/spec/controllers/services_controller_spec.rb +++ b/spec/controllers/services_controller_spec.rb @@ -4,7 +4,7 @@ require 'fakeweb'  describe ServicesController, "when returning a message for people in other countries" do -    integrate_views +    render_views      # store and restore the locale in the context of the test suite to isolate      # changes made in these tests @@ -54,27 +54,27 @@ describe ServicesController, "when returning a message for people in other count          it "should return the 'another country' message if the service responds OK" do              config = MySociety::Config.load_default()              config['ISO_COUNTRY_CODE'] = "DE" -            Configuration.stub!(:gaze_url).and_return('http://denmark.com') +            AlaveteliConfiguration.stub!(:gaze_url).and_return('http://denmark.com')              FakeWeb.register_uri(:get, %r|denmark.com|, :body => "DK")              get :other_country_message              response.should be_success              response.body.should == 'Hello! We have an  <a href="/help/alaveteli?country_name=Deutschland">important message</a> for visitors outside Deutschland <span class="close-button">X</span>'          end          it "should default to no message if the country_from_ip domain doesn't exist" do -            Configuration.stub!(:gaze_url).and_return('http://12123sdf14qsd.com') +            AlaveteliConfiguration.stub!(:gaze_url).and_return('http://12123sdf14qsd.com')              get :other_country_message              response.should be_success              response.body.should == ''          end          it "should default to no message if the country_from_ip service doesn't exist" do -            Configuration.stub!(:gaze_url).and_return('http://www.google.com') +            AlaveteliConfiguration.stub!(:gaze_url).and_return('http://www.google.com')              get :other_country_message              response.should be_success              response.body.should == ''          end          it "should default to no message if the country_from_ip service returns an error" do              FakeWeb.register_uri(:get, %r|500.com|, :body => "Error", :status => ["500", "Error"]) -            Configuration.stub!(:gaze_url).and_return('http://500.com') +            AlaveteliConfiguration.stub!(:gaze_url).and_return('http://500.com')              get :other_country_message              response.should be_success              response.body.should == '' diff --git a/spec/controllers/track_controller_spec.rb b/spec/controllers/track_controller_spec.rb index 5505afe59..5a766b1e1 100644 --- a/spec/controllers/track_controller_spec.rb +++ b/spec/controllers/track_controller_spec.rb @@ -49,14 +49,14 @@ describe TrackController, "when making a new track on a request" do      it "should save a search track and redirect to the right place" do          session[:user_id] = @user.id          @track_thing.should_receive(:save!) -        get :track_search_query, :query_array => ["bob variety:sent"], :feed => 'track' +        get :track_search_query, :query_array => "bob variety:sent", :feed => 'track'          response.should redirect_to(:controller => 'general', :action => 'search', :combined => ["bob", "requests"])      end  end  describe TrackController, "when sending alerts for a track" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data @@ -65,8 +65,7 @@ describe TrackController, "when sending alerts for a track" do      it "should send alerts" do          # Don't do clever locale-insertion-unto-URL stuff -        old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new +        RoutingFilter.active = false          # set the time the comment event happened at to within the last week          ire = info_request_events(:silly_comment_event) @@ -80,7 +79,7 @@ describe TrackController, "when sending alerts for a track" do          mail = deliveries[0]          mail.body.should =~ /Alter your subscription/          mail.to_addrs.first.to_s.should include(users(:silly_name_user).email) -        mail.body =~ /(http:\/\/.*\/c\/(.*))/ +        mail.body.to_s =~ /(http:\/\/.*\/c\/(.*))/          mail_url = $1          mail_token = $2 @@ -114,7 +113,7 @@ describe TrackController, "when sending alerts for a track" do          deliveries.size.should == 0          # Restore the routing filters -        ActionController::Routing::Routes.filters = old_filters +        RoutingFilter.active = true      end      it "should send localised alerts" do @@ -133,7 +132,7 @@ describe TrackController, "when sending alerts for a track" do  end  describe TrackController, "when viewing RSS feed for a track" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data @@ -145,6 +144,7 @@ describe TrackController, "when viewing RSS feed for a track" do          get :track_request, :feed => 'feed', :url_title => track_thing.info_request.url_title          response.should render_template('track/atom_feed') +        response.content_type.should == 'application/atom+xml'          # XXX should check it is an atom.builder type being rendered, not sure how to          assigns[:xapian_object].matches_estimated.should == 3 @@ -163,7 +163,7 @@ end  describe TrackController, "when viewing JSON version of a track feed" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data @@ -205,7 +205,7 @@ end  describe TrackController, "when tracking a public body" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data diff --git a/spec/controllers/user_controller_spec.rb b/spec/controllers/user_controller_spec.rb index 23006803b..1d8e3dcc3 100644 --- a/spec/controllers/user_controller_spec.rb +++ b/spec/controllers/user_controller_spec.rb @@ -5,7 +5,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')  # http://rspec.rubyforge.org/rspec-rails/1.1.12/classes/Spec/Rails/Example/ControllerExampleGroup.html  describe UserController, "when showing a user" do -    integrate_views +    render_views      before(:each) do          load_raw_emails_data          get_fixtures_xapian_index @@ -64,7 +64,7 @@ describe UserController, "when showing a user" do  end  describe UserController, "when signing in" do -    integrate_views +    render_views      def get_last_postredirect          post_redirects = PostRedirect.find_by_sql("select * from post_redirects order by id desc limit 1") @@ -74,7 +74,7 @@ describe UserController, "when signing in" do      it "should show sign in / sign up page" do          get :signin -        response.should have_tag("input#signin_token") +        response.should have_selector("input#signin_token")      end      it "should create post redirect to / when you just go to /signin" do @@ -100,8 +100,7 @@ describe UserController, "when signing in" do      end      it "should log in when you give right email/password, and redirect to where you were" do -        old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new +        RoutingFilter.active = false          get :signin, :r => "/list"          response.should render_template('sign') @@ -112,14 +111,13 @@ describe UserController, "when signing in" do          session[:user_id].should == users(:bob_smith_user).id          # response doesn't contain /en/ but redirect_to does...          response.should redirect_to(:controller => 'request', :action => 'list', :post_redirect => 1) -        response.should_not send_email +        ActionMailer::Base.deliveries.should be_empty -        ActionController::Routing::Routes.filters = old_filters +        RoutingFilter.active = true      end      it "should not log you in if you use an invalid PostRedirect token, and shouldn't give 500 error either" do -        old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new +        RoutingFilter.active = false          post_redirect = "something invalid"          lambda { @@ -132,7 +130,7 @@ describe UserController, "when signing in" do          response.should render_template('sign')          assigns[:post_redirect].should == nil -        ActionController::Routing::Routes.filters = old_filters +        RoutingFilter.active = true      end  # No idea how to test this in the test framework :( @@ -152,12 +150,11 @@ describe UserController, "when signing in" do              :token => post_redirect.token          }          response.should render_template('confirm') -        response.should send_email +        ActionMailer::Base.deliveries.should_not be_empty      end      it "should confirm your email, log you in and redirect you to where you were after you click an email link" do -        old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new +        RoutingFilter.active = false          get :signin, :r => "/list"          post_redirect = get_last_postredirect @@ -165,19 +162,19 @@ describe UserController, "when signing in" do          post :signin, { :user_signin => { :email => 'unconfirmed@localhost', :password => 'jonespassword' },              :token => post_redirect.token          } -        response.should send_email +        ActionMailer::Base.deliveries.should_not be_empty          deliveries = ActionMailer::Base.deliveries          deliveries.size.should  == 1          mail = deliveries[0] -        mail.body =~ /(http:\/\/.*(\/c\/(.*)))/ +        mail.body.to_s =~ /(http:\/\/.*(\/c\/(.*)))/          mail_url = $1          mail_path = $2          mail_token = $3          # check is right confirmation URL          mail_token.should == post_redirect.email_token -        params_from(:get, mail_path).should == { :controller => 'user', :action => 'confirm', :email_token => mail_token } +        Rails.application.routes.recognize_path(mail_path).should == { :controller => 'user', :action => 'confirm', :email_token => mail_token }          # check confirmation URL works          session[:user_id].should be_nil @@ -185,12 +182,11 @@ describe UserController, "when signing in" do          session[:user_id].should == users(:unconfirmed_user).id          response.should redirect_to(:controller => 'request', :action => 'list', :post_redirect => 1) -        ActionController::Routing::Routes.filters = old_filters +        RoutingFilter.active = true      end      it "should keep you logged in if you click a confirmation link and are already logged in as an admin" do -        old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new +        RoutingFilter.active = false          get :signin, :r => "/list"          post_redirect = get_last_postredirect @@ -198,19 +194,19 @@ describe UserController, "when signing in" do          post :signin, { :user_signin => { :email => 'unconfirmed@localhost', :password => 'jonespassword' },              :token => post_redirect.token          } -        response.should send_email +        ActionMailer::Base.deliveries.should_not be_empty          deliveries = ActionMailer::Base.deliveries          deliveries.size.should  == 1          mail = deliveries[0] -        mail.body =~ /(http:\/\/.*(\/c\/(.*)))/ +        mail.body.to_s =~ /(http:\/\/.*(\/c\/(.*)))/          mail_url = $1          mail_path = $2          mail_token = $3          # check is right confirmation URL          mail_token.should == post_redirect.email_token -        params_from(:get, mail_path).should == { :controller => 'user', :action => 'confirm', :email_token => mail_token } +        Rails.application.routes.recognize_path(mail_path).should == { :controller => 'user', :action => 'confirm', :email_token => mail_token }          # Log in as an admin          session[:user_id] = users(:admin_user).id @@ -222,19 +218,19 @@ describe UserController, "when signing in" do          # And the redirect should still work, of course          response.should redirect_to(:controller => 'request', :action => 'list', :post_redirect => 1) -        ActionController::Routing::Routes.filters = old_filters +        RoutingFilter.active = true      end  end  describe UserController, "when signing up" do -    integrate_views +    render_views      it "should be an error if you type the password differently each time" do          post :signup, { :user_signup => { :email => 'new@localhost', :name => 'New Person',              :password => 'sillypassword', :password_confirmation => 'sillypasswordtwo' }          } -        assigns[:user_signup].errors[:password].should == 'Please enter the same password twice' +        assigns[:user_signup].errors[:password].should == ['Please enter the same password twice']      end      it "should be an error to sign up with a misformatted email" do @@ -285,7 +281,7 @@ describe UserController, "when signing up" do  end  describe UserController, "when signing out" do -    integrate_views +    render_views      it "should log you out and redirect to the home page" do          session[:user_id] = users(:bob_smith_user).id @@ -295,21 +291,20 @@ describe UserController, "when signing out" do      end      it "should log you out and redirect you to where you were" do -        old_filters = ActionController::Routing::Routes.filters -        ActionController::Routing::Routes.filters = RoutingFilter::Chain.new +        RoutingFilter.active = false          session[:user_id] = users(:bob_smith_user).id          get :signout, :r => '/list'          session[:user_id].should be_nil          response.should redirect_to(:controller => 'request', :action => 'list') -        ActionController::Routing::Routes.filters = old_filters +        RoutingFilter.active = true      end  end  describe UserController, "when sending another user a message" do -    integrate_views +    render_views      it "should redirect to signin page if you go to the contact form and aren't signed in" do          get :contact, :id => users(:silly_name_user) @@ -337,16 +332,16 @@ describe UserController, "when sending another user a message" do          deliveries = ActionMailer::Base.deliveries          deliveries.size.should  == 1          mail = deliveries[0] -        mail.body.should include("Bob Smith has used #{Configuration::site_name} to send you the message below") +        mail.body.should include("Bob Smith has used #{AlaveteliConfiguration::site_name} to send you the message below")          mail.body.should include("Just a test!")          #mail.to_addrs.first.to_s.should == users(:silly_name_user).name_and_email # XXX fix some nastiness with quoting name_and_email -        mail.from_addrs.first.to_s.should == users(:bob_smith_user).name_and_email +        mail.from_addrs.first.to_s.should == users(:bob_smith_user).email      end  end  describe UserController, "when changing password" do -    integrate_views +    render_views      it "should show the email form when not logged in" do          get :signchangepassword @@ -386,7 +381,7 @@ describe UserController, "when changing password" do          post :signchangepassword, { :user => { :password => 'ooo', :password_confirmation => 'ooo' },              :submitted_signchangepassword_do => 1          } -        users(:bob_smith_user).hashed_password.should != old_hash +        users(:bob_smith_user).reload.hashed_password.should_not == old_hash          response.should redirect_to(:controller => 'user', :action => 'show', :url_name => users(:bob_smith_user).url_name)      end @@ -416,7 +411,7 @@ describe UserController, "when changing password" do  end  describe UserController, "when changing email address" do -    integrate_views +    render_views      it "should require login" do          get :signchangeemail @@ -500,10 +495,10 @@ describe UserController, "when changing email address" do          deliveries = ActionMailer::Base.deliveries          deliveries.size.should  == 1          mail = deliveries[0] -        mail.body.should include("confirm that you want to change") +        mail.body.should include("confirm that you want to \nchange")          mail.to.should == [ 'newbob@localhost' ] -        mail.body =~ /(http:\/\/.*(\/c\/(.*)))/ +        mail.body.to_s =~ /(http:\/\/.*(\/c\/(.*)))/          mail_url = $1          mail_path = $2          mail_token = $3 @@ -561,16 +556,13 @@ describe UserController, "when changing email address" do  end  describe UserController, "when using profile photos" do -    integrate_views +    render_views      before do          @user = users(:bob_smith_user) -        @uploadedfile = File.open(file_fixture_name("parrot.png")) -        @uploadedfile.stub!(:original_filename).and_return('parrot.png') - -        @uploadedfile_2 = File.open(file_fixture_name("parrot.jpg")) -        @uploadedfile_2.stub!(:original_filename).and_return('parrot.jpg') +        @uploadedfile = fixture_file_upload("/files/parrot.png") +        @uploadedfile_2 = fixture_file_upload("/files/parrot.jpg")      end      it "should not let you change profile photo if you're not logged in as the user" do @@ -631,9 +623,10 @@ describe UserController, "when showing JSON version for API" do  end  describe UserController, "when viewing the wall" do -    integrate_views +    render_views      before(:each) do +        load_raw_emails_data          get_fixtures_xapian_index      end  | 
