aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/about_me_validator_spec.rb1
-rw-r--r--spec/models/censor_rule_spec.rb95
-rw-r--r--spec/models/change_email_validator_spec.rb1
-rw-r--r--spec/models/contact_validator_spec.rb1
-rw-r--r--spec/models/customstates.rb1
-rw-r--r--spec/models/foi_attachment_spec.rb151
-rw-r--r--spec/models/has_tag_string_tag_spec.rb1
-rw-r--r--spec/models/holiday_import_spec.rb1
-rw-r--r--spec/models/holiday_spec.rb1
-rw-r--r--spec/models/incoming_message_spec.rb26
-rw-r--r--spec/models/info_request_batch_spec.rb3
-rw-r--r--spec/models/info_request_event_spec.rb11
-rw-r--r--spec/models/info_request_spec.rb160
-rw-r--r--spec/models/mail_server_log_spec.rb1
-rw-r--r--spec/models/outgoing_message_spec.rb112
-rw-r--r--spec/models/post_redirect_spec.rb10
-rw-r--r--spec/models/profile_photo_spec.rb1
-rw-r--r--spec/models/public_body_category/category_collection_spec.rb15
-rw-r--r--spec/models/public_body_category_link_spec.rb1
-rw-r--r--spec/models/public_body_category_spec.rb1
-rw-r--r--spec/models/public_body_change_request_spec.rb3
-rw-r--r--spec/models/public_body_heading_spec.rb1
-rw-r--r--spec/models/public_body_spec.rb92
-rw-r--r--spec/models/purge_request_spec.rb19
-rw-r--r--spec/models/spam_address_spec.rb3
-rw-r--r--spec/models/track_thing_spec.rb1
-rw-r--r--spec/models/track_things_sent_email_spec.rb1
-rw-r--r--spec/models/user_info_request_sent_alert_spec.rb1
-rw-r--r--spec/models/user_spec.rb1
-rw-r--r--spec/models/widget_vote_spec.rb54
-rw-r--r--spec/models/xapian_spec.rb4
31 files changed, 656 insertions, 118 deletions
diff --git a/spec/models/about_me_validator_spec.rb b/spec/models/about_me_validator_spec.rb
index 5610cead8..c8078f44a 100644
--- a/spec/models/about_me_validator_spec.rb
+++ b/spec/models/about_me_validator_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe AboutMeValidator do
diff --git a/spec/models/censor_rule_spec.rb b/spec/models/censor_rule_spec.rb
index 4ecd2d3e1..d308ac1b9 100644
--- a/spec/models/censor_rule_spec.rb
+++ b/spec/models/censor_rule_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: censor_rules
@@ -17,6 +18,42 @@
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+describe CensorRule do
+
+ describe :apply_to_text do
+
+ it 'applies the rule to the text' do
+ rule = FactoryGirl.build(:censor_rule, :text => 'secret')
+ text = 'Some secret text'
+ expect(rule.apply_to_text(text)).to eq('Some [REDACTED] text')
+ end
+
+ it 'does not mutate the input' do
+ rule = FactoryGirl.build(:censor_rule, :text => 'secret')
+ text = 'Some secret text'
+ rule.apply_to_text(text)
+ expect(text).to eq('Some secret text')
+ end
+
+ it 'returns the text if the rule is unmatched' do
+ rule = FactoryGirl.build(:censor_rule, :text => 'secret')
+ text = 'Some text'
+ expect(rule.apply_to_text(text)).to eq('Some text')
+ end
+ end
+
+ describe :apply_to_text! do
+
+ it 'mutates the input' do
+ rule = FactoryGirl.build(:censor_rule, :text => 'secret')
+ text = 'Some secret text'
+ rule.apply_to_text!(text)
+ expect(text).to eq('Some [REDACTED] text')
+ end
+
+ end
+end
+
describe CensorRule, "substituting things" do
describe 'when using a text rule' do
@@ -27,19 +64,35 @@ describe CensorRule, "substituting things" do
@censor_rule.replacement = "hello"
end
- it 'should do basic text substitution' do
- body = "I don't know why you say goodbye"
- @censor_rule.apply_to_text!(body)
- body.should == "I don't know why you say hello"
+ describe :apply_to_text do
+
+ it 'should do basic text substitution' do
+ body = "I don't know why you say goodbye"
+ @censor_rule.apply_to_text!(body)
+ body.should == "I don't know why you say hello"
+ end
+
end
- it 'should keep size same for binary substitution' do
- body = "I don't know why you say goodbye"
- orig_body = body.dup
- @censor_rule.apply_to_binary!(body)
- body.size.should == orig_body.size
- body.should == "I don't know why you say xxxxxxx"
- body.should_not == orig_body # be sure duplicated as expected
+ describe :apply_to_binary do
+
+ it 'should keep size same for binary substitution' do
+ body = "I don't know why you say goodbye"
+ orig_body = body.dup
+ @censor_rule.apply_to_binary!(body)
+ body.size.should == orig_body.size
+ body.should == "I don't know why you say xxxxxxx"
+ body.should_not == orig_body # be sure duplicated as expected
+ end
+
+ it 'should handle a UTF-8 rule and ASCII-8BIT text' do
+ body = "I don't know why you say g‘oodbye"
+ body.force_encoding("ASCII-8BIT") if String.method_defined?(:encode)
+ @censor_rule.text = 'g‘oodbye'
+ @censor_rule.apply_to_binary!(body)
+ body.should == "I don't know why you say xxxxxxxxxx"
+ end
+
end
end
@@ -84,6 +137,26 @@ xxxxxxxxx
BODY
end
+ it "handles a UTF-8 rule with ASCII-8BIT text" do
+ @censor_rule.text = "--PRIVATE.*--P‘RIVATE"
+ @body =
+<<BODY
+Some public information
+--PRIVATE
+Some private information
+--P‘RIVATE
+BODY
+ @body.force_encoding('ASCII-8BIT') if String.method_defined?(:encode)
+ @censor_rule.apply_to_binary!(@body)
+ @body.should ==
+<<BODY
+Some public information
+xxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxx
+BODY
+ end
+
end
end
diff --git a/spec/models/change_email_validator_spec.rb b/spec/models/change_email_validator_spec.rb
index b667a23d1..efa8ca819 100644
--- a/spec/models/change_email_validator_spec.rb
+++ b/spec/models/change_email_validator_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
def validator_with_user_and_params(user, params = {})
diff --git a/spec/models/contact_validator_spec.rb b/spec/models/contact_validator_spec.rb
index 0f5403967..9d7c192a3 100644
--- a/spec/models/contact_validator_spec.rb
+++ b/spec/models/contact_validator_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe ContactValidator do
diff --git a/spec/models/customstates.rb b/spec/models/customstates.rb
index 942e1fcde..453453f20 100644
--- a/spec/models/customstates.rb
+++ b/spec/models/customstates.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
module InfoRequestCustomStates
def self.included(base)
diff --git a/spec/models/foi_attachment_spec.rb b/spec/models/foi_attachment_spec.rb
index 882723d1e..b383e5d09 100644
--- a/spec/models/foi_attachment_spec.rb
+++ b/spec/models/foi_attachment_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: foi_attachments
@@ -17,45 +18,133 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe FoiAttachment do
- before(:each) do
- load_raw_emails_data
+ describe :body= do
+
+ it "sets the body" do
+ attachment = FoiAttachment.new
+ attachment.body = "baz"
+ attachment.body.should == "baz"
+ end
+
+ it "sets the size" do
+ attachment = FoiAttachment.new
+ attachment.body = "baz"
+ attachment.body.should == "baz"
+ attachment.display_size.should == "0K"
+ end
+
+ it "reparses the body if it disappears" do
+ load_raw_emails_data
+ im = incoming_messages(:useless_incoming_message)
+ im.extract_attachments!
+ main = im.get_main_body_text_part
+ orig_body = main.body
+ main.delete_cached_file!
+ lambda {
+ im.get_main_body_text_part.body
+ }.should_not raise_error(Errno::ENOENT)
+ main.delete_cached_file!
+ main = im.get_main_body_text_part
+ main.body.should == orig_body
+ end
+
end
- it "sets the body" do
- attachment = FoiAttachment.new
- attachment.body = "baz"
- attachment.body.should == "baz"
+ describe :body do
+
+ it 'returns a binary encoded string when newly created' do
+ foi_attachment = FactoryGirl.create(:body_text)
+ if String.method_defined?(:encode)
+ expect(foi_attachment.body.encoding.to_s).to eq('ASCII-8BIT')
+ end
+ end
+
+
+ it 'returns a binary encoded string when saved' do
+ foi_attachment = FactoryGirl.create(:body_text)
+ foi_attachment = FoiAttachment.find(foi_attachment)
+ if String.method_defined?(:encode)
+ expect(foi_attachment.body.encoding.to_s).to eq('ASCII-8BIT')
+ end
+ end
+
+ end
+
+ describe :body_as_text do
+
+ it 'has a valid UTF-8 string when newly created' do
+ foi_attachment = FactoryGirl.create(:body_text)
+ if String.method_defined?(:encode)
+ expect(foi_attachment.body_as_text.string.encoding.to_s).to eq('UTF-8')
+ expect(foi_attachment.body_as_text.string.valid_encoding?).to be_true
+ end
+ end
+
+ it 'has a valid UTF-8 string when saved' do
+ foi_attachment = FactoryGirl.create(:body_text)
+ foi_attachment = FoiAttachment.find(foi_attachment)
+ if String.method_defined?(:encode)
+ expect(foi_attachment.body_as_text.string.encoding.to_s).to eq('UTF-8')
+ expect(foi_attachment.body_as_text.string.valid_encoding?).to be_true
+ end
+ end
+
+
+ it 'has a true scrubbed? value if the body has been coerced to valid UTF-8' do
+ foi_attachment = FactoryGirl.create(:body_text)
+ foi_attachment.body = "\x0FX\x1C\x8F\xA4\xCF\xF6\x8C\x9D\xA7\x06\xD9\xF7\x90lo"
+ expect(foi_attachment.body_as_text.scrubbed?).to be_true
+ end
+
+ it 'has a false scrubbed? value if the body has not been coerced to valid UTF-8' do
+ foi_attachment = FactoryGirl.create(:body_text)
+ foi_attachment.body = "κόσμε"
+ expect(foi_attachment.body_as_text.scrubbed?).to be_false
+ end
+
end
- it "sets the size" do
- attachment = FoiAttachment.new
- attachment.body = "baz"
- attachment.body.should == "baz"
- attachment.update_display_size!
- attachment.display_size.should == "0K"
+
+ describe :default_body do
+
+ it 'returns valid UTF-8 for a text attachment' do
+ foi_attachment = FactoryGirl.create(:body_text)
+ if String.method_defined?(:encode)
+ expect(foi_attachment.default_body.encoding.to_s).to eq('UTF-8')
+ expect(foi_attachment.default_body.valid_encoding?).to be_true
+ end
+ end
+
+ it 'returns binary for a PDF attachment' do
+ foi_attachment = FactoryGirl.create(:pdf_attachment)
+ if String.method_defined?(:encode)
+ expect(foi_attachment.default_body.encoding.to_s).to eq('ASCII-8BIT')
+ end
+ end
+
end
- it "reparses the body if it disappears" do
- im = incoming_messages(:useless_incoming_message)
- im.extract_attachments!
- main = im.get_main_body_text_part
- orig_body = main.body
- main.delete_cached_file!
- lambda {
- im.get_main_body_text_part.body
- }.should_not raise_error(Errno::ENOENT)
- main.delete_cached_file!
- main = im.get_main_body_text_part
- main.body.should == orig_body
+
+
+ describe :ensure_filename! do
+
+ it 'should create a filename for an instance with a blank filename' do
+ attachment = FoiAttachment.new
+ attachment.filename = ''
+ attachment.ensure_filename!
+ attachment.filename.should == 'attachment.bin'
+ end
end
-end
-describe FoiAttachment, "when ensuring a filename is present" do
+ describe :has_body_as_html? do
+
+ it 'should be true for a pdf attachment' do
+ FactoryGirl.build(:pdf_attachment).has_body_as_html?.should be_true
+ end
+
+ it 'should be false for an html attachment' do
+ FactoryGirl.build(:html_attachment).has_body_as_html?.should be_false
+ end
- it 'should create a filename for an instance with a blank filename' do
- attachment = FoiAttachment.new
- attachment.filename = ''
- attachment.ensure_filename!
- attachment.filename.should == 'attachment.bin'
end
end
diff --git a/spec/models/has_tag_string_tag_spec.rb b/spec/models/has_tag_string_tag_spec.rb
index 759b3396f..bbcb00ca2 100644
--- a/spec/models/has_tag_string_tag_spec.rb
+++ b/spec/models/has_tag_string_tag_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe HasTagString::HasTagStringTag, " when fiddling with tag strings" do
diff --git a/spec/models/holiday_import_spec.rb b/spec/models/holiday_import_spec.rb
index 7ec5c04d5..eb0b33e0e 100644
--- a/spec/models/holiday_import_spec.rb
+++ b/spec/models/holiday_import_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe HolidayImport do
diff --git a/spec/models/holiday_spec.rb b/spec/models/holiday_spec.rb
index 2f8eeabd9..bd73e672b 100644
--- a/spec/models/holiday_spec.rb
+++ b/spec/models/holiday_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: holidays
diff --git a/spec/models/incoming_message_spec.rb b/spec/models/incoming_message_spec.rb
index 0fdc7b663..8fb57e36c 100644
--- a/spec/models/incoming_message_spec.rb
+++ b/spec/models/incoming_message_spec.rb
@@ -1,4 +1,4 @@
-# coding: utf-8
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: incoming_messages
@@ -263,7 +263,7 @@ describe IncomingMessage, " when dealing with incoming mail" do
incoming_message = InfoRequest.holding_pen_request.incoming_messages[0]
# This will raise an error if the bug in TMail hasn't been fixed
- incoming_message.get_body_for_html_display()
+ incoming_message.get_body_for_html_display
end
@@ -282,7 +282,7 @@ end
describe IncomingMessage, " display attachments" do
it "should not show slashes in filenames" do
- foi_attachment = FoiAttachment.new()
+ foi_attachment = FoiAttachment.new
# http://www.whatdotheyknow.com/request/post_commercial_manager_librarie#incoming-17233
foi_attachment.filename = "FOI/09/066 RESPONSE TO FOI REQUEST RECEIVED 21st JANUARY 2009.txt"
expected_display_filename = foi_attachment.filename.gsub(/\//, " ")
@@ -290,7 +290,7 @@ describe IncomingMessage, " display attachments" do
end
it "should not show slashes in subject generated filenames" do
- foi_attachment = FoiAttachment.new()
+ foi_attachment = FoiAttachment.new
# http://www.whatdotheyknow.com/request/post_commercial_manager_librarie#incoming-17233
foi_attachment.within_rfc822_subject = "FOI/09/066 RESPONSE TO FOI REQUEST RECEIVED 21st JANUARY 2009"
foi_attachment.content_type = 'text/plain'
@@ -312,20 +312,20 @@ describe IncomingMessage, " folding quoted parts of emails" do
it 'should fold a plain text lotus notes quoted part correctly' do
text = "FOI Team\n\n\nInfo Requester <xxx@whatdotheyknow.com>=20\nSent by: Info Requester <request-bounce-xxxxx@whatdotheyknow.com>\n06/03/08 10:00\nPlease respond to\nInfo Requester <request-xxxx@whatdotheyknow.com>"
- @incoming_message = IncomingMessage.new()
+ @incoming_message = IncomingMessage.new
@incoming_message.stub_chain(:info_request, :user_name).and_return("Info Requester")
@incoming_message.remove_lotus_quoting(text).should match(/FOLDED_QUOTED_SECTION/)
end
it 'should not error when trying to fold lotus notes quoted parts on a request with no user_name' do
text = "hello"
- @incoming_message = IncomingMessage.new()
+ @incoming_message = IncomingMessage.new
@incoming_message.stub_chain(:info_request, :user_name).and_return(nil)
@incoming_message.remove_lotus_quoting(text).should == 'hello'
end
it "cope with [ in user names properly" do
- @incoming_message = IncomingMessage.new()
+ @incoming_message = IncomingMessage.new
@incoming_message.stub_chain(:info_request, :user_name).and_return("Sir [ Bobble")
# this gives a warning if [ is in the name
text = @incoming_message.remove_lotus_quoting("Sir [ Bobble \nSent by: \n")
@@ -357,7 +357,7 @@ describe IncomingMessage, " checking validity to reply to" do
MailHandler.stub!(:get_from_address).and_return(email)
MailHandler.stub!(:empty_return_path?).with(@mail).and_return(empty_return_path)
MailHandler.stub!(:get_auto_submitted).with(@mail).and_return(autosubmitted)
- @incoming_message = IncomingMessage.new()
+ @incoming_message = IncomingMessage.new
@incoming_message.stub!(:mail).and_return(@mail)
@incoming_message._calculate_valid_to_reply_to.should == result
end
@@ -431,21 +431,21 @@ describe IncomingMessage, " when censoring data" do
@im = incoming_messages(:useless_incoming_message)
- @censor_rule_1 = CensorRule.new()
+ @censor_rule_1 = CensorRule.new
@censor_rule_1.text = "Stilton"
@censor_rule_1.replacement = "Jarlsberg"
@censor_rule_1.last_edit_editor = "unknown"
@censor_rule_1.last_edit_comment = "none"
@im.info_request.censor_rules << @censor_rule_1
- @censor_rule_2 = CensorRule.new()
+ @censor_rule_2 = CensorRule.new
@censor_rule_2.text = "blue"
@censor_rule_2.replacement = "yellow"
@censor_rule_2.last_edit_editor = "unknown"
@censor_rule_2.last_edit_comment = "none"
@im.info_request.censor_rules << @censor_rule_2
- @regex_censor_rule = CensorRule.new()
+ @regex_censor_rule = CensorRule.new
@regex_censor_rule.text = 'm[a-z][a-z][a-z]e'
@regex_censor_rule.regexp = true
@regex_censor_rule.replacement = 'cat'
@@ -477,7 +477,7 @@ describe IncomingMessage, " when censoring whole users" do
@im = incoming_messages(:useless_incoming_message)
- @censor_rule_1 = CensorRule.new()
+ @censor_rule_1 = CensorRule.new
@censor_rule_1.text = "Stilton"
@censor_rule_1.replacement = "Gorgonzola"
@censor_rule_1.last_edit_editor = "unknown"
@@ -563,7 +563,7 @@ describe IncomingMessage, " when uudecoding bad messages" do
im.stub!(:mail).and_return(mail)
ir = info_requests(:fancy_dog_request)
- @censor_rule = CensorRule.new()
+ @censor_rule = CensorRule.new
@censor_rule.text = "moo"
@censor_rule.replacement = "bah"
@censor_rule.last_edit_editor = "unknown"
diff --git a/spec/models/info_request_batch_spec.rb b/spec/models/info_request_batch_spec.rb
index 2881e7745..a8572e7ba 100644
--- a/spec/models/info_request_batch_spec.rb
+++ b/spec/models/info_request_batch_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: info_request_batches
@@ -80,7 +81,7 @@ describe InfoRequestBatch, "when finding an existing batch" do
end
end
-describe InfoRequestBatch, "when creating a batch", :focus => true do
+describe InfoRequestBatch, "when creating a batch" do
before do
@title = 'A test title'
diff --git a/spec/models/info_request_event_spec.rb b/spec/models/info_request_event_spec.rb
index 53c83bd46..17c6a5004 100644
--- a/spec/models/info_request_event_spec.rb
+++ b/spec/models/info_request_event_spec.rb
@@ -1,4 +1,4 @@
-# coding: utf-8
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: info_request_events
@@ -30,6 +30,12 @@ describe InfoRequestEvent do
ire.params.should == example_params
end
+ it "should restore UTF8-heavy params stored under ruby 1.8 as UTF-8" do
+ ire = InfoRequestEvent.new
+ utf8_params = "--- \n:foo: !binary |\n 0KLQvtCz0LDRiCDR\n"
+ ire.params_yaml = utf8_params
+ ire.params[:foo].encoding.to_s.should == 'UTF-8' if ire.params[:foo].respond_to?(:encoding)
+ end
end
describe 'when deciding if it is indexed by search' do
@@ -105,8 +111,7 @@ describe InfoRequestEvent do
describe "should know" do
it "that it's an incoming message" do
- event = InfoRequestEvent.new()
- event.stub!(:incoming_message_selective_columns).and_return(1)
+ event = InfoRequestEvent.new(:incoming_message => mock_model(IncomingMessage))
event.is_incoming_message?.should be_true
event.is_outgoing_message?.should be_false
event.is_comment?.should be_false
diff --git a/spec/models/info_request_spec.rb b/spec/models/info_request_spec.rb
index 9d1e02442..18120fbb5 100644
--- a/spec/models/info_request_spec.rb
+++ b/spec/models/info_request_spec.rb
@@ -1,4 +1,4 @@
-# encoding: utf-8
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: info_requests
@@ -28,6 +28,117 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe InfoRequest do
+ describe :new do
+
+ it 'sets the default law used' do
+ expect(InfoRequest.new.law_used).to eq('foi')
+ end
+
+ it 'sets the default law used if a body is eir-only' do
+ body = FactoryGirl.create(:public_body, :tag_string => 'eir_only')
+ expect(body.info_requests.build.law_used).to eq('eir')
+ end
+
+ it 'does not try to set the law used for existing requests' do
+ info_request = FactoryGirl.create(:info_request)
+ body = FactoryGirl.create(:public_body, :tag_string => 'eir_only')
+ info_request.update_attributes(:public_body_id => body.id)
+ InfoRequest.any_instance.should_not_receive(:law_used=).and_call_original
+ InfoRequest.find(info_request.id)
+ end
+ end
+
+ describe :move_to_public_body do
+
+ context 'with no options' do
+
+ it 'requires an :editor option' do
+ request = FactoryGirl.create(:info_request)
+ new_body = FactoryGirl.create(:public_body)
+ expect {
+ request.move_to_public_body(new_body)
+ }.to raise_error IndexError
+ end
+
+ end
+
+ context 'with the :editor option' do
+
+ it 'moves the info request to the new public body' do
+ request = FactoryGirl.create(:info_request)
+ new_body = FactoryGirl.create(:public_body)
+ user = FactoryGirl.create(:user)
+ request.move_to_public_body(new_body, :editor => user)
+ request.reload
+ expect(request.public_body).to eq(new_body)
+ end
+
+ it 'logs the move' do
+ request = FactoryGirl.create(:info_request)
+ old_body = request.public_body
+ new_body = FactoryGirl.create(:public_body)
+ user = FactoryGirl.create(:user)
+ request.move_to_public_body(new_body, :editor => user)
+ request.reload
+ event = request.info_request_events.last
+
+ expect(event.event_type).to eq('move_request')
+ expect(event.params[:editor]).to eq(user)
+ expect(event.params[:public_body_url_name]).to eq(new_body.url_name)
+ expect(event.params[:old_public_body_url_name]).to eq(old_body.url_name)
+ end
+
+ it 'updates the law_used to the new body law' do
+ request = FactoryGirl.create(:info_request)
+ new_body = FactoryGirl.create(:public_body, :tag_string => 'eir_only')
+ user = FactoryGirl.create(:user)
+ request.move_to_public_body(new_body, :editor => user)
+ request.reload
+ expect(request.law_used).to eq('eir')
+ end
+
+ it 'returns the new public body' do
+ request = FactoryGirl.create(:info_request)
+ new_body = FactoryGirl.create(:public_body)
+ user = FactoryGirl.create(:user)
+ expect(request.move_to_public_body(new_body, :editor => user)).to eq(new_body)
+ end
+
+ it 'retains the existing body if the new body does not exist' do
+ request = FactoryGirl.create(:info_request)
+ user = FactoryGirl.create(:user)
+ existing_body = request.public_body
+ request.move_to_public_body(nil, :editor => user)
+ request.reload
+ expect(request.public_body).to eq(existing_body)
+ end
+
+ it 'returns nil if the body cannot be updated' do
+ request = FactoryGirl.create(:info_request)
+ user = FactoryGirl.create(:user)
+ expect(request.move_to_public_body(nil, :editor => user)).to eq(nil)
+ end
+
+ it 'reindexes the info request' do
+ request = FactoryGirl.create(:info_request)
+ new_body = FactoryGirl.create(:public_body)
+ user = FactoryGirl.create(:user)
+ reindex_job = ActsAsXapian::ActsAsXapianJob.
+ where(:model => 'InfoRequestEvent').
+ delete_all
+
+ request.move_to_public_body(new_body, :editor => user)
+ request.reload
+
+ reindex_job = ActsAsXapian::ActsAsXapianJob.
+ where(:model => 'InfoRequestEvent').
+ last
+ expect(reindex_job.model_id).to eq(request.info_request_events.last.id)
+ end
+
+ end
+ end
+
describe 'when validating' do
it 'should accept a summary with ascii characters' do
@@ -42,7 +153,7 @@ describe InfoRequest do
info_request.errors[:title].should be_empty
end
- it 'should not accept a summary with no ascii or unicode characters' do
+ it 'should not accept a summary with no ascii or unicode characters' do
info_request = InfoRequest.new(:title => '55555')
info_request.valid?
info_request.errors[:title].should_not be_empty
@@ -547,17 +658,22 @@ describe InfoRequest do
before do
Time.stub!(:now).and_return(Time.utc(2007, 11, 9, 23, 59))
- @mock_comment_event = mock_model(InfoRequestEvent, :created_at => Time.now - 23.days,
- :event_type => 'comment',
- :response? => false)
- mock_incoming_message = mock_model(IncomingMessage, :all_can_view? => true)
- @mock_response_event = mock_model(InfoRequestEvent, :created_at => Time.now - 22.days,
- :event_type => 'response',
- :response? => true,
- :incoming_message => mock_incoming_message)
- @info_request = InfoRequest.new(:prominence => 'normal',
- :awaiting_description => true,
- :info_request_events => [@mock_response_event, @mock_comment_event])
+ @info_request = FactoryGirl.create(:info_request,
+ :prominence => 'normal',
+ :awaiting_description => true)
+ @comment_event = FactoryGirl.create(:info_request_event,
+ :created_at => Time.now - 23.days,
+ :event_type => 'comment',
+ :info_request => @info_request)
+ @incoming_message = FactoryGirl.create(:incoming_message,
+ :prominence => 'normal',
+ :info_request => @info_request)
+ @response_event = FactoryGirl.create(:info_request_event,
+ :info_request => @info_request,
+ :created_at => Time.now - 22.days,
+ :event_type => 'response',
+ :incoming_message => @incoming_message)
+ @info_request.update_attribute(:awaiting_description, true)
end
it 'should return false if it is the holding pen' do
@@ -571,7 +687,7 @@ describe InfoRequest do
end
it 'should return false if its last response event occurred less than 21 days ago' do
- @mock_response_event.stub!(:created_at).and_return(Time.now - 20.days)
+ @response_event.update_attribute(:created_at, Time.now - 20.days)
@info_request.is_old_unclassified?.should be_false
end
@@ -1314,4 +1430,20 @@ describe InfoRequest do
end
+
+ describe 'when destroying a message' do
+
+ it 'can destroy a request with comments and censor rules' do
+ info_request = FactoryGirl.create(:info_request)
+ censor_rule = FactoryGirl.create(:censor_rule, :info_request => info_request)
+ comment = FactoryGirl.create(:comment, :info_request => info_request)
+ info_request.reload
+ info_request.fully_destroy
+
+ InfoRequest.where(:id => info_request.id).should be_empty
+ CensorRule.where(:id => censor_rule.id).should be_empty
+ Comment.where(:id => comment.id).should be_empty
+ end
+
+ end
end
diff --git a/spec/models/mail_server_log_spec.rb b/spec/models/mail_server_log_spec.rb
index 67709b130..6b38e1270 100644
--- a/spec/models/mail_server_log_spec.rb
+++ b/spec/models/mail_server_log_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: mail_server_logs
diff --git a/spec/models/outgoing_message_spec.rb b/spec/models/outgoing_message_spec.rb
index a3e2d1c68..8d43e2ef1 100644
--- a/spec/models/outgoing_message_spec.rb
+++ b/spec/models/outgoing_message_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: outgoing_messages
@@ -18,6 +19,93 @@
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+describe OutgoingMessage do
+
+ describe :initialize do
+
+ it 'does not censor the #body' do
+ attrs = { :status => 'ready',
+ :message_type => 'initial_request',
+ :body => 'abc',
+ :what_doing => 'normal_sort' }
+
+ message = FactoryGirl.create(:outgoing_message, attrs)
+
+ OutgoingMessage.any_instance.should_not_receive(:body).and_call_original
+ OutgoingMessage.find(message.id)
+ end
+
+ end
+
+ describe :body do
+
+ it 'returns the body attribute' do
+ attrs = { :status => 'ready',
+ :message_type => 'initial_request',
+ :body => 'abc',
+ :what_doing => 'normal_sort' }
+
+ message = FactoryGirl.build(:outgoing_message, attrs)
+ expect(message.body).to eq('abc')
+ end
+
+ it 'strips the body of leading and trailing whitespace' do
+ attrs = { :status => 'ready',
+ :message_type => 'initial_request',
+ :body => ' abc ',
+ :what_doing => 'normal_sort' }
+
+ message = FactoryGirl.build(:outgoing_message, attrs)
+ expect(message.body).to eq('abc')
+ end
+
+ it 'removes excess linebreaks that unnecessarily space it out' do
+ attrs = { :status => 'ready',
+ :message_type => 'initial_request',
+ :body => "ab\n\nc\n\n",
+ :what_doing => 'normal_sort' }
+
+ message = FactoryGirl.build(:outgoing_message, attrs)
+ expect(message.body).to eq("ab\n\nc")
+ end
+
+ it "applies the associated request's censor rules to the text" do
+ attrs = { :status => 'ready',
+ :message_type => 'initial_request',
+ :body => 'This sensitive text contains secret info!',
+ :what_doing => 'normal_sort' }
+ message = FactoryGirl.build(:outgoing_message, attrs)
+
+ rules = [FactoryGirl.build(:censor_rule, :text => 'secret'),
+ FactoryGirl.build(:censor_rule, :text => 'sensitive')]
+ InfoRequest.any_instance.stub(:censor_rules).and_return(rules)
+
+ expected = 'This [REDACTED] text contains [REDACTED] info!'
+ expect(message.body).to eq(expected)
+ end
+
+ it "applies the given censor rules to the text" do
+ attrs = { :status => 'ready',
+ :message_type => 'initial_request',
+ :body => 'This sensitive text contains secret info!',
+ :what_doing => 'normal_sort' }
+ message = FactoryGirl.build(:outgoing_message, attrs)
+
+ request_rules = [FactoryGirl.build(:censor_rule, :text => 'secret'),
+ FactoryGirl.build(:censor_rule, :text => 'sensitive')]
+ InfoRequest.any_instance.stub(:censor_rules).and_return(request_rules)
+
+ censor_rules = [FactoryGirl.build(:censor_rule, :text => 'text'),
+ FactoryGirl.build(:censor_rule, :text => 'contains')]
+
+ expected = 'This sensitive [REDACTED] [REDACTED] secret info!'
+ expect(message.body(:censor_rules => censor_rules)).to eq(expected)
+ end
+
+ end
+
+end
+
describe OutgoingMessage, " when making an outgoing message" do
before do
@@ -26,7 +114,7 @@ describe OutgoingMessage, " when making an outgoing message" do
:status => 'ready',
:message_type => 'initial_request',
:body => 'This request contains a foo@bar.com email address',
- :last_sent_at => Time.now(),
+ :last_sent_at => Time.now,
:what_doing => 'normal_sort'
})
end
@@ -57,6 +145,7 @@ describe OutgoingMessage, " when making an outgoing message" do
info_request = mock_model(InfoRequest, :public_body => public_body,
:url_title => 'a_test_title',
:title => 'A test title',
+ :applicable_censor_rules => [],
:apply_censor_rules_to_text! => nil,
:is_batch_request_template? => false)
outgoing_message = OutgoingMessage.new({
@@ -155,27 +244,6 @@ describe OutgoingMessage, " when making an outgoing message" do
end
end
-
-describe OutgoingMessage, " when censoring data" do
-
- before do
- @om = outgoing_messages(:useless_outgoing_message)
-
- @censor_rule = CensorRule.new()
- @censor_rule.text = "dog"
- @censor_rule.replacement = "cat"
- @censor_rule.last_edit_editor = "unknown"
- @censor_rule.last_edit_comment = "none"
-
- @om.info_request.censor_rules << @censor_rule
- end
-
- it "should apply censor rules to outgoing messages" do
- @om.read_attribute(:body).should match(/fancy dog/)
- @om.body.should match(/fancy cat/)
- end
-end
-
describe OutgoingMessage, "when validating the format of the message body" do
it 'should handle a salutation with a bracket in it' do
diff --git a/spec/models/post_redirect_spec.rb b/spec/models/post_redirect_spec.rb
index 73740e914..7d0dfe395 100644
--- a/spec/models/post_redirect_spec.rb
+++ b/spec/models/post_redirect_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: post_redirects
@@ -65,11 +66,18 @@ describe PostRedirect, " when accessing values" do
end
it "should convert reason parameters into YAML and back successfully" do
- pr = PostRedirect.new
+ pr = PostRedirect.new
example_reason_params = { :foo => 'this is stuff', :bar => 83, :humbug => "yikes!!!" }
pr.reason_params = example_reason_params
pr.reason_params_yaml.should == example_reason_params.to_yaml
pr.reason_params.should == example_reason_params
end
+
+ it "should restore UTF8-heavy params stored under ruby 1.8 as UTF-8" do
+ pr = PostRedirect.new
+ utf8_params = "--- \n:foo: !binary |\n 0KLQvtCz0LDRiCDR\n"
+ pr.reason_params_yaml = utf8_params
+ pr.reason_params[:foo].encoding.to_s.should == 'UTF-8' if pr.reason_params[:foo].respond_to?(:encoding)
+ end
end
diff --git a/spec/models/profile_photo_spec.rb b/spec/models/profile_photo_spec.rb
index e70f474a0..199c87500 100644
--- a/spec/models/profile_photo_spec.rb
+++ b/spec/models/profile_photo_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: profile_photos
diff --git a/spec/models/public_body_category/category_collection_spec.rb b/spec/models/public_body_category/category_collection_spec.rb
index 1fbcbe739..9ee684982 100644
--- a/spec/models/public_body_category/category_collection_spec.rb
+++ b/spec/models/public_body_category/category_collection_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe PublicBodyCategory::CategoryCollection do
@@ -15,7 +16,7 @@ describe PublicBodyCategory::CategoryCollection do
describe 'when asked for headings' do
it 'should return a list of headings' do
- @categories.headings().should == ['Local and regional', 'Miscellaneous']
+ @categories.headings.should == ['Local and regional', 'Miscellaneous']
end
end
@@ -30,7 +31,7 @@ describe PublicBodyCategory::CategoryCollection do
"Miscellaneous", ["other",
"Miscellaneous",
"miscellaneous"]]
- @categories.with_headings().should == expected_categories
+ @categories.with_headings.should == expected_categories
end
end
@@ -38,7 +39,7 @@ describe PublicBodyCategory::CategoryCollection do
describe 'when asked for tags by headings' do
it 'should return a hash of tags keyed by heading' do
- @categories.by_heading().should == {'Local and regional' => ['local_council'],
+ @categories.by_heading.should == {'Local and regional' => ['local_council'],
'Miscellaneous' => ['other']}
end
end
@@ -50,19 +51,19 @@ describe PublicBodyCategory::CategoryCollection do
["local_council", "Local councils", "a local council"],
["other", "Miscellaneous", "miscellaneous"]
]
- @categories.with_description().should == expected_categories
+ @categories.with_description.should == expected_categories
end
end
describe 'when asked for tags' do
it 'should return a list of tags' do
- @categories.tags().should == ["local_council", "other"]
+ @categories.tags.should == ["local_council", "other"]
end
end
describe 'when asked for categories by tag' do
it 'should return a hash of categories keyed by tag' do
- @categories.by_tag().should == {
+ @categories.by_tag.should == {
"local_council" => "Local councils",
"other" => "Miscellaneous"
}
@@ -71,7 +72,7 @@ describe PublicBodyCategory::CategoryCollection do
describe 'when asked for singular_by_tag' do
it 'should return a hash of category descriptions keyed by tag' do
- @categories.singular_by_tag().should == {
+ @categories.singular_by_tag.should == {
"local_council" => "a local council",
"other" => "miscellaneous"
}
diff --git a/spec/models/public_body_category_link_spec.rb b/spec/models/public_body_category_link_spec.rb
index fd5608480..564f4126f 100644
--- a/spec/models/public_body_category_link_spec.rb
+++ b/spec/models/public_body_category_link_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: public_body_category_links
diff --git a/spec/models/public_body_category_spec.rb b/spec/models/public_body_category_spec.rb
index 297bd096a..c6b2a8fde 100644
--- a/spec/models/public_body_category_spec.rb
+++ b/spec/models/public_body_category_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: public_body_categories
diff --git a/spec/models/public_body_change_request_spec.rb b/spec/models/public_body_change_request_spec.rb
index 0c4cea67b..e35ffa692 100644
--- a/spec/models/public_body_change_request_spec.rb
+++ b/spec/models/public_body_change_request_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: public_body_change_requests
@@ -21,7 +22,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe PublicBodyChangeRequest, 'when validating' do
it 'should not be valid without a public body name' do
- change_request = PublicBodyChangeRequest.new()
+ change_request = PublicBodyChangeRequest.new
change_request.valid?.should be_false
change_request.errors[:public_body_name].should == ['Please enter the name of the authority']
end
diff --git a/spec/models/public_body_heading_spec.rb b/spec/models/public_body_heading_spec.rb
index be3e7c7d2..8b46181b6 100644
--- a/spec/models/public_body_heading_spec.rb
+++ b/spec/models/public_body_heading_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: public_body_headings
diff --git a/spec/models/public_body_spec.rb b/spec/models/public_body_spec.rb
index 7b55efda1..3d14127f4 100644
--- a/spec/models/public_body_spec.rb
+++ b/spec/models/public_body_spec.rb
@@ -1,4 +1,4 @@
-# encoding: UTF-8
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: public_bodies
@@ -102,8 +102,44 @@ describe PublicBody do
end
end
end
-end
+ describe :set_api_key do
+
+ it 'generates and sets an API key' do
+ SecureRandom.stub(:base64).and_return('APIKEY')
+ body = PublicBody.new
+ body.set_api_key
+ expect(body.api_key).to eq('APIKEY')
+ end
+
+ it 'does not overwrite an existing API key' do
+ SecureRandom.stub(:base64).and_return('APIKEY')
+ body = PublicBody.new(:api_key => 'EXISTING')
+ body.set_api_key
+ expect(body.api_key).to eq('EXISTING')
+ end
+
+ end
+
+ describe :set_api_key! do
+
+ it 'generates and sets an API key' do
+ SecureRandom.stub(:base64).and_return('APIKEY')
+ body = PublicBody.new
+ body.set_api_key!
+ expect(body.api_key).to eq('APIKEY')
+ end
+
+ it 'overwrites an existing API key' do
+ SecureRandom.stub(:base64).and_return('APIKEY')
+ body = PublicBody.new(:api_key => 'EXISTING')
+ body.set_api_key!
+ expect(body.api_key).to eq('APIKEY')
+ end
+
+ end
+
+end
describe PublicBody, " using tags" do
before do
@@ -282,6 +318,31 @@ describe PublicBody, " when saving" do
pb.first_letter.should == 'Å'
end
+ it 'should save the first letter of a translation' do
+ existing = FactoryGirl.create(:public_body, :first_letter => 'T', :name => 'Test body')
+ I18n.with_locale(:es) { existing.update_attributes :name => 'Prueba body' }
+ PublicBody::Translation.
+ where(:public_body_id => existing.id, :locale => :es).
+ pluck('first_letter').first.should == 'P'
+ end
+
+ it 'should save the first letter of a translation, even when it is the same as the
+ first letter in the default locale' do
+ existing = FactoryGirl.create(:public_body, :first_letter => 'T', :name => 'Test body')
+ I18n.with_locale(:es) { existing.update_attributes :name => existing.name }
+ PublicBody::Translation.
+ where(:public_body_id => existing.id, :locale => :es).
+ pluck('first_letter').first.should == 'T'
+ end
+
+ it 'should create a url_name for a translation' do
+ existing = FactoryGirl.create(:public_body, :first_letter => 'T', :short_name => 'Test body')
+ I18n.with_locale(:es) do
+ existing.update_attributes :short_name => 'Prueba', :name => 'Prueba body'
+ existing.url_name.should == 'prueba'
+ end
+ end
+
it "should not save if the url_name is already taken" do
existing = FactoryGirl.create(:public_body)
pb = PublicBody.new(existing.attributes)
@@ -1237,6 +1298,33 @@ describe PublicBody do
end
+ describe :request_email do
+ context "when the email is set" do
+ subject(:public_body) { FactoryGirl.create(:public_body, :request_email => "request@example.com") }
+
+ it "should return the set email address" do
+ expect(public_body.request_email).to eq("request@example.com")
+ end
+
+ it "should return a different email address when overridden in configuration" do
+ AlaveteliConfiguration.stub!(:override_all_public_body_request_emails).and_return("tester@example.com")
+ expect(public_body.request_email).to eq("tester@example.com")
+ end
+ end
+
+ context "when no email is set" do
+ subject(:public_body) { FactoryGirl.create(:public_body, :request_email => "") }
+
+ it "should return a blank email address" do
+ expect(public_body.request_email).to be_blank
+ end
+
+ it "should still return a blank email address when overridden in configuration" do
+ AlaveteliConfiguration.stub!(:override_all_public_body_request_emails).and_return("tester@example.com")
+ expect(public_body.request_email).to be_blank
+ end
+ end
+ end
end
describe PublicBody::Translation do
diff --git a/spec/models/purge_request_spec.rb b/spec/models/purge_request_spec.rb
index 02b3d685d..642d5d2e2 100644
--- a/spec/models/purge_request_spec.rb
+++ b/spec/models/purge_request_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: purge_requests
@@ -22,23 +23,23 @@ describe PurgeRequest, "purging things" do
req = PurgeRequest.new(:url => "/begone_from_here",
:model => "don't care",
:model_id => "don't care")
- req.save()
- PurgeRequest.all().count.should == 1
- PurgeRequest.purge_all()
- PurgeRequest.all().count.should == 0
+ req.save
+ PurgeRequest.all.count.should == 1
+ PurgeRequest.purge_all
+ PurgeRequest.all.count.should == 0
end
it 'should fail silently for a misconfigured server' do
FakeWeb.register_uri(:get, %r|brokenv|, :body => "BROKEN")
- config = MySociety::Config.load_default()
+ config = MySociety::Config.load_default
config['VARNISH_HOST'] = "brokencache"
req = PurgeRequest.new(:url => "/begone_from_here",
:model => "don't care",
:model_id => "don't care")
- req.save()
- PurgeRequest.all().count.should == 1
- PurgeRequest.purge_all()
- PurgeRequest.all().count.should == 0
+ req.save
+ PurgeRequest.all.count.should == 1
+ PurgeRequest.purge_all
+ PurgeRequest.all.count.should == 0
end
end
diff --git a/spec/models/spam_address_spec.rb b/spec/models/spam_address_spec.rb
index f28440121..670b969b0 100644
--- a/spec/models/spam_address_spec.rb
+++ b/spec/models/spam_address_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: spam_addresses
@@ -15,7 +16,7 @@ describe SpamAddress do
describe :new do
it 'requres an email address' do
- SpamAddress.new().should_not be_valid
+ SpamAddress.new.should_not be_valid
SpamAddress.new(:email => 'spam@example.org').should be_valid
end
diff --git a/spec/models/track_thing_spec.rb b/spec/models/track_thing_spec.rb
index 3edf2d1ad..251a50803 100644
--- a/spec/models/track_thing_spec.rb
+++ b/spec/models/track_thing_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: track_things
diff --git a/spec/models/track_things_sent_email_spec.rb b/spec/models/track_things_sent_email_spec.rb
index 4675d0847..b31a989db 100644
--- a/spec/models/track_things_sent_email_spec.rb
+++ b/spec/models/track_things_sent_email_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: track_things_sent_emails
diff --git a/spec/models/user_info_request_sent_alert_spec.rb b/spec/models/user_info_request_sent_alert_spec.rb
index 69be1092b..6b4efa575 100644
--- a/spec/models/user_info_request_sent_alert_spec.rb
+++ b/spec/models/user_info_request_sent_alert_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: user_info_request_sent_alerts
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 2245a024f..009045bdf 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -1,3 +1,4 @@
+# -*- encoding : utf-8 -*-
# == Schema Information
#
# Table name: users
diff --git a/spec/models/widget_vote_spec.rb b/spec/models/widget_vote_spec.rb
new file mode 100644
index 000000000..1a6d3833c
--- /dev/null
+++ b/spec/models/widget_vote_spec.rb
@@ -0,0 +1,54 @@
+# -*- encoding : utf-8 -*-
+# == Schema Information
+#
+# Table name: widget_votes
+#
+# id :integer not null, primary key
+# cookie :string(255)
+# info_request_id :integer
+# created_at :datetime not null
+# updated_at :datetime not null
+#
+
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+
+describe WidgetVote do
+
+ describe :new do
+
+ it 'requires an info request' do
+ widget_vote = WidgetVote.new
+ widget_vote.should_not be_valid
+ widget_vote.errors[:info_request].should == ["can't be blank"]
+ end
+
+ it 'validates the cookie length' do
+ widget_vote = WidgetVote.new
+ widget_vote.should_not be_valid
+ widget_vote.errors[:cookie].should == ["is the wrong length (should be 20 characters)"]
+ end
+
+ it 'is valid with a cookie and info request' do
+ widget_vote = FactoryGirl.create(:widget_vote)
+ widget_vote.should be_valid
+ end
+
+ it 'enforces uniqueness of cookie per info request' do
+ info_request = FactoryGirl.create(:info_request)
+ widget_vote = info_request.widget_votes.create(:cookie => 'x' * 20)
+ duplicate_vote = info_request.widget_votes.build(:cookie => 'x' * 20)
+ duplicate_vote.should_not be_valid
+ duplicate_vote.errors[:cookie].should == ["has already been taken"]
+ end
+
+ it 'allows the same cookie to be used across info requests' do
+ info_request = FactoryGirl.create(:info_request)
+ second_info_request = FactoryGirl.create(:info_request)
+ widget_vote = info_request.widget_votes.create(:cookie => 'x' * 20)
+ second_request_vote = second_info_request.widget_votes.build(:cookie => 'x' * 20)
+ second_request_vote.should be_valid
+ end
+
+ end
+
+end
diff --git a/spec/models/xapian_spec.rb b/spec/models/xapian_spec.rb
index ca6cd7db7..212a1cc7e 100644
--- a/spec/models/xapian_spec.rb
+++ b/spec/models/xapian_spec.rb
@@ -1,4 +1,4 @@
-# encoding: utf-8
+# -*- encoding : utf-8 -*-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe User, " when indexing users with Xapian" do
@@ -102,7 +102,7 @@ describe PublicBody, " when indexing requests by body they are to" do
end
# if you index via the Xapian TermGenerator, it ignores terms of this length,
- # this checks we're using Document:::add_term() instead
+ # this checks we're using Document:::add_term instead
it "should work with URL names that are longer than 64 characters" do
# change the URL name of the body
body = public_bodies(:geraldine_public_body)