From 7af1a79108bdfa024587a8dc48b760a51a98acd5 Mon Sep 17 00:00:00 2001 From: Doug Stull <dstull@gitlab.com> Date: Thu, 5 Oct 2023 21:14:17 +0000 Subject: [PATCH] Move in product emails fully under ee as that is their only use - re-organize some helper code as well --- .rubocop_todo/layout/array_alignment.yml | 3 - .../first_array_element_indentation.yml | 3 - ...e_end_string_concatenation_indentation.yml | 1 - .rubocop_todo/layout/line_length.yml | 14 --- .../lint/ambiguous_operator_precedence.yml | 1 - .rubocop_todo/rails/output_safety.yml | 4 - .../rspec/before_all_role_assignment.yml | 1 - .rubocop_todo/rspec/context_wording.yml | 7 -- .../rspec/factory_bot/avoid_create.yml | 1 - .../rspec/missing_feature_category.yml | 12 --- .rubocop_todo/rspec/return_from_stub.yml | 1 - .rubocop_todo/rspec/scattered_let.yml | 1 - .rubocop_todo/style/format_string.yml | 4 - .rubocop_todo/style/if_unless_modifier.yml | 1 - .rubocop_todo/style/string_concatenation.yml | 1 - app/mailers/notify.rb | 1 - .../mailers/ee/emails/in_product_marketing.rb | 13 --- .../mailers/emails/in_product_marketing.rb | 8 +- .../email/message/account_validation.rb | 99 ++++++++++++++++++- .../email/message/account_validation_spec.rb | 6 +- .../emails/in_product_marketing_spec.rb | 16 ++- .../message/in_product_marketing/helper.rb | 97 ------------------ .../in_product_marketing/helper_spec.rb | 75 -------------- .../emails/in_product_marketing_spec.rb | 17 ---- spec/support/rspec_order_todo.yml | 11 --- 25 files changed, 120 insertions(+), 278 deletions(-) delete mode 100644 ee/app/mailers/ee/emails/in_product_marketing.rb rename {app => ee/app}/mailers/emails/in_product_marketing.rb (79%) delete mode 100644 lib/gitlab/email/message/in_product_marketing/helper.rb delete mode 100644 spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb delete mode 100644 spec/mailers/emails/in_product_marketing_spec.rb diff --git a/.rubocop_todo/layout/array_alignment.yml b/.rubocop_todo/layout/array_alignment.yml index 88d093954c6bd..8d040f5738ec7 100644 --- a/.rubocop_todo/layout/array_alignment.yml +++ b/.rubocop_todo/layout/array_alignment.yml @@ -166,9 +166,6 @@ Layout/ArrayAlignment: - 'lib/gitlab/conflict/file_collection.rb' - 'lib/gitlab/content_security_policy/config_loader.rb' - 'lib/gitlab/database/background_migration/batched_job.rb' - - 'lib/gitlab/email/message/in_product_marketing/team.rb' - - 'lib/gitlab/email/message/in_product_marketing/trial.rb' - - 'lib/gitlab/email/message/in_product_marketing/verify.rb' - 'lib/gitlab/email/receiver.rb' - 'lib/gitlab/etag_caching/router/rails.rb' - 'lib/gitlab/git/diff.rb' diff --git a/.rubocop_todo/layout/first_array_element_indentation.yml b/.rubocop_todo/layout/first_array_element_indentation.yml index fa90c937813f6..05f12783fc67d 100644 --- a/.rubocop_todo/layout/first_array_element_indentation.yml +++ b/.rubocop_todo/layout/first_array_element_indentation.yml @@ -44,9 +44,6 @@ Layout/FirstArrayElementIndentation: - 'ee/spec/requests/api/saml_group_links_spec.rb' - 'ee/spec/services/audit_events/export_csv_service_spec.rb' - 'ee/spec/services/groups/seat_usage_export_service_spec.rb' - - 'lib/gitlab/email/message/in_product_marketing/team.rb' - - 'lib/gitlab/email/message/in_product_marketing/trial.rb' - - 'lib/gitlab/email/message/in_product_marketing/verify.rb' - 'lib/gitlab/object_hierarchy.rb' - 'lib/gitlab/project_authorizations.rb' - 'qa/qa/specs/features/api/12_systems/gitaly/automatic_failover_and_recovery_spec.rb' diff --git a/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml b/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml index 25ab7ecb1ef33..28edc75a55a6d 100644 --- a/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml +++ b/.rubocop_todo/layout/line_end_string_concatenation_indentation.yml @@ -266,7 +266,6 @@ Layout/LineEndStringConcatenationIndentation: - 'spec/lib/gitlab/ci/templates/themekit_gitlab_ci_yaml_spec.rb' - 'spec/lib/gitlab/database/background_migration/batched_migration_runner_spec.rb' - 'spec/lib/gitlab/database/migrations/batched_background_migration_helpers_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb' - 'spec/lib/gitlab/github_import/markdown_text_spec.rb' - 'spec/lib/gitlab/github_import/representation/issue_event_spec.rb' - 'spec/lib/gitlab/insecure_key_fingerprint_spec.rb' diff --git a/.rubocop_todo/layout/line_length.yml b/.rubocop_todo/layout/line_length.yml index df594c22dea84..936ca4b0122ac 100644 --- a/.rubocop_todo/layout/line_length.yml +++ b/.rubocop_todo/layout/line_length.yml @@ -1262,7 +1262,6 @@ Layout/LineLength: - 'ee/lib/gitlab/elastic/group_search_results.rb' - 'ee/lib/gitlab/elastic/project_search_results.rb' - 'ee/lib/gitlab/elastic/search_results.rb' - - 'ee/lib/gitlab/email/message/account_validation.rb' - 'ee/lib/gitlab/expiring_subscription_message.rb' - 'ee/lib/gitlab/geo.rb' - 'ee/lib/gitlab/geo/geo_node_status_check.rb' @@ -2687,13 +2686,6 @@ Layout/LineLength: - 'lib/gitlab/email/failure_handler.rb' - 'lib/gitlab/email/handler/create_issue_handler.rb' - 'lib/gitlab/email/handler/create_merge_request_handler.rb' - - 'lib/gitlab/email/message/in_product_marketing/base.rb' - - 'lib/gitlab/email/message/in_product_marketing/create.rb' - - 'lib/gitlab/email/message/in_product_marketing/helper.rb' - - 'lib/gitlab/email/message/in_product_marketing/team.rb' - - 'lib/gitlab/email/message/in_product_marketing/trial.rb' - - 'lib/gitlab/email/message/in_product_marketing/trial_short.rb' - - 'lib/gitlab/email/message/in_product_marketing/verify.rb' - 'lib/gitlab/encrypted_command_base.rb' - 'lib/gitlab/encrypted_configuration.rb' - 'lib/gitlab/endpoint_attributes/config.rb' @@ -3868,12 +3860,6 @@ Layout/LineLength: - 'spec/lib/gitlab/email/handler/unsubscribe_handler_spec.rb' - 'spec/lib/gitlab/email/handler_spec.rb' - 'spec/lib/gitlab/email/hook/smime_signature_interceptor_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/admin_verify_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/team_short_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/team_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/trial_short_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/trial_spec.rb' - 'spec/lib/gitlab/email/receiver_spec.rb' - 'spec/lib/gitlab/email/reply_parser_spec.rb' - 'spec/lib/gitlab/emoji_spec.rb' diff --git a/.rubocop_todo/lint/ambiguous_operator_precedence.yml b/.rubocop_todo/lint/ambiguous_operator_precedence.yml index f21c101d4a2e0..19816ce1f85ca 100644 --- a/.rubocop_todo/lint/ambiguous_operator_precedence.yml +++ b/.rubocop_todo/lint/ambiguous_operator_precedence.yml @@ -67,7 +67,6 @@ Lint/AmbiguousOperatorPrecedence: - 'lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb' - 'lib/gitlab/database/postgres_hll/buckets.rb' - 'lib/gitlab/database/query_analyzers/prevent_cross_database_modification.rb' - - 'lib/gitlab/email/message/in_product_marketing/helper.rb' - 'lib/gitlab/i18n/po_linter.rb' - 'lib/gitlab/import_export/project/relation_factory.rb' - 'lib/gitlab/memory/instrumentation.rb' diff --git a/.rubocop_todo/rails/output_safety.yml b/.rubocop_todo/rails/output_safety.yml index 85388e8a1da79..36628384477d9 100644 --- a/.rubocop_todo/rails/output_safety.yml +++ b/.rubocop_todo/rails/output_safety.yml @@ -118,7 +118,6 @@ Rails/OutputSafety: - 'ee/app/helpers/push_rules_helper.rb' - 'ee/app/models/integrations/github.rb' - 'ee/lib/ee/gitlab/namespace_storage_size_error_message.rb' - - 'ee/lib/gitlab/email/message/account_validation.rb' - 'ee/lib/gitlab/expiring_subscription_message.rb' - 'ee/lib/gitlab/licenses/submit_license_usage_data_banner.rb' - 'ee/lib/gitlab/manual_quarterly_co_term_banner.rb' @@ -139,9 +138,6 @@ Rails/OutputSafety: - 'lib/gitlab/diff/inline_diff_marker.rb' - 'lib/gitlab/diff/line.rb' - 'lib/gitlab/diff/rendered/notebook/diff_file_helper.rb' - - 'lib/gitlab/email/message/in_product_marketing/helper.rb' - - 'lib/gitlab/email/message/in_product_marketing/trial.rb' - - 'lib/gitlab/email/message/in_product_marketing/verify.rb' - 'lib/gitlab/highlight.rb' - 'lib/gitlab/observability.rb' - 'lib/gitlab/other_markup.rb' diff --git a/.rubocop_todo/rspec/before_all_role_assignment.yml b/.rubocop_todo/rspec/before_all_role_assignment.yml index 3d4ee2f036942..8f9e618d47cf7 100644 --- a/.rubocop_todo/rspec/before_all_role_assignment.yml +++ b/.rubocop_todo/rspec/before_all_role_assignment.yml @@ -1157,7 +1157,6 @@ RSpec/BeforeAllRoleAssignment: - 'spec/lib/gitlab/search_results_spec.rb' - 'spec/lib/gitlab/slash_commands/presenters/issue_move_spec.rb' - 'spec/lib/gitlab/tree_summary_spec.rb' - - 'spec/mailers/emails/in_product_marketing_spec.rb' - 'spec/models/ci/bridge_spec.rb' - 'spec/models/ci/catalog/listing_spec.rb' - 'spec/models/ci/pipeline_spec.rb' diff --git a/.rubocop_todo/rspec/context_wording.yml b/.rubocop_todo/rspec/context_wording.yml index e76e33b35a329..3b6729a320b31 100644 --- a/.rubocop_todo/rspec/context_wording.yml +++ b/.rubocop_todo/rspec/context_wording.yml @@ -1778,13 +1778,6 @@ RSpec/ContextWording: - 'spec/lib/gitlab/email/handler/service_desk_handler_spec.rb' - 'spec/lib/gitlab/email/handler/unsubscribe_handler_spec.rb' - 'spec/lib/gitlab/email/handler_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/admin_verify_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/team_short_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/team_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/trial_short_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/trial_spec.rb' - 'spec/lib/gitlab/email/message/repository_push_spec.rb' - 'spec/lib/gitlab/email/reply_parser_spec.rb' - 'spec/lib/gitlab/encoding_helper_spec.rb' diff --git a/.rubocop_todo/rspec/factory_bot/avoid_create.yml b/.rubocop_todo/rspec/factory_bot/avoid_create.yml index 2725b035d65f8..b0758b9f65cf1 100644 --- a/.rubocop_todo/rspec/factory_bot/avoid_create.yml +++ b/.rubocop_todo/rspec/factory_bot/avoid_create.yml @@ -360,7 +360,6 @@ RSpec/FactoryBot/AvoidCreate: - 'spec/mailers/devise_mailer_spec.rb' - 'spec/mailers/emails/auto_devops_spec.rb' - 'spec/mailers/emails/groups_spec.rb' - - 'spec/mailers/emails/in_product_marketing_spec.rb' - 'spec/mailers/emails/issues_spec.rb' - 'spec/mailers/emails/merge_requests_spec.rb' - 'spec/mailers/emails/pages_domains_spec.rb' diff --git a/.rubocop_todo/rspec/missing_feature_category.yml b/.rubocop_todo/rspec/missing_feature_category.yml index 39d1c8eb3930d..f3dbdd498bcca 100644 --- a/.rubocop_todo/rspec/missing_feature_category.yml +++ b/.rubocop_todo/rspec/missing_feature_category.yml @@ -971,7 +971,6 @@ RSpec/MissingFeatureCategory: - 'ee/spec/mailers/ee/emails/projects_spec.rb' - 'ee/spec/mailers/emails/epics_spec.rb' - 'ee/spec/mailers/emails/group_memberships_spec.rb' - - 'ee/spec/mailers/emails/in_product_marketing_spec.rb' - 'ee/spec/mailers/emails/namespace_storage_usage_mailer_spec.rb' - 'ee/spec/mailers/emails/requirements_spec.rb' - 'ee/spec/mailers/emails/user_cap_spec.rb' @@ -3493,16 +3492,6 @@ RSpec/MissingFeatureCategory: - 'spec/lib/gitlab/email/hook/delivery_metrics_observer_spec.rb' - 'spec/lib/gitlab/email/hook/disable_email_interceptor_spec.rb' - 'spec/lib/gitlab/email/hook/smime_signature_interceptor_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/admin_verify_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/create_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/team_short_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/team_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/trial_short_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/trial_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/verify_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing_spec.rb' - 'spec/lib/gitlab/email/message/repository_push_spec.rb' - 'spec/lib/gitlab/email/receiver_spec.rb' - 'spec/lib/gitlab/email/service_desk_receiver_spec.rb' @@ -4463,7 +4452,6 @@ RSpec/MissingFeatureCategory: - 'spec/mailers/emails/auto_devops_spec.rb' - 'spec/mailers/emails/groups_spec.rb' - 'spec/mailers/emails/identity_verification_spec.rb' - - 'spec/mailers/emails/in_product_marketing_spec.rb' - 'spec/mailers/emails/merge_requests_spec.rb' - 'spec/mailers/emails/pages_domains_spec.rb' - 'spec/mailers/emails/pipelines_spec.rb' diff --git a/.rubocop_todo/rspec/return_from_stub.yml b/.rubocop_todo/rspec/return_from_stub.yml index 1a668f2d7e2be..7624216e8ed3a 100644 --- a/.rubocop_todo/rspec/return_from_stub.yml +++ b/.rubocop_todo/rspec/return_from_stub.yml @@ -137,7 +137,6 @@ RSpec/ReturnFromStub: - 'spec/lib/gitlab/daemon_spec.rb' - 'spec/lib/gitlab/database_importers/instance_administrators/create_group_spec.rb' - 'spec/lib/gitlab/diff/file_spec.rb' - - 'spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb' - 'spec/lib/gitlab/exclusive_lease_helpers/sleeping_lock_spec.rb' - 'spec/lib/gitlab/exclusive_lease_helpers_spec.rb' - 'spec/lib/gitlab/external_authorization_spec.rb' diff --git a/.rubocop_todo/rspec/scattered_let.yml b/.rubocop_todo/rspec/scattered_let.yml index 479ff4fd8f92e..4d93c6816cc21 100644 --- a/.rubocop_todo/rspec/scattered_let.yml +++ b/.rubocop_todo/rspec/scattered_let.yml @@ -176,7 +176,6 @@ RSpec/ScatteredLet: - 'spec/lib/gitlab/utils/measuring_spec.rb' - 'spec/lib/gitlab/zentao/client_spec.rb' - 'spec/lib/peek/views/external_http_spec.rb' - - 'spec/mailers/emails/in_product_marketing_spec.rb' - 'spec/mailers/notify_spec.rb' - 'spec/mailers/previews_spec.rb' - 'spec/migrations/20220329175119_remove_leftover_ci_job_artifact_deletions_spec.rb' diff --git a/.rubocop_todo/style/format_string.yml b/.rubocop_todo/style/format_string.yml index c45ddab84414f..fc52fd7574805 100644 --- a/.rubocop_todo/style/format_string.yml +++ b/.rubocop_todo/style/format_string.yml @@ -260,10 +260,6 @@ Style/FormatString: - 'lib/gitlab/database/postgres_hll/batch_distinct_counter.rb' - 'lib/gitlab/database/reindexing/reindex_concurrently.rb' - 'lib/gitlab/database_importers/instance_administrators/create_group.rb' - - 'lib/gitlab/email/message/in_product_marketing/base.rb' - - 'lib/gitlab/email/message/in_product_marketing/create.rb' - - 'lib/gitlab/email/message/in_product_marketing/helper.rb' - - 'lib/gitlab/email/message/in_product_marketing/verify.rb' - 'lib/gitlab/exceptions_app.rb' - 'lib/gitlab/github_import/importer/pull_request_merged_by_importer.rb' - 'lib/gitlab/github_import/importer/single_endpoint_issue_events_importer.rb' diff --git a/.rubocop_todo/style/if_unless_modifier.yml b/.rubocop_todo/style/if_unless_modifier.yml index ef4fca8270dbf..0f271a766b605 100644 --- a/.rubocop_todo/style/if_unless_modifier.yml +++ b/.rubocop_todo/style/if_unless_modifier.yml @@ -814,7 +814,6 @@ Style/IfUnlessModifier: - 'lib/gitlab/database/transaction/observer.rb' - 'lib/gitlab/database/with_lock_retries.rb' - 'lib/gitlab/email/handler/service_desk_handler.rb' - - 'lib/gitlab/email/message/in_product_marketing/base.rb' - 'lib/gitlab/email/message/repository_push.rb' - 'lib/gitlab/email/receiver.rb' - 'lib/gitlab/email/reply_parser.rb' diff --git a/.rubocop_todo/style/string_concatenation.yml b/.rubocop_todo/style/string_concatenation.yml index d899ff9d98fc7..d887a3b391b60 100644 --- a/.rubocop_todo/style/string_concatenation.yml +++ b/.rubocop_todo/style/string_concatenation.yml @@ -96,7 +96,6 @@ Style/StringConcatenation: - 'lib/gitlab/database/rename_reserved_paths_migration/v1/migration_classes.rb' - 'lib/gitlab/database/unidirectional_copy_trigger.rb' - 'lib/gitlab/email/handler/service_desk_handler.rb' - - 'lib/gitlab/email/message/in_product_marketing/helper.rb' - 'lib/gitlab/git.rb' - 'lib/gitlab/git/branch.rb' - 'lib/gitlab/git/tag.rb' diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb index 77d32a55941a3..2f90579a5c259 100644 --- a/app/mailers/notify.rb +++ b/app/mailers/notify.rb @@ -22,7 +22,6 @@ class Notify < ApplicationMailer include Emails::Groups include Emails::Reviews include Emails::ServiceDesk - include Emails::InProductMarketing include Emails::AdminNotification include Emails::IdentityVerification include Emails::Imports diff --git a/ee/app/mailers/ee/emails/in_product_marketing.rb b/ee/app/mailers/ee/emails/in_product_marketing.rb deleted file mode 100644 index 08f6076954a6e..0000000000000 --- a/ee/app/mailers/ee/emails/in_product_marketing.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -module EE - module Emails - module InProductMarketing - def account_validation_email(pipeline, recipient_email) - @message = ::Gitlab::Email::Message::AccountValidation.new(pipeline) - - mail_to(to: recipient_email, subject: @message.subject_line) - end - end - end -end diff --git a/app/mailers/emails/in_product_marketing.rb b/ee/app/mailers/emails/in_product_marketing.rb similarity index 79% rename from app/mailers/emails/in_product_marketing.rb rename to ee/app/mailers/emails/in_product_marketing.rb index cbadbe3e124e1..2e40d2adc7191 100644 --- a/app/mailers/emails/in_product_marketing.rb +++ b/ee/app/mailers/emails/in_product_marketing.rb @@ -12,6 +12,12 @@ module InProductMarketing 'X-Mailgun-Tag' => 'marketing' }.freeze + def account_validation_email(pipeline, recipient_email) + @message = ::Gitlab::Email::Message::AccountValidation.new(pipeline) + + mail_to(to: recipient_email, subject: @message.subject_line) + end + private def mail_to(to:, subject:) @@ -32,5 +38,3 @@ def mail_to(to:, subject:) end end end - -Emails::InProductMarketing.prepend_mod diff --git a/ee/lib/gitlab/email/message/account_validation.rb b/ee/lib/gitlab/email/message/account_validation.rb index fa065941dd665..7baad0acd58cc 100644 --- a/ee/lib/gitlab/email/message/account_validation.rb +++ b/ee/lib/gitlab/email/message/account_validation.rb @@ -4,7 +4,7 @@ module Gitlab module Email module Message class AccountValidation - include Gitlab::Email::Message::InProductMarketing::Helper + include SafeFormatHelper include Gitlab::Routing attr_accessor :pipeline, :format @@ -23,12 +23,20 @@ def title end def body_line1 - s_("AccountValidation|In order to use free compute minutes on shared runners, you'll need to validate your account using one of our verification options. If you prefer not to, you can run pipelines by bringing your own runners and disabling shared runners for your project.") + s_("AccountValidation|In order to use free compute minutes on shared runners, " \ + "you'll need to validate your account using one of our verification options. " \ + "If you prefer not to, you can run pipelines by bringing your own runners and " \ + "disabling shared runners for your project.") end def body_line2 format_options = strong_options.merge({ learn_more_link: learn_more_link }) - s_("AccountValidation|Verification is required to discourage and reduce the abuse on GitLab infrastructure. If you verify with a credit or debit card, %{strong_start}GitLab will not charge your card, it will only be used for validation.%{strong_end} %{learn_more_link}").html_safe % format_options + safe_format( + s_("AccountValidation|Verification is required to discourage and reduce the abuse on GitLab " \ + "infrastructure. If you verify with a credit or debit card, %{strong_start}GitLab will not " \ + "charge your card, it will only be used for validation.%{strong_end} %{learn_more_link}"), + format_options + ) end def cta_text @@ -65,12 +73,93 @@ def cta2_link end end + def unsubscribe + parts = Gitlab.com? ? unsubscribe_com : unsubscribe_self_managed(nil) + + case format + when :html + parts.join(' ') + else + parts.join("\n#{' ' * 16}") + end + end + + def footer_links + links = [ + [s_('InProductMarketing|Blog'), 'https://about.gitlab.com/blog'], + [s_('InProductMarketing|Twitter'), 'https://twitter.com/gitlab'], + [s_('InProductMarketing|Facebook'), 'https://www.facebook.com/gitlab'], + [s_('InProductMarketing|YouTube'), 'https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg'] + ] + case format + when :html + links.map do |text, link| + ActionController::Base.helpers.link_to(text, link) + end + else + "| #{links.map { |text, link| [text, link].join(' ') }.join('\n| ')}" + end + end + + def address + safe_format( + s_('InProductMarketing|%{strong_start}GitLab Inc.%{strong_end} 268 Bush Street, #350, ' \ + 'San Francisco, CA 94104, USA'), + strong_options + ) + end + + private + def learn_more_link link(s_('AccountValidation|Learn more.'), 'https://about.gitlab.com/blog/2021/05/17/prevent-crypto-mining-abuse/') end - def unsubscribe - unsubscribe_message + def unsubscribe_link + unsubscribe_url = Gitlab.com? ? '%tag_unsubscribe_url%' : profile_notifications_url + + link(s_('InProductMarketing|unsubscribe'), unsubscribe_url) + end + + def unsubscribe_com + [ + s_('InProductMarketing|If you no longer wish to receive marketing emails from us,'), + safe_format( + s_('InProductMarketing|you may %{unsubscribe_link} at any time.'), unsubscribe_link: unsubscribe_link + ) + ] + end + + def unsubscribe_self_managed(preferences_link) + [ + safe_format( + s_('InProductMarketing|To opt out of these onboarding emails, %{unsubscribe_link}.'), + unsubscribe_link: unsubscribe_link + ), + safe_format( + s_("InProductMarketing|If you don't want to receive marketing emails directly from GitLab, " \ + "%{marketing_preference_link}."), + marketing_preference_link: preferences_link + ) + ] + end + + def strong_options + case format + when :html + { strong_start: '<b>'.html_safe, strong_end: '</b>'.html_safe } + else + { strong_start: '', strong_end: '' } + end + end + + def link(text, link) + case format + when :html + ActionController::Base.helpers.link_to text, link + else + "#{text} (#{link})" + end end end end diff --git a/ee/spec/lib/gitlab/email/message/account_validation_spec.rb b/ee/spec/lib/gitlab/email/message/account_validation_spec.rb index 3ae34864b87c8..0052d6e43344f 100644 --- a/ee/spec/lib/gitlab/email/message/account_validation_spec.rb +++ b/ee/spec/lib/gitlab/email/message/account_validation_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Gitlab::Email::Message::AccountValidation do +RSpec.describe Gitlab::Email::Message::AccountValidation, feature_category: :instance_resiliency do let_it_be(:namespace) { create(:namespace) } let_it_be(:project) { create(:project, :repository, namespace: namespace) } let_it_be(:pipeline) { create(:ci_pipeline, project: project) } @@ -22,5 +22,9 @@ expect(message.cta2_text).to eq "I'll bring my own runners" expect(message.logo_path).to eq 'mailers/in_product_marketing/verify-2.png' expect(message.unsubscribe).to include('%tag_unsubscribe_url%') + expect(message.cta_link).to include('Validate your account') + expect(message.cta2_link).to include('bring my own runners') + expect(message.footer_links).to all(match(/Blog|Twitter|Facebook|YouTube/)) + expect(message.address).to include('GitLab Inc') end end diff --git a/ee/spec/mailers/emails/in_product_marketing_spec.rb b/ee/spec/mailers/emails/in_product_marketing_spec.rb index 4d8e58f0d2495..cfc07441b52a8 100644 --- a/ee/spec/mailers/emails/in_product_marketing_spec.rb +++ b/ee/spec/mailers/emails/in_product_marketing_spec.rb @@ -3,12 +3,26 @@ require 'spec_helper' require 'email_spec' -RSpec.describe Emails::InProductMarketing do +RSpec.describe Emails::InProductMarketing, feature_category: :instance_resiliency do include EmailSpec::Matchers include Gitlab::Routing.url_helpers let_it_be(:user) { create(:user) } + it 'has correct custom headers' do + headers = { + from: 'GitLab <team@gitlab.com>', + reply_to: 'GitLab <team@gitlab.com>', + 'X-Mailgun-Track' => 'yes', + 'X-Mailgun-Track-Clicks' => 'yes', + 'X-Mailgun-Track-Opens' => 'yes', + 'X-Mailgun-Tag' => 'marketing' + } + + expect(described_class::FROM_ADDRESS).to be('GitLab <team@gitlab.com>') + expect(described_class::CUSTOM_HEADERS).to eq(headers) + end + describe '#account_validation_email' do let_it_be(:namespace) { create(:namespace) } let_it_be(:project) { create(:project, :repository, namespace: namespace) } diff --git a/lib/gitlab/email/message/in_product_marketing/helper.rb b/lib/gitlab/email/message/in_product_marketing/helper.rb deleted file mode 100644 index 0770e5f4d7645..0000000000000 --- a/lib/gitlab/email/message/in_product_marketing/helper.rb +++ /dev/null @@ -1,97 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Email - module Message - module InProductMarketing - module Helper - include ActionView::Context - include ActionView::Helpers::TagHelper - - def footer_links - links = [ - [s_('InProductMarketing|Blog'), 'https://about.gitlab.com/blog'], - [s_('InProductMarketing|Twitter'), 'https://twitter.com/gitlab'], - [s_('InProductMarketing|Facebook'), 'https://www.facebook.com/gitlab'], - [s_('InProductMarketing|YouTube'), 'https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg'] - ] - case format - when :html - links.map do |text, link| - ActionController::Base.helpers.link_to(text, link) - end - else - '| ' + links.map do |text, link| - [text, link].join(' ') - end.join("\n| ") - end - end - - def address - s_('InProductMarketing|%{strong_start}GitLab Inc.%{strong_end} 268 Bush Street, #350, San Francisco, CA 94104, USA').html_safe % strong_options - end - - def unsubscribe_message(self_managed_preferences_link = nil) - parts = Gitlab.com? ? unsubscribe_com : unsubscribe_self_managed(self_managed_preferences_link) - - case format - when :html - parts.join(' ') - else - parts.join("\n" + ' ' * 16) - end - end - - private - - def unsubscribe_link - unsubscribe_url = Gitlab.com? ? '%tag_unsubscribe_url%' : profile_notifications_url - - link(s_('InProductMarketing|unsubscribe'), unsubscribe_url) - end - - def unsubscribe_com - [ - s_('InProductMarketing|If you no longer wish to receive marketing emails from us,'), - s_('InProductMarketing|you may %{unsubscribe_link} at any time.') % { unsubscribe_link: unsubscribe_link } - ] - end - - def unsubscribe_self_managed(preferences_link) - [ - s_('InProductMarketing|To opt out of these onboarding emails, %{unsubscribe_link}.') % { unsubscribe_link: unsubscribe_link }, - s_("InProductMarketing|If you don't want to receive marketing emails directly from GitLab, %{marketing_preference_link}.") % { marketing_preference_link: preferences_link } - ] - end - - def strong_options - case format - when :html - { strong_start: '<b>'.html_safe, strong_end: '</b>'.html_safe } - else - { strong_start: '', strong_end: '' } - end - end - - def link(text, link) - case format - when :html - ActionController::Base.helpers.link_to text, link - else - "#{text} (#{link})" - end - end - - def action_link(text, link) - case format - when :html - ActionController::Base.helpers.link_to text, link, target: '_blank', rel: 'noopener noreferrer' - else - [text, link].join(' >> ') - end - end - end - end - end - end -end diff --git a/spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb b/spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb deleted file mode 100644 index a3c2d1b428e47..0000000000000 --- a/spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb +++ /dev/null @@ -1,75 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Gitlab::Email::Message::InProductMarketing::Helper do - describe 'unsubscribe_message' do - include Gitlab::Routing - - let(:dummy_class_with_helper) do - Class.new do - include Gitlab::Email::Message::InProductMarketing::Helper - include Gitlab::Routing - - def initialize(format = :html) - @format = format - end - - def default_url_options - {} - end - - attr_accessor :format - end - end - - let(:format) { :html } - - subject(:class_with_helper) { dummy_class_with_helper.new(format) } - - context 'for SaaS', :saas do - context 'format is HTML' do - it 'returns the correct HTML' do - message = "If you no longer wish to receive marketing emails from us, " \ - "you may <a href=\"%tag_unsubscribe_url%\">unsubscribe</a> at any time." - expect(class_with_helper.unsubscribe_message).to match message - end - end - - context 'format is text' do - let(:format) { :text } - - it 'returns the correct string' do - message = "If you no longer wish to receive marketing emails from us, " \ - "you may unsubscribe (%tag_unsubscribe_url%) at any time." - expect(class_with_helper.unsubscribe_message.squish).to match message - end - end - end - - context 'self-managed' do - context 'format is HTML' do - it 'returns the correct HTML' do - preferences_link = "http://example.com/preferences" - message = "To opt out of these onboarding emails, " \ - "<a href=\"#{profile_notifications_url}\">unsubscribe</a>. " \ - "If you don't want to receive marketing emails directly from GitLab, #{preferences_link}." - expect(class_with_helper.unsubscribe_message(preferences_link)) - .to match message - end - end - - context 'format is text' do - let(:format) { :text } - - it 'returns the correct string' do - preferences_link = "http://example.com/preferences" - message = "To opt out of these onboarding emails, " \ - "unsubscribe (#{profile_notifications_url}). " \ - "If you don't want to receive marketing emails directly from GitLab, #{preferences_link}." - expect(class_with_helper.unsubscribe_message(preferences_link).squish).to match message - end - end - end - end -end diff --git a/spec/mailers/emails/in_product_marketing_spec.rb b/spec/mailers/emails/in_product_marketing_spec.rb deleted file mode 100644 index 23ee21bfb456a..0000000000000 --- a/spec/mailers/emails/in_product_marketing_spec.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Emails::InProductMarketing do - it 'has correct custom headers' do - expect(described_class::FROM_ADDRESS).to be('GitLab <team@gitlab.com>') - expect(described_class::CUSTOM_HEADERS).to eq({ - from: 'GitLab <team@gitlab.com>', - reply_to: 'GitLab <team@gitlab.com>', - 'X-Mailgun-Track' => 'yes', - 'X-Mailgun-Track-Clicks' => 'yes', - 'X-Mailgun-Track-Opens' => 'yes', - 'X-Mailgun-Tag' => 'marketing' - }) - end -end diff --git a/spec/support/rspec_order_todo.yml b/spec/support/rspec_order_todo.yml index b58a2b4612c08..9458acb11fb6d 100644 --- a/spec/support/rspec_order_todo.yml +++ b/spec/support/rspec_order_todo.yml @@ -6242,16 +6242,6 @@ - './spec/lib/gitlab/email/hook/delivery_metrics_observer_spec.rb' - './spec/lib/gitlab/email/hook/disable_email_interceptor_spec.rb' - './spec/lib/gitlab/email/hook/smime_signature_interceptor_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing/admin_verify_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing/create_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing/helper_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing/team_short_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing/team_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing/trial_short_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing/trial_spec.rb' -- './spec/lib/gitlab/email/message/in_product_marketing/verify_spec.rb' - './spec/lib/gitlab/email/message/repository_push_spec.rb' - './spec/lib/gitlab/email/receiver_spec.rb' - './spec/lib/gitlab/email/reply_parser_spec.rb' @@ -7265,7 +7255,6 @@ - './spec/mailers/emails/admin_notification_spec.rb' - './spec/mailers/emails/auto_devops_spec.rb' - './spec/mailers/emails/groups_spec.rb' -- './spec/mailers/emails/in_product_marketing_spec.rb' - './spec/mailers/emails/issues_spec.rb' - './spec/mailers/emails/merge_requests_spec.rb' - './spec/mailers/emails/pages_domains_spec.rb' -- GitLab