mirror of
https://github.com/discourse/discourse.git
synced 2025-06-04 11:11:13 +08:00
PERF: Move EmailLog#reply_key
into new post_reply_keys
table.
This commit is contained in:
@ -9,6 +9,7 @@ describe Email::MessageBuilder do
|
||||
let(:builder) { Email::MessageBuilder.new(to_address, subject: subject, body: body) }
|
||||
let(:build_args) { builder.build_args }
|
||||
let(:header_args) { builder.header_args }
|
||||
let(:allow_reply_header) { described_class::ALLOW_REPLY_BY_EMAIL_HEADER }
|
||||
|
||||
it "has the correct to address" do
|
||||
expect(build_args[:to]).to eq(to_address)
|
||||
@ -44,7 +45,6 @@ describe Email::MessageBuilder do
|
||||
|
||||
context "with allow_reply_by_email" do
|
||||
let(:reply_by_email_builder) { Email::MessageBuilder.new(to_address, allow_reply_by_email: true) }
|
||||
let(:reply_key) { reply_by_email_builder.header_args['X-Discourse-Reply-Key'] }
|
||||
|
||||
context "With the SiteSetting enabled" do
|
||||
before do
|
||||
@ -52,18 +52,22 @@ describe Email::MessageBuilder do
|
||||
SiteSetting.stubs(:reply_by_email_address).returns("r+%{reply_key}@reply.myforum.com")
|
||||
end
|
||||
|
||||
it "has a X-Discourse-Reply-Key" do
|
||||
expect(reply_key).to be_present
|
||||
expect(reply_key.size).to eq(32)
|
||||
end
|
||||
|
||||
it "returns a Reply-To header with the reply key" do
|
||||
expect(reply_by_email_builder.header_args['Reply-To']).to eq("\"#{SiteSetting.title}\" <r+#{reply_key}@reply.myforum.com>")
|
||||
expect(reply_by_email_builder.header_args['Reply-To'])
|
||||
.to eq("\"#{SiteSetting.title}\" <r+%{reply_key}@reply.myforum.com>")
|
||||
|
||||
expect(reply_by_email_builder.header_args[allow_reply_header])
|
||||
.to eq(true)
|
||||
end
|
||||
|
||||
it "cleans up the site title" do
|
||||
SiteSetting.stubs(:title).returns(">>>Obnoxious Title: Deal, \"With\" It<<<")
|
||||
expect(reply_by_email_builder.header_args['Reply-To']).to eq("\"Obnoxious Title Deal With It\" <r+#{reply_key}@reply.myforum.com>")
|
||||
|
||||
expect(reply_by_email_builder.header_args['Reply-To'])
|
||||
.to eq("\"Obnoxious Title Deal With It\" <r+%{reply_key}@reply.myforum.com>")
|
||||
|
||||
expect(reply_by_email_builder.header_args[allow_reply_header])
|
||||
.to eq(true)
|
||||
end
|
||||
end
|
||||
|
||||
@ -72,33 +76,39 @@ describe Email::MessageBuilder do
|
||||
SiteSetting.stubs(:reply_by_email_enabled?).returns(false)
|
||||
end
|
||||
|
||||
it "has no X-Discourse-Reply-Key" do
|
||||
expect(reply_key).to be_blank
|
||||
end
|
||||
|
||||
it "returns a Reply-To header that's the same as From" do
|
||||
expect(header_args['Reply-To']).to eq(build_args[:from])
|
||||
expect(reply_by_email_builder.header_args['Reply-To'])
|
||||
.to eq(reply_by_email_builder.build_args[:from])
|
||||
|
||||
expect(reply_by_email_builder.header_args[allow_reply_header])
|
||||
.to eq(nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "with allow_reply_by_email" do
|
||||
let(:reply_by_email_builder) { Email::MessageBuilder.new(to_address, allow_reply_by_email: true, private_reply: true, from_alias: "Username") }
|
||||
let(:reply_key) { reply_by_email_builder.header_args['X-Discourse-Reply-Key'] }
|
||||
let(:reply_by_email_builder) do
|
||||
Email::MessageBuilder.new(to_address,
|
||||
allow_reply_by_email: true,
|
||||
private_reply: true,
|
||||
from_alias: "Username"
|
||||
)
|
||||
end
|
||||
|
||||
context "With the SiteSetting enabled" do
|
||||
before do
|
||||
SiteSetting.stubs(:reply_by_email_enabled?).returns(true)
|
||||
SiteSetting.stubs(:reply_by_email_address).returns("r+%{reply_key}@reply.myforum.com")
|
||||
end
|
||||
|
||||
it "has a X-Discourse-Reply-Key" do
|
||||
expect(reply_key).to be_present
|
||||
expect(reply_key.size).to eq(32)
|
||||
SiteSetting.stubs(:reply_by_email_address)
|
||||
.returns("r+%{reply_key}@reply.myforum.com")
|
||||
end
|
||||
|
||||
it "returns a Reply-To header with the reply key" do
|
||||
expect(reply_by_email_builder.header_args['Reply-To']).to eq("\"Username\" <r+#{reply_key}@reply.myforum.com>")
|
||||
expect(reply_by_email_builder.header_args['Reply-To'])
|
||||
.to eq("\"Username\" <r+%{reply_key}@reply.myforum.com>")
|
||||
|
||||
expect(reply_by_email_builder.header_args[allow_reply_header])
|
||||
.to eq(true)
|
||||
end
|
||||
end
|
||||
|
||||
@ -107,12 +117,12 @@ describe Email::MessageBuilder do
|
||||
SiteSetting.stubs(:reply_by_email_enabled?).returns(false)
|
||||
end
|
||||
|
||||
it "has no X-Discourse-Reply-Key" do
|
||||
expect(reply_key).to be_blank
|
||||
end
|
||||
|
||||
it "returns a Reply-To header that's the same as From" do
|
||||
expect(header_args['Reply-To']).to eq(build_args[:from])
|
||||
expect(reply_by_email_builder.header_args['Reply-To'])
|
||||
.to eq(reply_by_email_builder.build_args[:from])
|
||||
|
||||
expect(reply_by_email_builder.header_args[allow_reply_header])
|
||||
.to eq(nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -63,12 +63,12 @@ describe Email::Receiver do
|
||||
|
||||
it "doesn't raise an InactiveUserError when the sender is staged" do
|
||||
user = Fabricate(:user, email: "staged@bar.com", active: false, staged: true)
|
||||
post = Fabricate(:post)
|
||||
|
||||
email_log = Fabricate(:email_log,
|
||||
to_address: 'reply+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@bar.com',
|
||||
reply_key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
post_reply_key = Fabricate(:post_reply_key,
|
||||
user: user,
|
||||
post: Fabricate(:post)
|
||||
post: post,
|
||||
reply_key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
)
|
||||
|
||||
expect { process(:staged_sender) }.not_to raise_error
|
||||
@ -153,7 +153,14 @@ describe Email::Receiver do
|
||||
let(:user) { Fabricate(:user, email: "discourse@bar.com") }
|
||||
let(:topic) { create_topic(category: category, user: user) }
|
||||
let(:post) { create_post(topic: topic, user: user) }
|
||||
let!(:email_log) { Fabricate(:email_log, reply_key: reply_key, user: user, topic: topic, post: post) }
|
||||
|
||||
let!(:post_reply_key) do
|
||||
Fabricate(:post_reply_key,
|
||||
reply_key: reply_key,
|
||||
user: user,
|
||||
post: post
|
||||
)
|
||||
end
|
||||
|
||||
it "uses MD5 of 'mail_string' there is no message_id" do
|
||||
mail_string = email(:missing_message_id)
|
||||
@ -814,12 +821,15 @@ describe Email::Receiver do
|
||||
|
||||
context "with a valid reply" do
|
||||
it "returns the destination when the key is valid" do
|
||||
Fabricate(:email_log, reply_key: '4f97315cc828096c9cb34c6f1a0d6fe8')
|
||||
post_reply_key = Fabricate(:post_reply_key,
|
||||
reply_key: '4f97315cc828096c9cb34c6f1a0d6fe8'
|
||||
)
|
||||
|
||||
dest = Email::Receiver.check_address('foo+4f97315cc828096c9cb34c6f1a0d6fe8@bar.com')
|
||||
|
||||
expect(dest).to be_present
|
||||
expect(dest[:type]).to eq(:reply)
|
||||
expect(dest[:obj]).to be_present
|
||||
expect(dest[:obj]).to eq(post_reply_key)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -925,7 +935,10 @@ describe Email::Receiver do
|
||||
let(:user) { Fabricate(:user, email: "discourse@bar.com") }
|
||||
let(:topic) { create_topic(category: category, user: user) }
|
||||
let(:post) { create_post(topic: topic, user: user) }
|
||||
let!(:email_log) { Fabricate(:email_log, reply_key: reply_key, user: user, topic: topic, post: post) }
|
||||
|
||||
let!(:post_reply_key) do
|
||||
Fabricate(:post_reply_key, reply_key: reply_key, user: user, post: post)
|
||||
end
|
||||
|
||||
context "when the email address isn't matching the one we sent the notification to" do
|
||||
include_examples "no staged users", :reply_user_not_matching, Email::Receiver::ReplyUserNotMatchingError
|
||||
|
@ -2,6 +2,7 @@ require 'rails_helper'
|
||||
require 'email/sender'
|
||||
|
||||
describe Email::Sender do
|
||||
let(:post) { Fabricate(:post) }
|
||||
|
||||
context "disable_emails is enabled" do
|
||||
let(:user) { Fabricate(:user) }
|
||||
@ -292,19 +293,19 @@ describe Email::Sender do
|
||||
let(:email_log) { EmailLog.last }
|
||||
|
||||
it 'should create the right log' do
|
||||
email_sender.send
|
||||
expect do
|
||||
email_sender.send
|
||||
end.to_not change { PostReplyKey.count }
|
||||
|
||||
expect(email_log).to be_present
|
||||
expect(email_log.email_type).to eq('valid_type')
|
||||
expect(email_log.to_address).to eq('eviltrout@test.domain')
|
||||
expect(email_log.reply_key).to be_blank
|
||||
expect(email_log.user_id).to be_blank
|
||||
end
|
||||
end
|
||||
|
||||
context "email log with a post id and topic id" do
|
||||
let(:topic) { Fabricate(:topic) }
|
||||
let(:post) { Fabricate(:post, topic: topic) }
|
||||
let(:topic) { post.topic }
|
||||
|
||||
before do
|
||||
message.header['X-Discourse-Post-Id'] = post.id
|
||||
@ -320,19 +321,6 @@ describe Email::Sender do
|
||||
end
|
||||
end
|
||||
|
||||
context "email log with a reply key" do
|
||||
before do
|
||||
message.header['X-Discourse-Reply-Key'] = reply_key
|
||||
end
|
||||
|
||||
let(:email_log) { EmailLog.last }
|
||||
|
||||
it 'should create the right log' do
|
||||
email_sender.send
|
||||
expect(email_log.reply_key).to eq(reply_key)
|
||||
end
|
||||
end
|
||||
|
||||
context 'email parts' do
|
||||
it 'should contain the right message' do
|
||||
email_sender.send
|
||||
@ -364,6 +352,42 @@ describe Email::Sender do
|
||||
expect(@email_log.user_id).to eq(user.id)
|
||||
end
|
||||
|
||||
describe "post reply keys" do
|
||||
let(:post) { Fabricate(:post) }
|
||||
|
||||
before do
|
||||
message.header['X-Discourse-Post-Id'] = post.id
|
||||
message.header['Reply-To'] = "test-%{reply_key}@test.com"
|
||||
end
|
||||
|
||||
describe 'when allow reply by email header is not present' do
|
||||
it 'should not create a post reply key' do
|
||||
expect { email_sender.send }.to_not change { PostReplyKey.count }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'when allow reply by email header is present' do
|
||||
let(:header) { Email::MessageBuilder::ALLOW_REPLY_BY_EMAIL_HEADER }
|
||||
|
||||
before do
|
||||
message.header[header] = "test-%{reply_key}@test.com"
|
||||
end
|
||||
|
||||
it 'should create a post reply key' do
|
||||
expect { email_sender.send }.to change { PostReplyKey.count }.by(1)
|
||||
post_reply_key = PostReplyKey.last
|
||||
|
||||
expect(message.header['Reply-To'].value).to eq(
|
||||
"test-#{post_reply_key.reply_key}@test.com"
|
||||
)
|
||||
|
||||
expect(message.header[header]).to eq(nil)
|
||||
expect(post_reply_key.user_id).to eq(user.id)
|
||||
expect(post_reply_key.post_id).to eq(post.id)
|
||||
expect { email_sender.send }.to change { PostReplyKey.count }.by(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
Reference in New Issue
Block a user