aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/general_controller_spec.rb11
-rw-r--r--spec/fixtures/files/document-pdf.email110
-rw-r--r--spec/lib/mail_handler/mail_handler_spec.rb6
-rw-r--r--spec/mailers/request_mailer_spec.rb21
-rw-r--r--spec/models/public_body_spec.rb32
5 files changed, 180 insertions, 0 deletions
diff --git a/spec/controllers/general_controller_spec.rb b/spec/controllers/general_controller_spec.rb
index e67cc9492..7590a5b42 100644
--- a/spec/controllers/general_controller_spec.rb
+++ b/spec/controllers/general_controller_spec.rb
@@ -42,6 +42,17 @@ describe GeneralController, 'when getting the blog feed' do
assigns[:blog_items].count.should == 1
end
+ context 'if no feed is configured' do
+
+ before do
+ AlaveteliConfiguration.stub!(:blog_feed).and_return('')
+ end
+
+ it 'should raise an ActiveRecord::RecordNotFound error' do
+ lambda{ get :blog }.should raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+
end
describe GeneralController, "when showing the frontpage" do
diff --git a/spec/fixtures/files/document-pdf.email b/spec/fixtures/files/document-pdf.email
new file mode 100644
index 000000000..f4fc6f0fe
--- /dev/null
+++ b/spec/fixtures/files/document-pdf.email
@@ -0,0 +1,110 @@
+From authority@example.org Tue Dec 3 11:13:02 2013
+Return-path: <authority@example.org>
+Envelope-to: requester@example.org
+Delivery-date: Tue, 03 Dec 2013 11:13:00 +0000
+From: Test Authority <authority@example.org>
+To: requester@example.org
+Subject: testing a PDF attachment with the wrong content-type
+Date: Tue, 03 Dec 2013 11:12:45 +0000
+Message-ID: <87li09xuasdfasdfpoija@blahblah>
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="=-=-="
+
+--=-=-=
+Content-Type: text/plain
+
+Here's a PDF attachement which has a document/pdf content-type,
+when it really should be application/pdf.
+
+
+--=-=-=
+Content-Type: application/pdf
+Content-Disposition: attachment; filename=tiny-example.pdf
+Content-Transfer-Encoding: base64
+Content-Description: a very small example PDF
+
+JVBERi0xLjUKJbXtrvsKMyAwIG9iago8PCAvTGVuZ3RoIDQgMCBSCiAgIC9GaWx0ZXIgL0ZsYXRl
+RGVjb2RlCj4+CnN0cmVhbQp4nCvkMlAAwaJ0Bf1EA4X0Yi6nEC5DA1M9IwNLYzNjsBwS18hIz9TI
+0tBSwdzIQs/Y3MLAzEQhJJdLP03XQBeoUCEkjStawyM1JydfUTM2xIvLNYQrkAsAJG8VmQplbmRz
+dHJlYW0KZW5kb2JqCjQgMCBvYmoKICAgOTIKZW5kb2JqCjIgMCBvYmoKPDwKICAgL0V4dEdTdGF0
+ZSA8PAogICAgICAvYTAgPDwgL0NBIDEgL2NhIDEgPj4KICAgPj4KICAgL0ZvbnQgPDwKICAgICAg
+L2YtMC0wIDUgMCBSCiAgID4+Cj4+CmVuZG9iago2IDAgb2JqCjw8IC9UeXBlIC9QYWdlCiAgIC9Q
+YXJlbnQgMSAwIFIKICAgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU1NzQgODQxLjg4OTc3MSBdCiAg
+IC9Db250ZW50cyAzIDAgUgogICAvR3JvdXAgPDwKICAgICAgL1R5cGUgL0dyb3VwCiAgICAgIC9T
+IC9UcmFuc3BhcmVuY3kKICAgICAgL0kgdHJ1ZQogICAgICAvQ1MgL0RldmljZVJHQgogICA+Pgog
+ICAvUmVzb3VyY2VzIDIgMCBSCj4+CmVuZG9iago3IDAgb2JqCjw8IC9MZW5ndGggOCAwIFIKICAg
+L0ZpbHRlciAvRmxhdGVEZWNvZGUKICAgL0xlbmd0aDEgMzcxNgo+PgpzdHJlYW0KeJzlVnt0lMUV
+v/P9vtndZB/5drMbiUlww7ookJCQECCAzYJBBSrlETXYxgayxIjQJAQVTOOCFAREgwKLAtIUkSpE
+mlIkG2OtVN4xrZXH8Y0gFGkjRouoa5j0btCe0/boOW3/6OnpzM58cx9z5/7ud+fuR4KI4mkBgbxl
+s6dVvXnmiTlECBJpt5bdPddLd6TlE8mXiIQqr7p9dvXgu2cSmZmmbbfPml9etrfAzOtG1o9UzJgW
+7O56fQSRZRbzhlQwwxYx3cL0ZqavrJg9d97lhs76lgNM95pVWTaNKM7N9HtMp86eNq9KrzFVM93F
+tLdqzoyqEeaPeRmXyj5UkEblKqyXy83srZkuD9j0L8n0pbDIkKZT1p4jHYPIONJxpCM70Znu9Kc7
+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
+1pDjEjE2zS7HGrjBjusVrgtjTBiFCtdqmfLaKEa3YtR4BBQKFL5zjUt+x41rRibIa1wYOcIuRwa6
+EzDCjuEK+QrDhrrlsCiGDjHkUDeG5FnlEAN5VgzujVw7cgZZZY7CICuys6wy244sKwZmxsmBBjLj
+kJGDAf39ckAQ/fu5ZH8/+rlw9VV+efUoXOVHX79V9k2A34orFXwKfRKQzjjTXfAGcUUUvRlC7yDS
+7EjlCKYqpERx+WgkM5Gs0CuIyzhSlykk8aakZHgU3AqJCi5WcCk4GatzNIw6JAThULDbkqRdwcba
+tiRYFeINxClYWM2iYHbDFITOQp0zwAPmQnGVNaSWCWGAFEREBBc/JAb8LzT6bzvwrS3tr1SHeSwK
+ZW5kc3RyZWFtCmVuZG9iago4IDAgb2JqCiAgIDI0MDIKZW5kb2JqCjkgMCBvYmoKPDwgL0xlbmd0
+aCAxMCAwIFIKICAgL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnicXVAxbsQgEOx5xZZ3
+xQnbykUpkKXo0ri4JIqTB2BYHKQYEMaFf58FThcpBcwsuzOMll+Gl8HZBPw9ejViAmOdjrj6LSqE
+CWfrWNuBtirdqnKrRQbGSTzua8JlcMYzIYB/UHNNcYfDs/YTHhkA8LeoMVo3w+HrMtancQvhBxd0
+CRrW96DRkN1Vhle5IPAiPg2a+jbtJ5L9TXzuAaErdVsjKa9xDVJhlG5GJpqmB2FMz9Dpf71zVUxG
+fcvIxMMTTTYNAROP58IJiKvKVeamcvITXVs4Qfa+ueRf8jru8dUWIyUvOyuRc1jr8L7W4ENWlfML
+jQ547AplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCiAgIDI0NgplbmRvYmoKMTEgMCBvYmoKPDwg
+L1R5cGUgL0ZvbnREZXNjcmlwdG9yCiAgIC9Gb250TmFtZSAvUlFaWlJTK0RlamFWdVNhbnMKICAg
+L0ZvbnRGYW1pbHkgKERlamFWdSBTYW5zKQogICAvRmxhZ3MgMzIKICAgL0ZvbnRCQm94IFsgLTEw
+MjAgLTQxNSAxNjgwIDExNjYgXQogICAvSXRhbGljQW5nbGUgMAogICAvQXNjZW50IDkyOAogICAv
+RGVzY2VudCAtMjM1CiAgIC9DYXBIZWlnaHQgMTE2NgogICAvU3RlbVYgODAKICAgL1N0ZW1IIDgw
+CiAgIC9Gb250RmlsZTIgNyAwIFIKPj4KZW5kb2JqCjUgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKICAg
+L1N1YnR5cGUgL1RydWVUeXBlCiAgIC9CYXNlRm9udCAvUlFaWlJTK0RlamFWdVNhbnMKICAgL0Zp
+cnN0Q2hhciAzMgogICAvTGFzdENoYXIgMTExCiAgIC9Gb250RGVzY3JpcHRvciAxMSAwIFIKICAg
+L0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKICAgL1dpZHRocyBbIDAgNDAwIDAgMCAwIDAgMCAw
+IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+MCAwIDAgMCA3NTEgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+IDAgMCAwIDAgMCA2MTUgMCAwIDAgMCAwIDAgMjc3IDAgMCA2MTEgXQogICAgL1RvVW5pY29kZSA5
+IDAgUgo+PgplbmRvYmoKMSAwIG9iago8PCAvVHlwZSAvUGFnZXMKICAgL0tpZHMgWyA2IDAgUiBd
+CiAgIC9Db3VudCAxCj4+CmVuZG9iagoxMiAwIG9iago8PCAvQ3JlYXRvciAoY2Fpcm8gMS4xMi4x
+NiAoaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnKSkKICAgL1Byb2R1Y2VyIChjYWlybyAxLjEyLjE2
+IChodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcpKQo+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUg
+L0NhdGFsb2cKICAgL1BhZ2VzIDEgMCBSCj4+CmVuZG9iagp4cmVmCjAgMTQKMDAwMDAwMDAwMCA2
+NTUzNSBmIAowMDAwMDA0MDYyIDAwMDAwIG4gCjAwMDAwMDAyMDUgMDAwMDAgbiAKMDAwMDAwMDAx
+NSAwMDAwMCBuIAowMDAwMDAwMTg0IDAwMDAwIG4gCjAwMDAwMDM2NzkgMDAwMDAgbiAKMDAwMDAw
+MDMxNCAwMDAwMCBuIAowMDAwMDAwNTQyIDAwMDAwIG4gCjAwMDAwMDMwMzggMDAwMDAgbiAKMDAw
+MDAwMzA2MSAwMDAwMCBuIAowMDAwMDAzMzg1IDAwMDAwIG4gCjAwMDAwMDM0MDggMDAwMDAgbiAK
+MDAwMDAwNDEyNyAwMDAwMCBuIAowMDAwMDA0MjU3IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUg
+MTQKICAgL1Jvb3QgMTMgMCBSCiAgIC9JbmZvIDEyIDAgUgo+PgpzdGFydHhyZWYKNDMxMAolJUVP
+Rgo=
+--=-=-=--
+
diff --git a/spec/lib/mail_handler/mail_handler_spec.rb b/spec/lib/mail_handler/mail_handler_spec.rb
index bc027eaec..49a65dade 100644
--- a/spec/lib/mail_handler/mail_handler_spec.rb
+++ b/spec/lib/mail_handler/mail_handler_spec.rb
@@ -409,6 +409,12 @@ describe 'when getting attachment attributes' do
attributes[1][:body].length.should == 7769
end
+ it 'should treat a document/pdf attachment as application/pdf' do
+ mail = get_fixture_mail('document-pdf.email')
+ attributes = MailHandler.get_attachment_attributes(mail)
+ attributes[1][:content_type].should == "application/pdf"
+ end
+
it 'should produce a consistent set of url_part_numbers, content_types, within_rfc822_subjects
and filenames from an example mail with lots of attachments' do
mail = get_fixture_mail('many-attachments-date-header.email')
diff --git a/spec/mailers/request_mailer_spec.rb b/spec/mailers/request_mailer_spec.rb
index 4e0765921..516d13127 100644
--- a/spec/mailers/request_mailer_spec.rb
+++ b/spec/mailers/request_mailer_spec.rb
@@ -332,6 +332,27 @@ describe RequestMailer, 'when sending mail when someone has updated an old uncla
end
+describe RequestMailer, 'when generating a fake response for an upload' do
+
+ before do
+ @foi_officer = mock_model(User, :name_and_email => "FOI officer's name and email")
+ @request_user = mock_model(User)
+ @public_body = mock_model(PublicBody, :name => 'Test public body')
+ @info_request = mock_model(InfoRequest, :user => @request_user,
+ :email_subject_followup => 'Re: Freedom of Information - Test request',
+ :incoming_name_and_email => 'Someone <someone@example.org>')
+ end
+
+ it 'should should generate a "fake response" email with a reasonable subject line' do
+ fake_email = RequestMailer.fake_response(@info_request,
+ @foi_officer,
+ "The body of the email...",
+ "blah.txt",
+ "The content of blah.txt")
+ fake_email.subject.should == "Re: Freedom of Information - Test request"
+ end
+
+end
describe RequestMailer, 'when sending a new response email' do
diff --git a/spec/models/public_body_spec.rb b/spec/models/public_body_spec.rb
index 23842ccff..ed24ced52 100644
--- a/spec/models/public_body_spec.rb
+++ b/spec/models/public_body_spec.rb
@@ -213,6 +213,15 @@ describe PublicBody, " when saving" do
public_body.name.should == "Mark's Public Body"
end
+ it 'should update the right translation when in a locale with an underscore' do
+ AlaveteliLocalization.set_locales('he_IL', 'he_IL')
+ public_body = public_bodies(:humpadink_public_body)
+ translation_count = public_body.translations.size
+ public_body.name = 'Renamed'
+ public_body.save!
+ public_body.translations.size.should == translation_count
+ end
+
it 'should not create a new version when nothing has changed' do
@public_body.versions.size.should == 0
set_default_attributes(@public_body)
@@ -473,6 +482,20 @@ describe PublicBody, " when loading CSV files" do
PublicBody.count.should == original_count
end
+
+ it "should be able to load CSV from a file as well as a string" do
+ # Essentially the same code is used for import_csv_from_file
+ # as import_csv, so this is just a basic check that
+ # import_csv_from_file can load from a file at all. (It would
+ # be easy to introduce a regression that broke this, because
+ # of the confusing change in behaviour of CSV.parse between
+ # Ruby 1.8 and 1.9.)
+ original_count = PublicBody.count
+ filename = file_fixture_name('fake-authority-type-with-field-names.csv')
+ PublicBody.import_csv_from_file(filename, '', 'replace', false, 'someadmin')
+ PublicBody.count.should == original_count + 3
+ end
+
end
describe PublicBody do
@@ -604,3 +627,12 @@ describe PublicBody, "when calculating statistics" do
end
end
+
+describe PublicBody, 'when asked for popular bodies' do
+
+ it 'should return bodies correctly when passed the hyphenated version of the locale' do
+ AlaveteliConfiguration.stub!(:frontpage_publicbody_examples).and_return('')
+ PublicBody.popular_bodies('he-IL').should == [public_bodies(:humpadink_public_body)]
+ end
+
+end