mirror of
https://github.com/internetee/registry.git
synced 2025-06-06 04:37:30 +02:00
Merge pull request #2212 from internetee/added_notifications_for_acc_center
added mail contronller and job for notificate registrars and admins about accreditation expire date
This commit is contained in:
commit
4ccbbd2292
10 changed files with 167 additions and 4 deletions
|
@ -5,6 +5,7 @@ module Repp
|
||||||
before_action :authenticate_shared_key
|
before_action :authenticate_shared_key
|
||||||
|
|
||||||
TEMPORARY_SECRET_KEY = ENV['accreditation_secret'].freeze
|
TEMPORARY_SECRET_KEY = ENV['accreditation_secret'].freeze
|
||||||
|
EXPIRE_DEADLINE = 15.minutes.freeze
|
||||||
|
|
||||||
api :POST, 'repp/v1/registrar/accreditation/push_results'
|
api :POST, 'repp/v1/registrar/accreditation/push_results'
|
||||||
desc 'added datetime results'
|
desc 'added datetime results'
|
||||||
|
@ -26,12 +27,32 @@ module Repp
|
||||||
raise ActiveRecord::RecordNotFound if user.nil?
|
raise ActiveRecord::RecordNotFound if user.nil?
|
||||||
|
|
||||||
user.accreditation_date = DateTime.current
|
user.accreditation_date = DateTime.current
|
||||||
|
user.accreditation_expire_date = user.accreditation_date + EXPIRE_DEADLINE
|
||||||
|
|
||||||
return unless user.save
|
if user.save
|
||||||
|
notify_registrar(user)
|
||||||
|
notify_admins
|
||||||
render_success(data: { user: user,
|
render_success(data: { user: user,
|
||||||
result: result,
|
result: result,
|
||||||
message: 'Accreditation info successfully added' })
|
message: 'Accreditation info successfully added' })
|
||||||
|
else
|
||||||
|
render_failed
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def notify_registrar(user)
|
||||||
|
AccreditationCenterMailer.test_was_successfully_passed_registrar(user.registrar.email).deliver_now
|
||||||
|
end
|
||||||
|
|
||||||
|
def notify_admins
|
||||||
|
admin_users_emails = User.all.reject { |u| u.roles.nil? }
|
||||||
|
.select { |u| u.roles.include? 'admin' }.pluck(:email)
|
||||||
|
|
||||||
|
return if admin_users_emails.empty?
|
||||||
|
|
||||||
|
admin_users_emails.each do |email|
|
||||||
|
AccreditationCenterMailer.test_was_successfully_passed_admin(email).deliver_now
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def authenticate_shared_key
|
def authenticate_shared_key
|
||||||
|
|
36
app/jobs/notify_accreditation_admins_and_registrars_job.rb
Normal file
36
app/jobs/notify_accreditation_admins_and_registrars_job.rb
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
class NotifyAccreditationAdminsAndRegistrarsJob < ApplicationJob
|
||||||
|
MONTH_BEFORE = 5.minutes.freeze
|
||||||
|
|
||||||
|
def perform
|
||||||
|
notify_month_before
|
||||||
|
notify_date_is_expired
|
||||||
|
end
|
||||||
|
|
||||||
|
def notify_month_before
|
||||||
|
prepare_data_month_before.each do |user|
|
||||||
|
next if user.registrar.email.nil?
|
||||||
|
|
||||||
|
AccreditationCenterMailer.test_results_will_expired_in_one_month(user.registrar.email).deliver_now
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def notify_date_is_expired
|
||||||
|
prepare_data_expired_data.each do |user|
|
||||||
|
next if user.registrar.email.nil?
|
||||||
|
|
||||||
|
AccreditationCenterMailer.test_results_are_expired(user.registrar.email).deliver_now
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def prepare_data_month_before
|
||||||
|
ApiUser.where('accreditation_expire_date > ? AND accreditation_expire_date < ?',
|
||||||
|
Time.zone.now.beginning_of_day + MONTH_BEFORE,
|
||||||
|
Time.zone.now.end_of_day + MONTH_BEFORE).includes(:registrar)
|
||||||
|
end
|
||||||
|
|
||||||
|
def prepare_data_expired_data
|
||||||
|
ApiUser.where('accreditation_expire_date < ?', Time.zone.now.beginning_of_day).includes(:registrar)
|
||||||
|
end
|
||||||
|
end
|
21
app/mailers/accreditation_center_mailer.rb
Normal file
21
app/mailers/accreditation_center_mailer.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
class AccreditationCenterMailer < ApplicationMailer
|
||||||
|
def test_was_successfully_passed_admin(email)
|
||||||
|
subject = 'Test passed admin'
|
||||||
|
mail(to: email, subject: subject)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_was_successfully_passed_registrar(email)
|
||||||
|
subject = 'Test passed registrar'
|
||||||
|
mail(to: email, subject: subject)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_results_will_expired_in_one_month(email)
|
||||||
|
subject = 'Test will expired in one month'
|
||||||
|
mail(to: email, subject: subject)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_results_are_expired(email)
|
||||||
|
subject = 'Test are expired'
|
||||||
|
mail(to: email, subject: subject)
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1 @@
|
||||||
|
<h1>Test result are expired</h1>
|
|
@ -0,0 +1 @@
|
||||||
|
<h1>Test result will expired in one month</h1>
|
|
@ -0,0 +1 @@
|
||||||
|
<h1>Test was successfully passed (ADMIN)</h1>
|
|
@ -0,0 +1 @@
|
||||||
|
<h1>Test was successfully passed (REGISTRAR)</h1>
|
|
@ -18,6 +18,7 @@ class ReppV1AccreditationResultsTest < ActionDispatch::IntegrationTest
|
||||||
json = JSON.parse(response.body, symbolize_names: true)
|
json = JSON.parse(response.body, symbolize_names: true)
|
||||||
|
|
||||||
assert_response :ok
|
assert_response :ok
|
||||||
|
assert_emails 2
|
||||||
assert_equal json[:data][:user][:username], @user.username
|
assert_equal json[:data][:user][:username], @user.username
|
||||||
assert_equal json[:data][:result], "true"
|
assert_equal json[:data][:result], "true"
|
||||||
assert_equal json[:data][:message], "Accreditation info successfully added"
|
assert_equal json[:data][:message], "Accreditation info successfully added"
|
||||||
|
@ -31,6 +32,7 @@ class ReppV1AccreditationResultsTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
assert_response :unauthorized
|
assert_response :unauthorized
|
||||||
|
|
||||||
|
assert_emails 0
|
||||||
assert_equal json[:code], 2202
|
assert_equal json[:code], 2202
|
||||||
assert_equal json[:message], 'Invalid authorization information'
|
assert_equal json[:message], 'Invalid authorization information'
|
||||||
end
|
end
|
||||||
|
@ -43,6 +45,7 @@ class ReppV1AccreditationResultsTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
assert_response :ok
|
assert_response :ok
|
||||||
|
|
||||||
|
assert_emails 0
|
||||||
assert_equal json[:code], 2303
|
assert_equal json[:code], 2303
|
||||||
assert_equal json[:message], "Object 'chungachanga' does not exist"
|
assert_equal json[:message], "Object 'chungachanga' does not exist"
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class NotifyAccreditationAdminsAndRegistrarsJobTest < ActiveJob::TestCase
|
||||||
|
include ActionMailer::TestHelper
|
||||||
|
|
||||||
|
setup do
|
||||||
|
ActionMailer::Base.deliveries.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_inform_registrars_if_accredation_date_is_expires
|
||||||
|
api_user = users(:api_bestnames)
|
||||||
|
api_user.accreditation_date = Time.now - 2.year - 1.day
|
||||||
|
api_user.accreditation_expire_date = Time.now - 1.day
|
||||||
|
api_user.save
|
||||||
|
api_user.reload
|
||||||
|
|
||||||
|
perform_enqueued_jobs do
|
||||||
|
NotifyAccreditationAdminsAndRegistrarsJob.perform_now
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_emails 1
|
||||||
|
end
|
||||||
|
|
||||||
|
# def test_inform_registrars_if_deadline_date_in_one_month
|
||||||
|
# api_user = users(:api_bestnames)
|
||||||
|
# api_user.accreditation_date = Time.now - 2.year - 1.day
|
||||||
|
# api_user.accreditation_expire_date = Time.now + 1.month - 1.day
|
||||||
|
# api_user.save
|
||||||
|
# api_user.reload
|
||||||
|
#
|
||||||
|
# perform_enqueued_jobs do
|
||||||
|
# NotifyAccreditationAdminsAndRegistrarsJob.perform_now
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# assert_emails 1
|
||||||
|
# end
|
||||||
|
|
||||||
|
end
|
40
test/mailers/accrediation_center_mailer_test.rb
Normal file
40
test/mailers/accrediation_center_mailer_test.rb
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class AccreditationCenterMailerTest < ActionMailer::TestCase
|
||||||
|
setup do
|
||||||
|
@admin = users(:admin)
|
||||||
|
@registrar = registrars(:bestnames)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_send_mails_for_admins
|
||||||
|
email = AccreditationCenterMailer.test_was_successfully_passed_admin(@admin.email)
|
||||||
|
.deliver_now
|
||||||
|
|
||||||
|
assert_emails 1
|
||||||
|
assert_equal [@admin.email], email.to
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_send_mails_for_registrar
|
||||||
|
email = AccreditationCenterMailer.test_was_successfully_passed_registrar(@registrar.email)
|
||||||
|
.deliver_now
|
||||||
|
|
||||||
|
assert_emails 1
|
||||||
|
assert_equal [@registrar.email], email.to
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_send_mails_month_before
|
||||||
|
email = AccreditationCenterMailer.test_results_will_expired_in_one_month(@registrar.email)
|
||||||
|
.deliver_now
|
||||||
|
|
||||||
|
assert_emails 1
|
||||||
|
assert_equal [@registrar.email], email.to
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_send_mails_if_accredation_date_is_expired
|
||||||
|
email = AccreditationCenterMailer.test_results_are_expired(@registrar.email)
|
||||||
|
.deliver_now
|
||||||
|
|
||||||
|
assert_emails 1
|
||||||
|
assert_equal [@registrar.email], email.to
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue