aboutsummaryrefslogtreecommitdiffstats
path: root/spec/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'spec/controllers')
-rw-r--r--spec/controllers/application_controller_spec.rb54
-rw-r--r--spec/controllers/request_controller_spec.rb89
-rw-r--r--spec/controllers/services_controller_spec.rb44
3 files changed, 129 insertions, 58 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 6b5e3e216..da05785c5 100644
--- a/spec/controllers/request_controller_spec.rb
+++ b/spec/controllers/request_controller_spec.rb
@@ -714,6 +714,16 @@ describe RequestController, "when showing one request" do
describe 'when making a zipfile available' do
+ it 'should return a 410 for a request that is hidden' do
+ title = 'why_do_you_have_such_a_fancy_dog'
+ ir = info_requests(:fancy_dog_request)
+ ir.prominence = 'hidden'
+ ir.save!
+ get :download_entire_request, {:url_title => title}, { :user_id => ir.user.id }
+ response.should render_template('request/hidden')
+ response.code.should == '410'
+ end
+
it "should have a different zipfile URL when the request changes" do
title = 'why_do_you_have_such_a_fancy_dog'
ir = info_requests(:fancy_dog_request)
@@ -752,7 +762,7 @@ 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 have_text(/#{assigns[:url_path]}$/)
end
end
end
@@ -836,14 +846,51 @@ describe RequestController, "when changing prominence of a request" do
ir.save!
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, :skip_cache => 1
+ get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id,
+ :id => ir.id,
+ :part => 2,
+ :skip_cache => 1
response.content_type.should == "text/html"
response.should_not have_text(/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
+ 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 render_template('request/hidden')
+ response.code.should == '410'
+ end
+
+ it 'should not generate an HTML version of an attachment whose prominence is hidden/requester
+ only even for the requester or an admin but should return a 404' do
+ ir = info_requests(:fancy_dog_request)
+ ir.prominence = 'hidden'
+ ir.save!
+ receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)
+ session[:user_id] = users(:admin_user).id
+ lambda do
+ get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id,
+ :id => ir.id,
+ :part => 2,
+ :file_name => ['hello.txt']
+ end.should raise_error(ActiveRecord::RecordNotFound)
+ end
+
+ it 'should not generate an HTML version of an attachment whose prominence is hidden/requester
+ only even for the requester or an admin but should return a 404' do
+ ir = info_requests(:fancy_dog_request)
+ ir.prominence = 'hidden'
+ ir.save!
+ receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)
+ session[:user_id] = users(:admin_user).id
+ lambda do
+ get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id,
+ :id => ir.id,
+ :part => 2,
+ :file_name => ['hello.txt']
+ end.should raise_error(ActiveRecord::RecordNotFound)
end
end
@@ -2166,6 +2213,14 @@ describe RequestController, "when showing similar requests" do
}.should raise_error(ActiveRecord::RecordNotFound)
end
+
+ it "should return 404 for pages we don't want to serve up" do
+ badger_request = info_requests(:badger_request)
+ lambda {
+ get :similar, :url_title => badger_request.url_title, :page => 100
+ }.should raise_error(ActiveRecord::RecordNotFound)
+ end
+
end
@@ -2253,4 +2308,32 @@ 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,
+ :id => 44,
+ :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 d2d22826a..796c6b63d 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
render_views
@@ -40,4 +41,45 @@ describe ServicesController, "when using web services" do
FastGettext.set_locale(@old_locale)
end
+ 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