aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/censor_rule_spec.rb17
-rw-r--r--spec/models/foi_attachment_spec.rb15
-rw-r--r--spec/models/holiday_spec.rb9
-rw-r--r--spec/models/incoming_message_spec.rb134
-rw-r--r--spec/models/info_request_event_spec.rb75
-rw-r--r--spec/models/info_request_spec.rb144
-rw-r--r--spec/models/mail_server_log_spec.rb13
-rw-r--r--spec/models/outgoing_message_spec.rb93
-rw-r--r--spec/models/post_redirect_spec.rb16
-rw-r--r--spec/models/profile_photo_spec.rb10
-rw-r--r--spec/models/public_body_spec.rb23
-rw-r--r--spec/models/purge_request_spec.rb11
-rw-r--r--spec/models/raw_email_spec.rb7
-rw-r--r--spec/models/track_thing_spec.rb16
-rw-r--r--spec/models/track_things_sent_email_spec.rb13
-rw-r--r--spec/models/user_info_request_sent_alert_spec.rb11
-rw-r--r--spec/models/user_spec.rb26
17 files changed, 622 insertions, 11 deletions
diff --git a/spec/models/censor_rule_spec.rb b/spec/models/censor_rule_spec.rb
index 3782cc630..5b41cc0d4 100644
--- a/spec/models/censor_rule_spec.rb
+++ b/spec/models/censor_rule_spec.rb
@@ -1,3 +1,20 @@
+# == Schema Information
+#
+# Table name: censor_rules
+#
+# id :integer not null, primary key
+# info_request_id :integer
+# user_id :integer
+# public_body_id :integer
+# text :text not null
+# replacement :text not null
+# last_edit_editor :string(255) not null
+# last_edit_comment :text not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# regexp :boolean
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe CensorRule, "substituting things" do
diff --git a/spec/models/foi_attachment_spec.rb b/spec/models/foi_attachment_spec.rb
index 9b0115c44..882723d1e 100644
--- a/spec/models/foi_attachment_spec.rb
+++ b/spec/models/foi_attachment_spec.rb
@@ -1,3 +1,18 @@
+# == Schema Information
+#
+# Table name: foi_attachments
+#
+# id :integer not null, primary key
+# content_type :text
+# filename :text
+# charset :text
+# display_size :text
+# url_part_number :integer
+# within_rfc822_subject :text
+# incoming_message_id :integer
+# hexdigest :string(32)
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe FoiAttachment do
diff --git a/spec/models/holiday_spec.rb b/spec/models/holiday_spec.rb
index 5d3f76d24..89849abb7 100644
--- a/spec/models/holiday_spec.rb
+++ b/spec/models/holiday_spec.rb
@@ -1,3 +1,12 @@
+# == Schema Information
+#
+# Table name: holidays
+#
+# id :integer not null, primary key
+# day :date
+# description :text
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe Holiday, " when calculating due date" do
diff --git a/spec/models/incoming_message_spec.rb b/spec/models/incoming_message_spec.rb
index ff6a8e34e..c0a7e5340 100644
--- a/spec/models/incoming_message_spec.rb
+++ b/spec/models/incoming_message_spec.rb
@@ -1,6 +1,140 @@
# coding: utf-8
+# == Schema Information
+#
+# Table name: incoming_messages
+#
+# id :integer not null, primary key
+# info_request_id :integer not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# raw_email_id :integer not null
+# cached_attachment_text_clipped :text
+# cached_main_body_text_folded :text
+# cached_main_body_text_unfolded :text
+# subject :text
+# mail_from_domain :text
+# valid_to_reply_to :boolean
+# last_parsed :datetime
+# mail_from :text
+# sent_at :datetime
+# prominence :string(255) default("normal"), not null
+# prominence_reason :text
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+describe IncomingMessage, 'when validating' do
+
+ it 'should be valid with valid prominence values' do
+ ['hidden', 'requester_only', 'normal'].each do |prominence|
+ incoming_message = IncomingMessage.new(:raw_email => RawEmail.new,
+ :info_request => InfoRequest.new,
+ :prominence => prominence)
+ incoming_message.valid?.should be_true
+ end
+ end
+
+ it 'should not be valid with an invalid prominence value' do
+ incoming_message = IncomingMessage.new(:raw_email => RawEmail.new,
+ :info_request => InfoRequest.new,
+ :prominence => 'norman')
+ incoming_message.valid?.should be_false
+ end
+
+end
+
+describe IncomingMessage, 'when getting a response event' do
+
+ it 'should return an event with event_type "response"' do
+ incoming_message = IncomingMessage.new
+ ['comment', 'response'].each do |event_type|
+ incoming_message.info_request_events << InfoRequestEvent.new(:event_type => event_type)
+ end
+ incoming_message.response_event.event_type.should == 'response'
+ end
+
+end
+
+describe IncomingMessage, 'when asked if a user can view it' do
+
+ before do
+ @user = mock_model(User)
+ @info_request = mock_model(InfoRequest)
+ @incoming_message = IncomingMessage.new(:info_request => @info_request)
+ end
+
+ context 'if the prominence is hidden' do
+
+ before do
+ @incoming_message.prominence = 'hidden'
+ end
+
+ it 'should return true if the user can view hidden things' do
+ User.stub!(:view_hidden?).with(@user).and_return(true)
+ @incoming_message.user_can_view?(@user).should be_true
+ end
+
+ it 'should return false if the user cannot view hidden things' do
+ User.stub!(:view_hidden?).with(@user).and_return(false)
+ @incoming_message.user_can_view?(@user).should be_false
+ end
+
+ end
+
+ context 'if the prominence is requester_only' do
+
+ before do
+ @incoming_message.prominence = 'requester_only'
+ end
+
+ it 'should return true if the user owns the associated request' do
+ @info_request.stub!(:is_owning_user?).with(@user).and_return(true)
+ @incoming_message.user_can_view?(@user).should be_true
+ end
+
+ it 'should return false if the user does not own the associated request' do
+ @info_request.stub!(:is_owning_user?).with(@user).and_return(false)
+ @incoming_message.user_can_view?(@user).should be_false
+ end
+ end
+
+ context 'if the prominence is normal' do
+
+ before do
+ @incoming_message.prominence = 'normal'
+ end
+
+ it 'should return true' do
+ @incoming_message.user_can_view?(@user).should be_true
+ end
+
+ end
+
+end
+
+describe 'when asked if it is indexed by search' do
+
+ before do
+ @incoming_message = IncomingMessage.new
+ end
+
+ it 'should return false if it has prominence "hidden"' do
+ @incoming_message.prominence = 'hidden'
+ @incoming_message.indexed_by_search?.should be_false
+ end
+
+ it 'should return false if it has prominence "requester_only"' do
+ @incoming_message.prominence = 'requester_only'
+ @incoming_message.indexed_by_search?.should be_false
+ end
+
+ it 'should return true if it has prominence "normal"' do
+ @incoming_message.prominence = 'normal'
+ @incoming_message.indexed_by_search?.should be_true
+ end
+
+end
+
describe IncomingMessage, " when dealing with incoming mail" do
before(:each) do
diff --git a/spec/models/info_request_event_spec.rb b/spec/models/info_request_event_spec.rb
index eb0de8c86..53c83bd46 100644
--- a/spec/models/info_request_event_spec.rb
+++ b/spec/models/info_request_event_spec.rb
@@ -1,4 +1,21 @@
# coding: utf-8
+# == Schema Information
+#
+# Table name: info_request_events
+#
+# id :integer not null, primary key
+# info_request_id :integer not null
+# event_type :text not null
+# params_yaml :text not null
+# created_at :datetime not null
+# described_state :string(255)
+# calculated_state :string(255)
+# last_described_at :datetime
+# incoming_message_id :integer
+# outgoing_message_id :integer
+# comment_id :integer
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe InfoRequestEvent do
@@ -15,6 +32,64 @@ describe InfoRequestEvent do
end
+ describe 'when deciding if it is indexed by search' do
+
+ before do
+ @comment = mock_model(Comment)
+ @incoming_message = mock_model(IncomingMessage)
+ @outgoing_message = mock_model(OutgoingMessage)
+ @info_request = mock_model(InfoRequest, :indexed_by_search? => true)
+ end
+
+ it 'should return false for a comment that is not visible' do
+ @comment.stub!(:visible).and_return(false)
+ @info_request_event = InfoRequestEvent.new(:event_type => 'comment',
+ :comment => @comment,
+ :info_request => @info_request)
+ @info_request_event.indexed_by_search?.should be_false
+ end
+
+ it 'should return true for a comment that is visible' do
+ @comment.stub!(:visible).and_return(true)
+ @info_request_event = InfoRequestEvent.new(:event_type => 'comment',
+ :comment => @comment,
+ :info_request => @info_request)
+ @info_request_event.indexed_by_search?.should be_true
+ end
+
+ it 'should return false for an incoming message that is not indexed by search' do
+ @incoming_message.stub!(:indexed_by_search?).and_return false
+ @info_request_event = InfoRequestEvent.new(:event_type => 'response',
+ :incoming_message => @incoming_message,
+ :info_request => @info_request)
+ @info_request_event.indexed_by_search?.should be_false
+ end
+
+ it 'should return true for an incoming message that is indexed by search' do
+ @incoming_message.stub!(:indexed_by_search?).and_return true
+ @info_request_event = InfoRequestEvent.new(:event_type => 'response',
+ :incoming_message => @incoming_message,
+ :info_request => @info_request)
+ @info_request_event.indexed_by_search?.should be_true
+ end
+
+ it 'should return false for an outgoing message that is not indexed by search' do
+ @outgoing_message.stub!(:indexed_by_search?).and_return false
+ @info_request_event = InfoRequestEvent.new(:event_type => 'followup_sent',
+ :outgoing_message => @outgoing_message,
+ :info_request => @info_request)
+ @info_request_event.indexed_by_search?.should be_false
+ end
+
+ it 'should return true for an outgoing message that is indexed by search' do
+ @outgoing_message.stub!(:indexed_by_search?).and_return true
+ @info_request_event = InfoRequestEvent.new(:event_type => 'followup_sent',
+ :outgoing_message => @outgoing_message,
+ :info_request => @info_request)
+ @info_request_event.indexed_by_search?.should be_true
+ end
+ end
+
describe 'after saving' do
it 'should mark the model for reindexing in xapian if there is no no_xapian_reindex flag on the object' do
diff --git a/spec/models/info_request_spec.rb b/spec/models/info_request_spec.rb
index 6d026e286..fac89109c 100644
--- a/spec/models/info_request_spec.rb
+++ b/spec/models/info_request_spec.rb
@@ -1,4 +1,28 @@
# encoding: utf-8
+# == Schema Information
+#
+# Table name: info_requests
+#
+# id :integer not null, primary key
+# title :text not null
+# user_id :integer
+# public_body_id :integer not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# described_state :string(255) not null
+# awaiting_description :boolean default(FALSE), not null
+# prominence :string(255) default("normal"), not null
+# url_title :text not null
+# law_used :string(255) default("foi"), not null
+# allow_new_responses_from :string(255) default("anybody"), not null
+# handle_rejected_responses :string(255) default("bounce"), not null
+# idhash :string(255) not null
+# external_user_name :string(255)
+# external_url :string(255)
+# attention_requested :boolean default(FALSE)
+# comments_allowed :boolean default(TRUE), not null
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe InfoRequest do
@@ -398,10 +422,12 @@ describe InfoRequest do
it 'should add extra conditions if supplied' do
expected_conditions = ["awaiting_description = ?
- AND (SELECT created_at
- FROM info_request_events
+ AND (SELECT info_request_events.created_at
+ FROM info_request_events, incoming_messages
WHERE info_request_events.info_request_id = info_requests.id
AND info_request_events.event_type = 'response'
+ AND incoming_messages.id = info_request_events.incoming_message_id
+ AND incoming_messages.prominence = 'normal'
ORDER BY created_at desc LIMIT 1) < ?
AND url_title != 'holding_pen'
AND user_id IS NOT NULL
@@ -416,21 +442,25 @@ describe InfoRequest do
InfoRequest.find_old_unclassified({:conditions => ["prominence != 'backpage'"]})
end
- it 'should ask the database for requests that are awaiting description, have a last response older
+ it 'should ask the database for requests that are awaiting description, have a last public response older
than 21 days old, have a user, are not the holding pen and are not backpaged' do
expected_conditions = ["awaiting_description = ?
- AND (SELECT created_at
- FROM info_request_events
+ AND (SELECT info_request_events.created_at
+ FROM info_request_events, incoming_messages
WHERE info_request_events.info_request_id = info_requests.id
AND info_request_events.event_type = 'response'
+ AND incoming_messages.id = info_request_events.incoming_message_id
+ AND incoming_messages.prominence = 'normal'
ORDER BY created_at desc LIMIT 1) < ?
AND url_title != 'holding_pen'
AND user_id IS NOT NULL".split(' ').join(' '),
true, Time.now - 21.days]
- expected_select = "*, (SELECT created_at
- FROM info_request_events
+ expected_select = "*, (SELECT info_request_events.created_at
+ FROM info_request_events, incoming_messages
WHERE info_request_events.info_request_id = info_requests.id
AND info_request_events.event_type = 'response'
+ AND incoming_messages.id = info_request_events.incoming_message_id
+ AND incoming_messages.prominence = 'normal'
ORDER BY created_at desc LIMIT 1)
AS last_response_time".split(' ').join(' ')
InfoRequest.should_receive(:find) do |all, query_params|
@@ -449,8 +479,14 @@ 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_response_event = mock_model(InfoRequestEvent, :created_at => Time.now - 22.days, :event_type => 'response', :response? => true)
+ @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])
@@ -587,6 +623,96 @@ describe InfoRequest do
end
end
+ describe 'when asked for the last public response event' do
+
+ before do
+ @info_request = FactoryGirl.create(:info_request_with_incoming)
+ @incoming_message = @info_request.incoming_messages.first
+ end
+
+ it 'should not return an event with a hidden prominence message' do
+ @incoming_message.prominence = 'hidden'
+ @incoming_message.save!
+ @info_request.get_last_public_response_event.should == nil
+ end
+
+ it 'should not return an event with a requester_only prominence message' do
+ @incoming_message.prominence = 'requester_only'
+ @incoming_message.save!
+ @info_request.get_last_public_response_event.should == nil
+ end
+
+ it 'should return an event with a normal prominence message' do
+ @incoming_message.prominence = 'normal'
+ @incoming_message.save!
+ @info_request.get_last_public_response_event.should == @incoming_message.response_event
+ end
+ end
+
+ describe 'when asked for the last public outgoing event' do
+
+ before do
+ @info_request = FactoryGirl.create(:info_request)
+ @outgoing_message = @info_request.outgoing_messages.first
+ end
+
+ it 'should not return an event with a hidden prominence message' do
+ @outgoing_message.prominence = 'hidden'
+ @outgoing_message.save!
+ @info_request.get_last_public_outgoing_event.should == nil
+ end
+
+ it 'should not return an event with a requester_only prominence message' do
+ @outgoing_message.prominence = 'requester_only'
+ @outgoing_message.save!
+ @info_request.get_last_public_outgoing_event.should == nil
+ end
+
+ it 'should return an event with a normal prominence message' do
+ @outgoing_message.prominence = 'normal'
+ @outgoing_message.save!
+ @info_request.get_last_public_outgoing_event.should == @outgoing_message.info_request_events.first
+ end
+
+ end
+
+ describe 'when asked who can be sent a followup' do
+
+ before do
+ @info_request = FactoryGirl.create(:info_request_with_plain_incoming)
+ @incoming_message = @info_request.incoming_messages.first
+ @public_body = @info_request.public_body
+ end
+
+ it 'should not include details from a hidden prominence response' do
+ @incoming_message.prominence = 'hidden'
+ @incoming_message.save!
+ @info_request.who_can_followup_to.should == [[@public_body.name,
+ @public_body.request_email,
+ nil]]
+ end
+
+ it 'should not include details from a requester_only prominence response' do
+ @incoming_message.prominence = 'requester_only'
+ @incoming_message.save!
+ @info_request.who_can_followup_to.should == [[@public_body.name,
+ @public_body.request_email,
+ nil]]
+ end
+
+ it 'should include details from a normal prominence response' do
+ @incoming_message.prominence = 'normal'
+ @incoming_message.save!
+ @info_request.who_can_followup_to.should == [[@public_body.name,
+ @public_body.request_email,
+ nil],
+ ['Bob Responder',
+ "bob@example.com",
+ @incoming_message.id]]
+ end
+
+ end
+
describe 'when generating json for the api' do
before do
diff --git a/spec/models/mail_server_log_spec.rb b/spec/models/mail_server_log_spec.rb
index 2b44a4559..67709b130 100644
--- a/spec/models/mail_server_log_spec.rb
+++ b/spec/models/mail_server_log_spec.rb
@@ -1,3 +1,16 @@
+# == Schema Information
+#
+# Table name: mail_server_logs
+#
+# id :integer not null, primary key
+# mail_server_log_done_id :integer
+# info_request_id :integer
+# order :integer not null
+# line :text not null
+# created_at :datetime not null
+# updated_at :datetime not null
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe MailServerLog do
diff --git a/spec/models/outgoing_message_spec.rb b/spec/models/outgoing_message_spec.rb
index 60164fb31..1e05e09f1 100644
--- a/spec/models/outgoing_message_spec.rb
+++ b/spec/models/outgoing_message_spec.rb
@@ -1,3 +1,19 @@
+# == Schema Information
+#
+# Table name: outgoing_messages
+#
+# id :integer not null, primary key
+# info_request_id :integer not null
+# body :text not null
+# status :string(255) not null
+# message_type :string(255) not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# last_sent_at :datetime
+# incoming_message_followup_id :integer
+# what_doing :string(255) not null
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe OutgoingMessage, " when making an outgoing message" do
@@ -50,6 +66,81 @@ describe OutgoingMessage, " when making an outgoing message" do
outgoing_message.body.should include(expected_text)
end
+ describe 'when asked if a user can view it' do
+
+ before do
+ @info_request = FactoryGirl.create(:info_request)
+ @outgoing_message = @info_request.outgoing_messages.first
+ end
+
+ context 'if the prominence is hidden' do
+
+ before do
+ @outgoing_message.prominence = 'hidden'
+ end
+
+ it 'should return true for an admin user' do
+ @outgoing_message.user_can_view?(FactoryGirl.create(:admin_user)).should be_true
+ end
+
+ it 'should return false for a non-admin user' do
+ @outgoing_message.user_can_view?(FactoryGirl.create(:user)).should be_false
+ end
+
+ end
+
+ context 'if the prominence is requester_only' do
+
+ before do
+ @outgoing_message.prominence = 'requester_only'
+ end
+
+ it 'should return true if the user owns the associated request' do
+ @outgoing_message.user_can_view?(@info_request.user).should be_true
+ end
+
+ it 'should return false if the user does not own the associated request' do
+ @outgoing_message.user_can_view?(FactoryGirl.create(:user)).should be_false
+ end
+ end
+
+ context 'if the prominence is normal' do
+
+ before do
+ @outgoing_message.prominence = 'normal'
+ end
+
+ it 'should return true for a non-admin user' do
+ @outgoing_message.user_can_view?(FactoryGirl.create(:user)).should be_true
+ end
+
+ end
+
+ end
+
+ describe 'when asked if it is indexed by search' do
+
+ before do
+ @info_request = FactoryGirl.create(:info_request)
+ @outgoing_message = @info_request.outgoing_messages.first
+ end
+
+ it 'should return false if it has prominence "hidden"' do
+ @outgoing_message.prominence = 'hidden'
+ @outgoing_message.indexed_by_search?.should be_false
+ end
+
+ it 'should return false if it has prominence "requester_only"' do
+ @outgoing_message.prominence = 'requester_only'
+ @outgoing_message.indexed_by_search?.should be_false
+ end
+
+ it 'should return true if it has prominence "normal"' do
+ @outgoing_message.prominence = 'normal'
+ @outgoing_message.indexed_by_search?.should be_true
+ end
+
+ end
end
@@ -72,5 +163,3 @@ describe IncomingMessage, " when censoring data" do
@om.body.should match(/fancy cat/)
end
end
-
-
diff --git a/spec/models/post_redirect_spec.rb b/spec/models/post_redirect_spec.rb
index 5f51b6de5..73740e914 100644
--- a/spec/models/post_redirect_spec.rb
+++ b/spec/models/post_redirect_spec.rb
@@ -1,3 +1,19 @@
+# == Schema Information
+#
+# Table name: post_redirects
+#
+# id :integer not null, primary key
+# token :text not null
+# uri :text not null
+# post_params_yaml :text
+# created_at :datetime not null
+# updated_at :datetime not null
+# email_token :text not null
+# reason_params_yaml :text
+# user_id :integer
+# circumstance :text default("normal"), not null
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe PostRedirect, " when constructing" do
diff --git a/spec/models/profile_photo_spec.rb b/spec/models/profile_photo_spec.rb
index 892cccd08..0e157e2c5 100644
--- a/spec/models/profile_photo_spec.rb
+++ b/spec/models/profile_photo_spec.rb
@@ -1,3 +1,13 @@
+# == Schema Information
+#
+# Table name: profile_photos
+#
+# id :integer not null, primary key
+# data :binary not null
+# user_id :integer
+# draft :boolean default(FALSE), not null
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe ProfilePhoto, "when constructing a new photo" do
diff --git a/spec/models/public_body_spec.rb b/spec/models/public_body_spec.rb
index 3578c0e9c..582f1430e 100644
--- a/spec/models/public_body_spec.rb
+++ b/spec/models/public_body_spec.rb
@@ -1,4 +1,27 @@
# encoding: UTF-8
+# == Schema Information
+#
+# Table name: public_bodies
+#
+# id :integer not null, primary key
+# name :text not null
+# short_name :text not null
+# request_email :text not null
+# version :integer not null
+# last_edit_editor :string(255) not null
+# last_edit_comment :text not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# url_name :text not null
+# home_page :text default(""), not null
+# notes :text default(""), not null
+# first_letter :string(255) not null
+# publication_scheme :text default(""), not null
+# api_key :string(255) not null
+# info_requests_count :integer default(0), not null
+# disclosure_log :text default(""), not null
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe PublicBody, " using tags" do
diff --git a/spec/models/purge_request_spec.rb b/spec/models/purge_request_spec.rb
index 7b67fca52..02b3d685d 100644
--- a/spec/models/purge_request_spec.rb
+++ b/spec/models/purge_request_spec.rb
@@ -1,3 +1,14 @@
+# == Schema Information
+#
+# Table name: purge_requests
+#
+# id :integer not null, primary key
+# url :string(255)
+# created_at :datetime not null
+# model :string(255) not null
+# model_id :integer not null
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'fakeweb'
diff --git a/spec/models/raw_email_spec.rb b/spec/models/raw_email_spec.rb
index ff2830a62..f86b35e99 100644
--- a/spec/models/raw_email_spec.rb
+++ b/spec/models/raw_email_spec.rb
@@ -1,3 +1,10 @@
+# == Schema Information
+#
+# Table name: raw_emails
+#
+# id :integer not null, primary key
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe User, "manipulating a raw email" do
diff --git a/spec/models/track_thing_spec.rb b/spec/models/track_thing_spec.rb
index c42eb5e8b..86d3c0cda 100644
--- a/spec/models/track_thing_spec.rb
+++ b/spec/models/track_thing_spec.rb
@@ -1,3 +1,19 @@
+# == Schema Information
+#
+# Table name: track_things
+#
+# id :integer not null, primary key
+# tracking_user_id :integer not null
+# track_query :string(255) not null
+# info_request_id :integer
+# tracked_user_id :integer
+# public_body_id :integer
+# track_medium :string(255) not null
+# track_type :string(255) default("internal_error"), not null
+# created_at :datetime
+# updated_at :datetime
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe TrackThing, "when tracking changes" do
diff --git a/spec/models/track_things_sent_email_spec.rb b/spec/models/track_things_sent_email_spec.rb
index 6166f42ab..4675d0847 100644
--- a/spec/models/track_things_sent_email_spec.rb
+++ b/spec/models/track_things_sent_email_spec.rb
@@ -1,3 +1,16 @@
+# == Schema Information
+#
+# Table name: track_things_sent_emails
+#
+# id :integer not null, primary key
+# track_thing_id :integer not null
+# info_request_event_id :integer
+# user_id :integer
+# public_body_id :integer
+# created_at :datetime
+# updated_at :datetime
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe TrackThingsSentEmail, "when tracking things sent email" do
diff --git a/spec/models/user_info_request_sent_alert_spec.rb b/spec/models/user_info_request_sent_alert_spec.rb
index 971c5b8c1..69be1092b 100644
--- a/spec/models/user_info_request_sent_alert_spec.rb
+++ b/spec/models/user_info_request_sent_alert_spec.rb
@@ -1,3 +1,14 @@
+# == Schema Information
+#
+# Table name: user_info_request_sent_alerts
+#
+# id :integer not null, primary key
+# user_id :integer not null
+# info_request_id :integer not null
+# alert_type :string(255) not null
+# info_request_event_id :integer
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe UserInfoRequestSentAlert, " when blah" do
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 96c169604..f380f6f13 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -1,3 +1,29 @@
+# == Schema Information
+#
+# Table name: users
+#
+# id :integer not null, primary key
+# email :string(255) not null
+# name :string(255) not null
+# hashed_password :string(255) not null
+# salt :string(255) not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# email_confirmed :boolean default(FALSE), not null
+# url_name :text not null
+# last_daily_track_email :datetime default(2000-01-01 00:00:00 UTC)
+# admin_level :string(255) default("none"), not null
+# ban_text :text default(""), not null
+# about_me :text default(""), not null
+# locale :string(255)
+# email_bounced_at :datetime
+# email_bounce_message :text default(""), not null
+# no_limit :boolean default(FALSE), not null
+# receive_email_alerts :boolean default(TRUE), not null
+# address :string(255)
+# dob :date
+#
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe User, "making up the URL name" do