diff --git a/app/mailers/previews/notify_preview.rb b/app/mailers/previews/notify_preview.rb index be8d96012cc54cf53b395070952f5cef3f74863d..c5e60ecaaddbc376f98e2be910faa04d51824e3b 100644 --- a/app/mailers/previews/notify_preview.rb +++ b/app/mailers/previews/notify_preview.rb @@ -61,7 +61,7 @@ def note_merge_request_email_for_diff_discussion end def new_mention_in_merge_request_email - Notify.new_mention_in_merge_request_email(user.id, issue.id, user.id).message + Notify.new_mention_in_merge_request_email(user.id, merge_request.id, user.id).message end def closed_issue_email @@ -97,7 +97,7 @@ def new_merge_request_email end def closed_merge_request_email - Notify.closed_merge_request_email(user.id, issue.id, user.id).message + Notify.closed_merge_request_email(user.id, merge_request.id, user.id).message end def merge_request_status_email @@ -205,14 +205,6 @@ def inactive_project_deletion_warning Notify.inactive_project_deletion_warning_email(project, user, '2022-04-22').message end - def user_auto_banned_instance_email - ::Notify.user_auto_banned_email(user.id, user.id, max_project_downloads: 5, within_seconds: 600).message - end - - def user_auto_banned_namespace_email - ::Notify.user_auto_banned_email(user.id, user.id, max_project_downloads: 5, within_seconds: 600, group: group).message - end - def verification_instructions_email Notify.verification_instructions_email(user.id, token: '123456', expires_in: 60).message end @@ -220,7 +212,7 @@ def verification_instructions_email private def project - @project ||= Project.find_by_full_path('gitlab-org/gitlab-test') + @project ||= Project.first end def issue diff --git a/config/environments/development.rb b/config/environments/development.rb index d475a2a664228f61168ddfdb403a745307488d29..2412b09df5e67597e2a666bab66bd976ebb66b0e 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -61,7 +61,7 @@ config.action_mailer.raise_delivery_errors = true # Don't make a mess when bootstrapping a development environment config.action_mailer.perform_deliveries = (ENV['BOOTSTRAP'] != '1') - config.action_mailer.preview_path = "#{Rails.root}{/ee,}/app/mailers/previews" + config.action_mailer.preview_path = GitlabEdition.path_glob('app/mailers/previews') config.eager_load = false diff --git a/config/environments/test.rb b/config/environments/test.rb index f4d3d2ddfdaf130aea4a86cad338c7e3763f5273..41413c55ba45fd3983b3ca1ff2621b173adf3456 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -48,6 +48,8 @@ # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test + config.action_mailer.preview_path = GitlabEdition.path_glob('app/mailers/previews') + # Print deprecation notices to the stderr config.active_support.deprecation = :stderr diff --git a/ee/app/mailers/ee/preview/notify_preview.rb b/ee/app/mailers/ee/preview/notify_preview.rb index a24a6fad955bb2a76364a70ac1d9fb5ea1b4dce7..50c03110b47b9020c4f99c90874885dd2e4be66d 100644 --- a/ee/app/mailers/ee/preview/notify_preview.rb +++ b/ee/app/mailers/ee/preview/notify_preview.rb @@ -67,6 +67,14 @@ def merge_commits_csv_email 'filename.csv' ).message end + + def user_auto_banned_instance_email + ::Notify.user_auto_banned_email(user.id, user.id, max_project_downloads: 5, within_seconds: 600).message + end + + def user_auto_banned_namespace_email + ::Notify.user_auto_banned_email(user.id, user.id, max_project_downloads: 5, within_seconds: 600, group: group).message + end end private diff --git a/lib/gitlab_edition.rb b/lib/gitlab_edition.rb index 02006148a3494f7dce9c0749754645967678ded0..5e3ed35ace4d13433c2665ba85e9c6c04fa0eb96 100644 --- a/lib/gitlab_edition.rb +++ b/lib/gitlab_edition.rb @@ -7,6 +7,21 @@ def self.root Pathname.new(File.expand_path('..', __dir__)) end + def self.path_glob(path) + "#{root}/#{extension_path_prefixes}#{path}" + end + + def self.extension_path_prefixes + path_prefixes = extensions + return '' if path_prefixes.empty? + + path_prefixes.map! { "#{_1}/" } + path_prefixes.unshift '' + + # For example `{,ee/,jh/}` + "{#{path_prefixes.join(',')}}" + end + def self.extensions if jh? %w[ee jh] diff --git a/spec/lib/gitlab_edition_spec.rb b/spec/lib/gitlab_edition_spec.rb index 0ee63279984d438f34c074bdc00bccb49799225c..46be1471896d189dd85cc5cb8a7a76dd0fd00378 100644 --- a/spec/lib/gitlab_edition_spec.rb +++ b/spec/lib/gitlab_edition_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'fast_spec_helper' +require 'rspec-parameterized' RSpec.describe GitlabEdition do def remove_instance_variable(ivar) @@ -27,7 +28,57 @@ def remove_instance_variable(ivar) end end - describe 'extensions' do + describe '.path_glob' do + using RSpec::Parameterized::TableSyntax + + let(:root) { described_class.root.to_s } + + subject { described_class.path_glob(path) } + + before do + allow(described_class).to receive(:jh?).and_return(jh) + allow(described_class).to receive(:ee?).and_return(ee) + end + + where(:ee, :jh, :path, :expected) do + false | false | nil | '' + true | false | nil | '{,ee/}' + true | true | nil | '{,ee/,jh/}' + false | true | nil | '{,ee/,jh/}' + false | false | 'app/models' | 'app/models' + true | false | 'app/models' | '{,ee/}app/models' + true | true | 'app/models' | '{,ee/,jh/}app/models' + false | true | 'app/models' | '{,ee/,jh/}app/models' + end + + with_them do + it { is_expected.to eq("#{root}/#{expected}") } + end + end + + describe '.extension_path_prefixes' do + using RSpec::Parameterized::TableSyntax + + subject { described_class.extension_path_prefixes } + + before do + allow(described_class).to receive(:jh?).and_return(jh) + allow(described_class).to receive(:ee?).and_return(ee) + end + + where(:ee, :jh, :expected) do + false | false | '' + true | false | '{,ee/}' + true | true | '{,ee/,jh/}' + false | true | '{,ee/,jh/}' + end + + with_them do + it { is_expected.to eq(expected) } + end + end + + describe '.extensions' do context 'when .jh? is true' do before do allow(described_class).to receive(:jh?).and_return(true) diff --git a/spec/mailers/previews_spec.rb b/spec/mailers/previews_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..14bd56e5d40f24637eb082f41c3b8d47ab8560cd --- /dev/null +++ b/spec/mailers/previews_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Mailer previews' do + # Setup needed for email previews + let_it_be(:group) { create(:group) } + let_it_be(:project) { create(:project, :repository, :import_failed, group: group, import_last_error: 'some error') } + let_it_be(:user) { create(:user) } + let_it_be(:pipeline) { create(:ci_pipeline, project: project) } + let_it_be(:merge_request) { create(:merge_request, source_project: project) } + let_it_be(:milestone) { create(:milestone, project: project) } + let_it_be(:issue) { create(:issue, project: project, milestone: milestone) } + let_it_be(:remote_mirror) { create(:remote_mirror, project: project) } + let_it_be(:member) { create(:project_member, :maintainer, project: project, created_by: user) } + + Gitlab.ee do + let_it_be(:epic) { create(:epic, group: group) } + end + + let(:expected_kind) { [Mail::Message, ActionMailer::MessageDelivery] } + + let(:pending_failures) do + { + 'NotifyPreview#note_merge_request_email_for_diff_discussion' => + 'https://gitlab.com/gitlab-org/gitlab/-/issues/372885' + } + end + + subject { preview.call(email) } + + where(:preview, :email) do + ActionMailer::Preview.all.flat_map { |preview| preview.emails.map { |email| [preview, email] } } + end + + with_them do + it do + issue_link = pending_failures["#{preview.name}##{email}"] + pending "See #{issue_link}" if issue_link + + is_expected.to be_kind_of(Mail::Message).or(be_kind_of(ActionMailer::MessageDelivery)) + end + end +end diff --git a/tests.yml b/tests.yml index d38b05af991258418c388739bf639fe19c6bbf2e..c530ec304163896a79108e89d4272a58bf4ca631 100644 --- a/tests.yml +++ b/tests.yml @@ -69,3 +69,9 @@ mapping: - source: lib/gitlab/usage_data_counters/known_events/.+\.yml test: spec/lib/gitlab/usage_data_spec.rb + # Mailer previews + - source: (ee/)?app/mailers/previews/.+\.rb + test: spec/mailers/previews_spec.rb + - source: ee/app/mailers/ee/preview/.+\.rb + test: spec/mailers/previews_spec.rb +