Migrate from notifications to conversations without sending emails

This commit is contained in:
Brenda Wallace
2019-08-11 14:17:30 +12:00
parent 0d370603b7
commit 4f74b20565
3 changed files with 7 additions and 55 deletions

View File

@@ -24,35 +24,4 @@ class Notification < ApplicationRecord
def send_message
sender.send_message(recipient, body, subject)
end
def migrate_to_mailboxer!
conversation = Mailboxer::ConversationBuilder.new(
subject: subject,
created_at: created_at,
updated_at: updated_at
).build
message = Mailboxer::MessageBuilder.new(
sender: sender,
conversation: conversation,
recipients: [recipient],
body: body,
subject: subject,
# attachment: attachment,
created_at: created_at,
updated_at: updated_at
).build
notification = Mailboxer::NotificationBuilder.new(
recipients: [recipient],
subject: subject,
body: body,
sender: sender
).build
conversation.save!
message.save!
notification.save!
notification.deliver(false, false)
end
end

View File

@@ -1,9 +1,13 @@
class NotificationsToMailboxer < ActiveRecord::Migration[5.2]
def up
Notification.find_in_batches do |group|
Mailboxer.setup do |config|
# turn off emails
config.uses_emails = false
end
Notification.find_in_batches.each do |group|
group.each do |n|
next unless n.valid?
n.migrate_to_mailboxer!
n.body = 'message has no body' if n.body.blank?
n.send_message
end
end
end

View File

@@ -3,27 +3,6 @@ require 'rails_helper'
describe Notification do
let(:notification) { FactoryBot.create(:notification) }
describe 'migration to mailboxer' do
let(:body) do
"Hellos
how are you today?
I am fine
-- me
"
end
let(:sender) { FactoryBot.create :member }
let(:recipient) { FactoryBot.create :member }
let(:notification) do
FactoryBot.create :notification,
subject: 'hello', body: body,
sender: sender,
recipient: recipient
end
before { notification.migrate_to_mailboxer! }
it { expect(recipient.mailbox.inbox.count).to eq 1 }
it { expect(recipient.mailbox.inbox.first.subject).to eq 'hello' }
end
it "belongs to a post" do
expect(notification.post).to be_an_instance_of Post
end