From d15ee5b300c7a33a2a5f7a9d077ecad215acf883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Lecour?= Date: Tue, 20 Aug 2019 08:46:20 +0200 Subject: [PATCH] notifications tests use reliable test dates --- test/mailers/notifications_mailer_test.rb | 152 +++++++++++----------- 1 file changed, 74 insertions(+), 78 deletions(-) diff --git a/test/mailers/notifications_mailer_test.rb b/test/mailers/notifications_mailer_test.rb index 29543bf..8209ae7 100644 --- a/test/mailers/notifications_mailer_test.rb +++ b/test/mailers/notifications_mailer_test.rb @@ -5,64 +5,62 @@ require "test_helper" class NotificationsMailerTest < ActionMailer::TestCase # rubocop:disable Metrics/ClassLength test "domain_expires_soon" do - check = create(:check, domain_expires_at: Time.new(2018, 6, 10, 12, 0, 5, "+02:00")) + expiration_date = 8.days.from_now.utc + check = create(:check, domain_expires_at: expiration_date) notification = build(:notification, interval: 10, recipient: "colin@example.org") check_notification = build(:check_notification, check: check, notification: notification) - Date.stub :today, Date.new(2018, 6, 2) do - mail = NotificationsMailer.with(check_notification: check_notification).domain_expires_soon + mail = NotificationsMailer.with(check_notification: check_notification).domain_expires_soon - assert_emails 1 do - mail.deliver_now - end + assert_emails 1 do + mail.deliver_now + end - assert_match "domain.fr", mail.subject - assert_match "in 8 days", mail.subject - assert_equal ["colin@example.org"], mail.to - assert_equal [Rails.configuration.chexpire.fetch("mailer_default_from")], mail.from + assert_match "domain.fr", mail.subject + assert_match "in 8 days", mail.subject + assert_equal ["colin@example.org"], mail.to + assert_equal [Rails.configuration.chexpire.fetch("mailer_default_from")], mail.from - parts = [mail.text_part.decode_body, mail.html_part.decode_body] + parts = [mail.text_part.decode_body, mail.html_part.decode_body] - parts.each do |part| - assert_match "domain.fr", part - assert_match "Sun, 10 Jun 2018 10:00:05 +0000", part - assert_match "10 days", part - assert_match "/checks/#{check.id}/edit", part - assert_no_match "comment", part - assert_no_match "vendor", part - end + parts.each do |part| + assert_match "domain.fr", part + assert_match I18n.l(expiration_date, locale: :en), part + assert_match "10 days", part + assert_match "/checks/#{check.id}/edit", part + assert_no_match "comment", part + assert_no_match "vendor", part end end test "domain_expires_soon FR" do + expiration_date = 8.days.from_now.utc check = create(:check, - domain_expires_at: Time.new(2018, 6, 10, 12, 0, 5, "+02:00"), + domain_expires_at: expiration_date, user: build(:user, :fr)) notification = build(:notification, interval: 10, recipient: "colin@example.org") check_notification = build(:check_notification, check: check, notification: notification) - Date.stub :today, Date.new(2018, 6, 2) do - mail = NotificationsMailer.with(check_notification: check_notification).domain_expires_soon + mail = NotificationsMailer.with(check_notification: check_notification).domain_expires_soon - assert_emails 1 do - mail.deliver_now - end + assert_emails 1 do + mail.deliver_now + end - assert_match "domain.fr", mail.subject - assert_match "dans 8 jours", mail.subject - assert_equal ["colin@example.org"], mail.to - assert_equal [Rails.configuration.chexpire.fetch("mailer_default_from")], mail.from + assert_match "domain.fr", mail.subject + assert_match "dans 8 jours", mail.subject + assert_equal ["colin@example.org"], mail.to + assert_equal [Rails.configuration.chexpire.fetch("mailer_default_from")], mail.from - parts = [mail.text_part.decode_body, mail.html_part.decode_body] + parts = [mail.text_part.decode_body, mail.html_part.decode_body] - parts.each do |part| - assert_match "domain.fr", part - assert_match "dim 10 juin 2018 10:00:05 +0000", part - assert_match "10 jours", part - assert_match "/checks/#{check.id}/edit", part - assert_no_match "commentaire", part - assert_no_match "fournisseur", part - end + parts.each do |part| + assert_match "domain.fr", part + assert_match I18n.l(expiration_date, locale: :fr), part + assert_match "10 jours", part + assert_match "/checks/#{check.id}/edit", part + assert_no_match "commentaire", part + assert_no_match "fournisseur", part end end @@ -159,66 +157,64 @@ class NotificationsMailerTest < ActionMailer::TestCase # rubocop:disable Metrics end test "ssl_expires_soon" do - check = create(:check, :ssl, domain_expires_at: Time.new(2018, 6, 10, 12, 0, 5, "+02:00")) + expiration_date = 8.days.from_now.utc + check = create(:check, :ssl, domain_expires_at: 8.days.from_now) notification = build(:notification, interval: 10, recipient: "colin@example.org") check_notification = build(:check_notification, check: check, notification: notification) - Date.stub :today, Date.new(2018, 6, 2) do - mail = NotificationsMailer.with(check_notification: check_notification).ssl_expires_soon + mail = NotificationsMailer.with(check_notification: check_notification).ssl_expires_soon - assert_emails 1 do - mail.deliver_now - end + assert_emails 1 do + mail.deliver_now + end - assert_match "domain.fr", mail.subject - assert_match "SSL", mail.subject - assert_match "in 8 days", mail.subject - assert_equal ["colin@example.org"], mail.to - assert_equal [Rails.configuration.chexpire.fetch("mailer_default_from")], mail.from + assert_match "domain.fr", mail.subject + assert_match "SSL", mail.subject + assert_match "in 8 days", mail.subject + assert_equal ["colin@example.org"], mail.to + assert_equal [Rails.configuration.chexpire.fetch("mailer_default_from")], mail.from - parts = [mail.text_part.decode_body, mail.html_part.decode_body] + parts = [mail.text_part.decode_body, mail.html_part.decode_body] - parts.each do |part| - assert_match "domain.fr", part - assert_match "Sun, 10 Jun 2018 10:00:05 +0000", part - assert_match "10 days", part - assert_match "/checks/#{check.id}/edit", part - assert_no_match "comment", part - assert_no_match "vendor", part - end + parts.each do |part| + assert_match "domain.fr", part + assert_match I18n.l(expiration_date, locale: :en), part + assert_match "10 days", part + assert_match "/checks/#{check.id}/edit", part + assert_no_match "comment", part + assert_no_match "vendor", part end end test "ssl_expires_soon - FR" do + expiration_date = 8.days.from_now.utc check = create(:check, :ssl, - domain_expires_at: Time.new(2018, 6, 10, 12, 0, 5, "+02:00"), + domain_expires_at: expiration_date, user: build(:user, :fr)) notification = build(:notification, interval: 10, recipient: "colin@example.org") check_notification = build(:check_notification, check: check, notification: notification) - Date.stub :today, Date.new(2018, 6, 2) do - mail = NotificationsMailer.with(check_notification: check_notification).ssl_expires_soon + mail = NotificationsMailer.with(check_notification: check_notification).ssl_expires_soon - assert_emails 1 do - mail.deliver_now - end + assert_emails 1 do + mail.deliver_now + end - assert_match "domain.fr", mail.subject - assert_match "SSL", mail.subject - assert_match "dans 8 jours", mail.subject - assert_equal ["colin@example.org"], mail.to - assert_equal [Rails.configuration.chexpire.fetch("mailer_default_from")], mail.from + assert_match "domain.fr", mail.subject + assert_match "SSL", mail.subject + assert_match "dans 8 jours", mail.subject + assert_equal ["colin@example.org"], mail.to + assert_equal [Rails.configuration.chexpire.fetch("mailer_default_from")], mail.from - parts = [mail.text_part.decode_body, mail.html_part.decode_body] + parts = [mail.text_part.decode_body, mail.html_part.decode_body] - parts.each do |part| - assert_match "domain.fr", part - assert_match "dim 10 juin 2018 10:00:05 +0000", part - assert_match "10 jours", part - assert_match "/checks/#{check.id}/edit", part - assert_no_match "commentaire", part - assert_no_match "fournisseur", part - end + parts.each do |part| + assert_match "domain.fr", part + assert_match I18n.l(expiration_date, locale: :fr), part + assert_match "10 jours", part + assert_match "/checks/#{check.id}/edit", part + assert_no_match "commentaire", part + assert_no_match "fournisseur", part end end end