amelioration(dolist_api): forward le message_id afin de faciliter les investigations
This commit is contained in:
parent
709a9e82a2
commit
2de9026c13
5 changed files with 27 additions and 3 deletions
|
@ -10,6 +10,7 @@
|
||||||
# to :string not null
|
# to :string not null
|
||||||
# created_at :datetime not null
|
# created_at :datetime not null
|
||||||
# updated_at :datetime not null
|
# updated_at :datetime not null
|
||||||
|
# message_id :string
|
||||||
#
|
#
|
||||||
class EmailEvent < ApplicationRecord
|
class EmailEvent < ApplicationRecord
|
||||||
enum status: {
|
enum status: {
|
||||||
|
@ -30,6 +31,7 @@ class EmailEvent < ApplicationRecord
|
||||||
subject: message.subject || "",
|
subject: message.subject || "",
|
||||||
processed_at: message.date,
|
processed_at: message.date,
|
||||||
method: ActionMailer::Base.delivery_methods.key(message.delivery_method.class),
|
method: ActionMailer::Base.delivery_methods.key(message.delivery_method.class),
|
||||||
|
message_id: message.message_id,
|
||||||
status:
|
status:
|
||||||
)
|
)
|
||||||
rescue StandardError => error
|
rescue StandardError => error
|
||||||
|
|
|
@ -16,8 +16,9 @@ ActiveSupport.on_load(:action_mailer) do
|
||||||
|
|
||||||
def deliver!(mail)
|
def deliver!(mail)
|
||||||
response = Dolist::API.new.send_email(mail)
|
response = Dolist::API.new.send_email(mail)
|
||||||
if !respons&.dig("Result")
|
|
||||||
Rails.logger.info "Email not sent. Error message: #{mail}"
|
if response&.dig("Result")
|
||||||
|
mail.message_id = response.dig("Result")
|
||||||
else
|
else
|
||||||
Rails.logger.info "Email sent. #{mail}"
|
Rails.logger.info "Email sent. #{mail}"
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddMessageIdToEmailEvent < ActiveRecord::Migration[6.1]
|
||||||
|
def change
|
||||||
|
add_column :email_events, :message_id, :string
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2023_01_31_172119) do
|
ActiveRecord::Schema.define(version: 2023_02_03_134127) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "pgcrypto"
|
enable_extension "pgcrypto"
|
||||||
|
@ -407,6 +407,7 @@ ActiveRecord::Schema.define(version: 2023_01_31_172119) do
|
||||||
|
|
||||||
create_table "email_events", force: :cascade do |t|
|
create_table "email_events", force: :cascade do |t|
|
||||||
t.datetime "created_at", precision: 6, null: false
|
t.datetime "created_at", precision: 6, null: false
|
||||||
|
t.string "message_id"
|
||||||
t.string "method", null: false
|
t.string "method", null: false
|
||||||
t.datetime "processed_at"
|
t.datetime "processed_at"
|
||||||
t.string "status", null: false
|
t.string "status", null: false
|
||||||
|
|
|
@ -26,6 +26,21 @@ RSpec.describe ApplicationMailer, type: :mailer do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'dealing with Dolist API success' do
|
||||||
|
let(:dossier) { create(:dossier, procedure: create(:simple_procedure)) }
|
||||||
|
let(:message_id) { "29d9b692-0374-4084-8434-d9cddbced205" }
|
||||||
|
before do
|
||||||
|
ActionMailer::Base.delivery_method = :dolist_api
|
||||||
|
api_success_response = { "Result" => message_id }
|
||||||
|
allow_any_instance_of(Dolist::API).to receive(:send_email).and_return(api_success_response)
|
||||||
|
end
|
||||||
|
subject { DossierMailer.with(dossier:).notify_new_draft.deliver_now }
|
||||||
|
|
||||||
|
it 'forward message ID to observer and EmailEvent.create_from_message!' do
|
||||||
|
expect { subject }.to change { EmailEvent.dolist_api.dispatched.where(message_id:).count }.to eq(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'EmailDeliveryObserver is invoked' do
|
describe 'EmailDeliveryObserver is invoked' do
|
||||||
let(:user1) { create(:user) }
|
let(:user1) { create(:user) }
|
||||||
let(:user2) { create(:user, email: "your@email.com") }
|
let(:user2) { create(:user, email: "your@email.com") }
|
||||||
|
|
Loading…
Reference in a new issue