Browse Source

Fixes #3296 - Channel::EmailParser.process_unprocessable_mails doesn't find matching Group because of key insensitive mismatch in email address.

Thorsten Eckel 4 years ago
parent
commit
f851b58062
2 changed files with 58 additions and 1 deletions
  1. 1 1
      app/models/channel/email_parser.rb
  2. 57 0
      spec/models/channel/email_parser_spec.rb

+ 1 - 1
app/models/channel/email_parser.rb

@@ -337,7 +337,7 @@ returns
     end
     return if to.blank?
 
-    email = EmailAddress.find_by(email: to)
+    email = EmailAddress.find_by(email: to.downcase)
     return if email&.channel.blank?
 
     email.channel&.group

+ 57 - 0
spec/models/channel/email_parser_spec.rb

@@ -1357,4 +1357,61 @@ RSpec.describe Channel::EmailParser, type: :model do
       end
     end
   end
+
+  describe '#mail_to_group' do
+
+    context 'when EmailAddress exists' do
+
+      context 'when gives address matches exactly' do
+
+        let(:group) { create(:group) }
+        let(:channel) { create(:email_channel, group: group) }
+        let!(:email_address) { create(:email_address, channel: channel) }
+
+        it 'returns the Channel Group' do
+          expect(described_class.mail_to_group(email_address.email)).to eq(group)
+        end
+      end
+
+      context 'when gives address matches key insensitive' do
+
+        let(:group) { create(:group) }
+        let(:channel) { create(:email_channel, group: group) }
+        let(:address) { 'KeyInsensitive@example.COM' }
+        let!(:email_address) { create(:email_address, email: address, channel: channel) }
+
+        it 'returns the Channel Group' do
+          expect(described_class.mail_to_group(address)).to eq(group)
+        end
+      end
+
+      context 'when no Channel is assigned' do
+
+        let!(:email_address) { create(:email_address, channel: nil) }
+
+        it 'returns nil' do
+          expect(described_class.mail_to_group(email_address.email)).to be_nil
+        end
+      end
+
+      context 'when Channel has no Group assigned' do
+
+        let(:channel) { create(:email_channel, group: nil) }
+        let!(:email_address) { create(:email_address, channel: channel) }
+
+        it 'returns nil' do
+          expect(described_class.mail_to_group(email_address.email)).to be_nil
+        end
+      end
+    end
+
+    context 'when given address is not parse-able' do
+
+      let(:address) { 'this_is_not_a_valid_email_address' }
+
+      it 'returns nil' do
+        expect(described_class.mail_to_group(address)).to be_nil
+      end
+    end
+  end
 end