aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouise Crow <louise.crow@gmail.com>2012-12-17 10:32:36 +0000
committerLouise Crow <louise.crow@gmail.com>2012-12-17 10:41:21 +0000
commit610eac0af6f8faf426b46f14ecbe9a312b428bb0 (patch)
treef7bb8eca3cec984238ba9cd20786b6d21dd7e2f5
parent4a42afb6feaca5f3ed81ae6a64d29e273a52039b (diff)
Rewrite specs that were in spec/controller/application_controller as full-stack controller specs in the relevant controllers. It turns out that having spec blocks that reference the ApplicationController class directly i.e. "describe ApplicationController" can have unpredictable effects. actionpack's action_controller/test_case.rb rewrites rescue_action_without_handler on whatever it is included in, and if this is done on a controller class, and then directly on action controller, it can result in an infinite loop of recursive calls. This turns out to be the problem that was causing some tests in error_spec.rb to fail in Travis under Ruby 1.9.
-rw-r--r--spec/controllers/application_controller_spec.rb54
-rw-r--r--spec/controllers/request_controller_spec.rb27
-rw-r--r--spec/controllers/services_controller_spec.rb46
3 files changed, 71 insertions, 56 deletions
diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb
deleted file mode 100644
index 18341ae6f..000000000
--- a/spec/controllers/application_controller_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
-require 'fakeweb'
-
-describe ApplicationController, "when accessing third party services" do
-
- before (:each) do
- FakeWeb.clean_registry
- end
-
- after (:each) do
- FakeWeb.clean_registry
- end
-
- it "should succeed if the service responds OK" do
- Configuration.stub!(:gaze_url).and_return('http://denmark.com')
- FakeWeb.register_uri(:get, %r|denmark.com|, :body => "DK")
- country = self.controller.send :country_from_ip
- country.should == "DK"
- end
- it "should fail silently if the country_from_ip domain doesn't exist" do
- Configuration.stub!(:gaze_url).and_return('http://12123sdf14qsd.com')
- country = self.controller.send :country_from_ip
- country.should == Configuration.iso_country_code
- end
- it "should fail silently if the country_from_ip service doesn't exist" do
- Configuration.stub!(:gaze_url).and_return('http://www.google.com')
- country = self.controller.send :country_from_ip
- country.should == Configuration.iso_country_code
- end
- it "should fail silently 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')
- country = self.controller.send :country_from_ip
- country.should == Configuration.iso_country_code
- end
-end
-
-describe ApplicationController, "when caching fragments" do
-
- it "should not fail with long filenames" do
- long_name = "blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah.txt"
- params = { :only_path => true,
- :file_name => [long_name],
- :controller => "request",
- :action => "get_attachment_as_html",
- :id => "132",
- :incoming_message_id => "44",
- :part => "2" }
- path = self.controller.send(:foi_fragment_cache_path, params)
- self.controller.send(:foi_fragment_cache_write, path, "whassap")
- end
-
-end
-
diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb
index 521ad7b5a..7cfa5cb4a 100644
--- a/spec/controllers/request_controller_spec.rb
+++ b/spec/controllers/request_controller_spec.rb
@@ -2313,4 +2313,31 @@ describe RequestController, "when reporting a request (logged in)" do
end
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,
+ :all_can_view? => true)
+ incoming_message = mock(IncomingMessage, :info_request => info_request,
+ :parse_raw_email! => true,
+ :info_request_id => 132,
+ :get_attachments_for_display => nil,
+ :html_mask_stuff! => nil)
+ 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)
+ InfoRequest.stub!(:find).with("132").and_return(info_request)
+ params = { :file_name => [long_name],
+ :controller => "request",
+ :action => "get_attachment_as_html",
+ :id => "132",
+ :incoming_message_id => "44",
+ :part => "2" }
+ get :get_attachment_as_html, params
+ end
+
+end
+
diff --git a/spec/controllers/services_controller_spec.rb b/spec/controllers/services_controller_spec.rb
index a701ae247..a9950d520 100644
--- a/spec/controllers/services_controller_spec.rb
+++ b/spec/controllers/services_controller_spec.rb
@@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+require 'fakeweb'
-describe ServicesController, "when using web services" do
+describe ServicesController, "when returning a message for people in other countries" do
integrate_views
@@ -40,4 +41,45 @@ describe ServicesController, "when using web services" do
FastGettext.set_locale(@old_locale)
end
-end \ No newline at end of file
+ describe 'when the external country from IP service is in different states' do
+
+ before (:each) do
+ FakeWeb.clean_registry
+ end
+
+ after (:each) do
+ FakeWeb.clean_registry
+ end
+
+ 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')
+ 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')
+ 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')
+ 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')
+ get :other_country_message
+ response.should be_success
+ response.body.should == ''
+ end
+
+ end
+
+end