dmails: don't default IP addr to 127.0.0.1 in database (fixes #2908).

Bug introduced in 1400f64; that commit changed dmails so that
creator_ip_addr defaulted to CurrentUser.ip_addr like this:

    after_initialize :initialize_attributes, if: :new_record?

    def initialize_attributes
      self.from_id ||= CurrentUser.id
      self.creator_ip_addr ||= CurrentUser.ip_addr
    end

...but creator_ip_addr already defaulted to 127.0.0.1 from the database,
so the ||= assignment didn't work. Remove the database default so we
always default to CurrentUser.ip_addr.
This commit is contained in:
evazion
2017-03-01 19:51:48 -06:00
parent 5676978096
commit 02122343c3
3 changed files with 18 additions and 2 deletions

View File

@@ -0,0 +1,9 @@
class RemoveDefaultIpAddrFromDmails < ActiveRecord::Migration
def up
change_column_default(:dmails, :creator_ip_addr, nil)
end
def down
change_column_default(:dmails, :creator_ip_addr, "127.0.0.1")
end
end

View File

@@ -1007,7 +1007,7 @@ CREATE TABLE dmails (
is_deleted boolean DEFAULT false NOT NULL,
created_at timestamp without time zone,
updated_at timestamp without time zone,
creator_ip_addr inet DEFAULT '127.0.0.1'::inet NOT NULL
creator_ip_addr inet NOT NULL
);
@@ -7466,3 +7466,5 @@ INSERT INTO schema_migrations (version) VALUES ('20170117233040');
INSERT INTO schema_migrations (version) VALUES ('20170218104710');
INSERT INTO schema_migrations (version) VALUES ('20170302014435');

View File

@@ -6,7 +6,7 @@ class DmailTest < ActiveSupport::TestCase
MEMCACHE.flush_all
@user = FactoryGirl.create(:user)
CurrentUser.user = @user
CurrentUser.ip_addr = "127.0.0.1"
CurrentUser.ip_addr = "1.2.3.4"
ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.deliveries = []
@@ -112,6 +112,11 @@ class DmailTest < ActiveSupport::TestCase
end
end
should "record the creator's ip addr" do
dmail = FactoryGirl.create(:dmail, owner: @user)
assert_equal(CurrentUser.ip_addr, dmail.creator_ip_addr.to_s)
end
should "send an email if the user wants it" do
user = FactoryGirl.create(:user, :receive_email_notifications => true)
assert_difference("ActionMailer::Base.deliveries.size", 1) do