Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
83f397aaf4
commit
819b5458e5
|
|
@ -231,7 +231,7 @@ class Projects::IssuesController < Projects::ApplicationController
|
|||
IssuableExportCsvWorker.perform_async(:issue, current_user.id, project.id, finder_options.to_h) # rubocop:disable CodeReuse/Worker
|
||||
|
||||
index_path = project_issues_path(project)
|
||||
message = _('Your CSV export has started. It will be emailed to %{email} when complete.') % { email: current_user.notification_email_or_default }
|
||||
message = _('Your CSV export has started. It will be emailed to %{email} when complete.') % { email: current_user.notification_email }
|
||||
redirect_to(index_path, notice: message)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -378,7 +378,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
|
|||
IssuableExportCsvWorker.perform_async(:merge_request, current_user.id, project.id, finder_options.to_h) # rubocop:disable CodeReuse/Worker
|
||||
|
||||
index_path = project_merge_requests_path(project)
|
||||
message = _('Your CSV export has started. It will be emailed to %{email} when complete.') % { email: current_user.notification_email_or_default }
|
||||
message = _('Your CSV export has started. It will be emailed to %{email} when complete.') % { email: current_user.notification_email }
|
||||
redirect_to(index_path, notice: message)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ module IssuesHelper
|
|||
can_bulk_update: can?(current_user, :admin_issue, project).to_s,
|
||||
can_edit: can?(current_user, :admin_project, project).to_s,
|
||||
can_import_issues: can?(current_user, :import_issues, @project).to_s,
|
||||
email: current_user&.notification_email_or_default,
|
||||
email: current_user&.notification_email,
|
||||
emails_help_page_path: help_page_path('development/emails', anchor: 'email-namespace'),
|
||||
export_csv_path: export_csv_project_issues_path(project),
|
||||
has_any_issues: project_issues(project).exists?.to_s,
|
||||
|
|
|
|||
|
|
@ -435,7 +435,7 @@ module ProjectsHelper
|
|||
|
||||
def git_user_email
|
||||
if current_user
|
||||
current_user.commit_email_or_default
|
||||
current_user.commit_email
|
||||
else
|
||||
"your@email.com"
|
||||
end
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ module Emails
|
|||
module AdminNotification
|
||||
def send_admin_notification(user_id, subject, body)
|
||||
user = User.find(user_id)
|
||||
email = user.notification_email_or_default
|
||||
email = user.notification_email
|
||||
@unsubscribe_url = unsubscribe_url(email: Base64.urlsafe_encode64(email))
|
||||
@body = body
|
||||
mail to: email, subject: subject
|
||||
|
|
@ -12,7 +12,7 @@ module Emails
|
|||
|
||||
def send_unsubscribed_notification(user_id)
|
||||
user = User.find(user_id)
|
||||
email = user.notification_email_or_default
|
||||
email = user.notification_email
|
||||
mail to: email, subject: "Unsubscribed from GitLab administrator notifications"
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ module Emails
|
|||
@current_user = @user = User.find(user_id)
|
||||
@target_url = user_url(@user)
|
||||
@token = token
|
||||
mail(to: @user.notification_email_or_default, subject: subject("Account was created for you"))
|
||||
mail(to: @user.notification_email, subject: subject("Account was created for you"))
|
||||
end
|
||||
|
||||
def instance_access_request_email(user, recipient)
|
||||
|
|
@ -14,7 +14,7 @@ module Emails
|
|||
@recipient = recipient
|
||||
|
||||
profile_email_with_layout(
|
||||
to: recipient.notification_email_or_default,
|
||||
to: recipient.notification_email,
|
||||
subject: subject(_("GitLab Account Request")))
|
||||
end
|
||||
|
||||
|
|
@ -42,7 +42,7 @@ module Emails
|
|||
|
||||
@current_user = @user = @key.user
|
||||
@target_url = user_url(@user)
|
||||
mail(to: @user.notification_email_or_default, subject: subject("SSH key was added to your account"))
|
||||
mail(to: @user.notification_email, subject: subject("SSH key was added to your account"))
|
||||
end
|
||||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ module Emails
|
|||
|
||||
@current_user = @user = @gpg_key.user
|
||||
@target_url = user_url(@user)
|
||||
mail(to: @user.notification_email_or_default, subject: subject("GPG key was added to your account"))
|
||||
mail(to: @user.notification_email, subject: subject("GPG key was added to your account"))
|
||||
end
|
||||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
|
||||
|
|
@ -67,7 +67,7 @@ module Emails
|
|||
@days_to_expire = PersonalAccessToken::DAYS_TO_EXPIRE
|
||||
|
||||
Gitlab::I18n.with_locale(@user.preferred_language) do
|
||||
mail(to: @user.notification_email_or_default, subject: subject(_("Your personal access tokens will expire in %{days_to_expire} days or less") % { days_to_expire: @days_to_expire }))
|
||||
mail(to: @user.notification_email, subject: subject(_("Your personal access tokens will expire in %{days_to_expire} days or less") % { days_to_expire: @days_to_expire }))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -78,7 +78,7 @@ module Emails
|
|||
@target_url = profile_personal_access_tokens_url
|
||||
|
||||
Gitlab::I18n.with_locale(@user.preferred_language) do
|
||||
mail(to: @user.notification_email_or_default, subject: subject(_("Your personal access token has expired")))
|
||||
mail(to: @user.notification_email, subject: subject(_("Your personal access token has expired")))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -90,7 +90,7 @@ module Emails
|
|||
@target_url = profile_keys_url
|
||||
|
||||
Gitlab::I18n.with_locale(@user.preferred_language) do
|
||||
mail(to: @user.notification_email_or_default, subject: subject(_("Your SSH key has expired")))
|
||||
mail(to: @user.notification_email, subject: subject(_("Your SSH key has expired")))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -102,7 +102,7 @@ module Emails
|
|||
@target_url = profile_keys_url
|
||||
|
||||
Gitlab::I18n.with_locale(@user.preferred_language) do
|
||||
mail(to: @user.notification_email_or_default, subject: subject(_("Your SSH key is expiring soon.")))
|
||||
mail(to: @user.notification_email, subject: subject(_("Your SSH key is expiring soon.")))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -114,7 +114,7 @@ module Emails
|
|||
|
||||
Gitlab::I18n.with_locale(@user.preferred_language) do
|
||||
profile_email_with_layout(
|
||||
to: @user.notification_email_or_default,
|
||||
to: @user.notification_email,
|
||||
subject: subject(_("%{host} sign-in from new location") % { host: Gitlab.config.gitlab.host }))
|
||||
end
|
||||
end
|
||||
|
|
@ -125,7 +125,7 @@ module Emails
|
|||
@user = user
|
||||
|
||||
Gitlab::I18n.with_locale(@user.preferred_language) do
|
||||
mail(to: @user.notification_email_or_default, subject: subject(_("Two-factor authentication disabled")))
|
||||
mail(to: @user.notification_email, subject: subject(_("Two-factor authentication disabled")))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
class DeployKeysProject < ApplicationRecord
|
||||
belongs_to :project, inverse_of: :deploy_keys_projects
|
||||
belongs_to :deploy_key, inverse_of: :deploy_keys_projects
|
||||
scope :without_project_deleted, -> { joins(:project).where(projects: { pending_delete: false }) }
|
||||
scope :in_project, ->(project) { where(project: project) }
|
||||
scope :with_write_access, -> { where(can_push: true) }
|
||||
|
||||
|
|
|
|||
|
|
@ -229,9 +229,10 @@ class User < ApplicationRecord
|
|||
validates :first_name, length: { maximum: 127 }
|
||||
validates :last_name, length: { maximum: 127 }
|
||||
validates :email, confirmation: true
|
||||
validates :notification_email, devise_email: true, allow_blank: true, if: ->(user) { user.notification_email != user.email }
|
||||
validates :notification_email, presence: true
|
||||
validates :notification_email, devise_email: true, if: ->(user) { user.notification_email != user.email }
|
||||
validates :public_email, uniqueness: true, devise_email: true, allow_blank: true
|
||||
validates :commit_email, devise_email: true, allow_blank: true, if: ->(user) { user.commit_email != user.email }
|
||||
validates :commit_email, devise_email: true, allow_nil: true, if: ->(user) { user.commit_email != user.email }
|
||||
validates :projects_limit,
|
||||
presence: true,
|
||||
numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: Gitlab::Database::MAX_INT_VALUE }
|
||||
|
|
@ -383,7 +384,7 @@ class User < ApplicationRecord
|
|||
after_transition any => :deactivated do |user|
|
||||
next unless Gitlab::CurrentSettings.user_deactivation_emails_enabled
|
||||
|
||||
NotificationService.new.user_deactivated(user.name, user.notification_email_or_default)
|
||||
NotificationService.new.user_deactivated(user.name, user.notification_email)
|
||||
end
|
||||
# rubocop: enable CodeReuse/ServiceClass
|
||||
|
||||
|
|
@ -931,18 +932,33 @@ class User < ApplicationRecord
|
|||
end
|
||||
end
|
||||
|
||||
def commit_email_or_default
|
||||
if self.commit_email == Gitlab::PrivateCommitEmail::TOKEN
|
||||
# Define commit_email-related attribute methods explicitly instead of relying
|
||||
# on ActiveRecord to provide them. Some of the specs use the current state of
|
||||
# the model code but an older database schema, so we need to guard against the
|
||||
# possibility of the commit_email column not existing.
|
||||
|
||||
def commit_email
|
||||
return self.email unless has_attribute?(:commit_email)
|
||||
|
||||
if super == Gitlab::PrivateCommitEmail::TOKEN
|
||||
return private_commit_email
|
||||
end
|
||||
|
||||
# The commit email is the same as the primary email if undefined
|
||||
self.commit_email.presence || self.email
|
||||
super.presence || self.email
|
||||
end
|
||||
|
||||
def notification_email_or_default
|
||||
def commit_email=(email)
|
||||
super if has_attribute?(:commit_email)
|
||||
end
|
||||
|
||||
def commit_email_changed?
|
||||
has_attribute?(:commit_email) && super
|
||||
end
|
||||
|
||||
def notification_email
|
||||
# The notification email is the same as the primary email if undefined
|
||||
self.notification_email.presence || self.email
|
||||
super.presence || self.email
|
||||
end
|
||||
|
||||
def private_commit_email
|
||||
|
|
@ -1624,7 +1640,7 @@ class User < ApplicationRecord
|
|||
|
||||
def notification_email_for(notification_group)
|
||||
# Return group-specific email address if present, otherwise return global notification email address
|
||||
notification_group&.notification_email_for(self) || notification_email_or_default
|
||||
notification_group&.notification_email_for(self) || notification_email
|
||||
end
|
||||
|
||||
def notification_settings_for(source, inherit: false)
|
||||
|
|
@ -2003,7 +2019,7 @@ class User < ApplicationRecord
|
|||
private
|
||||
|
||||
def notification_email_verified
|
||||
return if notification_email.blank? || temp_oauth_email?
|
||||
return if read_attribute(:notification_email).blank? || temp_oauth_email?
|
||||
|
||||
errors.add(:notification_email, _("must be an email you have verified")) unless verified_emails.include?(notification_email)
|
||||
end
|
||||
|
|
@ -2015,7 +2031,7 @@ class User < ApplicationRecord
|
|||
end
|
||||
|
||||
def commit_email_verified
|
||||
return if commit_email.blank?
|
||||
return if read_attribute(:commit_email).blank?
|
||||
|
||||
errors.add(:commit_email, _("must be an email you have verified")) unless verified_emails.include?(commit_email)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -11,6 +11,6 @@
|
|||
- commit_email_link_url = help_page_path('user/profile/index', anchor: 'change-the-email-displayed-on-your-commits', target: '_blank')
|
||||
- commit_email_link_start = '<a href="%{url}">'.html_safe % { url: commit_email_link_url }
|
||||
- commit_email_docs_link = s_('Profiles|This email will be used for web based operations, such as edits and merges. %{commit_email_link_start}Learn more%{commit_email_link_end}').html_safe % { commit_email_link_start: commit_email_link_start, commit_email_link_end: '</a>'.html_safe }
|
||||
= form.select :commit_email, options_for_select(commit_email_select_options(@user), selected: @user.commit_email),
|
||||
= form.select :commit_email, options_for_select(commit_email_select_options(@user), selected: @user.read_attribute(:commit_email)),
|
||||
{ help: commit_email_docs_link },
|
||||
control_class: 'select2 input-lg', disabled: email_change_disabled
|
||||
|
|
|
|||
|
|
@ -38,21 +38,21 @@
|
|||
= render partial: 'shared/email_with_badge', locals: { email: @primary_email, verified: current_user.confirmed? }
|
||||
%span.float-right
|
||||
%span.badge.badge-muted.badge-pill.gl-badge.badge-success= s_('Profiles|Primary email')
|
||||
- if @primary_email === current_user.commit_email_or_default
|
||||
- if @primary_email === current_user.commit_email
|
||||
%span.badge.badge-muted.badge-pill.gl-badge.badge-info= s_('Profiles|Commit email')
|
||||
- if @primary_email === current_user.public_email
|
||||
%span.badge.badge-muted.badge-pill.gl-badge.badge-info= s_('Profiles|Public email')
|
||||
- if @primary_email === current_user.notification_email_or_default
|
||||
- if @primary_email === current_user.notification_email
|
||||
%span.badge.badge-muted.badge-pill.gl-badge.badge-info= s_('Profiles|Default notification email')
|
||||
- @emails.each do |email|
|
||||
%li{ data: { qa_selector: 'email_row_content' } }
|
||||
= render partial: 'shared/email_with_badge', locals: { email: email.email, verified: email.confirmed? }
|
||||
%span.float-right
|
||||
- if email.email === current_user.commit_email_or_default
|
||||
- if email.email === current_user.commit_email
|
||||
%span.badge.badge-muted.badge-pill.gl-badge.badge-info= s_('Profiles|Commit email')
|
||||
- if email.email === current_user.public_email
|
||||
%span.badge.badge-muted.badge-pill.gl-badge.badge-info= s_('Profiles|Public email')
|
||||
- if email.email === current_user.notification_email_or_default
|
||||
- if email.email === current_user.notification_email
|
||||
%span.badge.badge-muted.badge-pill.gl-badge.badge-info= s_('Profiles|Notification email')
|
||||
- unless email.confirmed?
|
||||
- confirm_title = "#{email.confirmation_sent_at ? _('Resend confirmation email') : _('Send confirmation email')}"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
- form = local_assigns.fetch(:form)
|
||||
.form-group
|
||||
= form.label :notification_email, class: "label-bold"
|
||||
= form.select :notification_email, @user.public_verified_emails, { include_blank: _('Use primary email (%{email})') % { email: @user.email }, selected: @user.notification_email }, class: "select2", disabled: local_assigns.fetch(:email_change_disabled, nil)
|
||||
= form.select :notification_email, @user.public_verified_emails, { include_blank: _('Use primary email (%{email})') % { email: @user.email }, selected: @user.read_attribute(:notification_email) }, class: "select2", disabled: local_assigns.fetch(:email_change_disabled, nil)
|
||||
.help-block
|
||||
= local_assigns.fetch(:help_text, nil)
|
||||
.form-group
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
- show_export_button = local_assigns.fetch(:show_export_button, true)
|
||||
- issuable_type = 'issues'
|
||||
- can_edit = can?(current_user, :admin_project, @project)
|
||||
- notification_email = @current_user.present? ? @current_user.notification_email_or_default : nil
|
||||
- notification_email = @current_user.present? ? @current_user.notification_email : nil
|
||||
|
||||
.nav-controls.issues-nav-controls
|
||||
- if show_feed_buttons
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
- issuable_type = 'merge-requests'
|
||||
- notification_email = @current_user.present? ? @current_user.notification_email_or_default : nil
|
||||
- notification_email = @current_user.present? ? @current_user.notification_email : nil
|
||||
|
||||
= render 'shared/issuable/feed_buttons', show_calendar_button: false
|
||||
.js-csv-import-export-buttons{ data: { show_export_button: "true", issuable_type: issuable_type, issuable_count: issuables_count_for_state(issuable_type.to_sym, params[:state]), email: notification_email, export_csv_path: export_csv_project_merge_requests_path(@project, request.query_parameters), container_class: 'gl-mr-3' } }
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
name: env_vars_resource_group
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67876
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/339024
|
||||
milestone: '14.3'
|
||||
type: development
|
||||
group: group::release
|
||||
default_enabled: false
|
||||
|
|
@ -83,7 +83,7 @@ There are also [Kubernetes-specific deployment variables](../../user/project/clu
|
|||
| `CI_PROJECT_ID` | all | all | The ID of the current project. This ID is unique across all projects on the GitLab instance. |
|
||||
| `CI_PROJECT_NAME` | 8.10 | 0.5 | The name of the directory for the project. For example if the project URL is `gitlab.example.com/group-name/project-1`, `CI_PROJECT_NAME` is `project-1`. |
|
||||
| `CI_PROJECT_NAMESPACE` | 8.10 | 0.5 | The project namespace (username or group name) of the job. |
|
||||
| `CI_PROJECT_PATH_SLUG` | 9.3 | all | `$CI_PROJECT_PATH` in lowercase with characters that are not `a-z` or `0-9` replaced with `-`. Use in URLs and domain names. |
|
||||
| `CI_PROJECT_PATH_SLUG` | 9.3 | all | `$CI_PROJECT_PATH` in lowercase with characters that are not `a-z` or `0-9` replaced with `-` and shortened to 63 bytes. Use in URLs and domain names. |
|
||||
| `CI_PROJECT_PATH` | 8.10 | 0.5 | The project namespace with the project name included. |
|
||||
| `CI_PROJECT_REPOSITORY_LANGUAGES` | 12.3 | all | A comma-separated, lowercase list of the languages used in the repository. For example `ruby,javascript,html,css`. |
|
||||
| `CI_PROJECT_ROOT_NAMESPACE` | 13.2 | 0.5 | The root project namespace (username or group name) of the job. For example, if `CI_PROJECT_NAMESPACE` is `root-group/child-group/grandchild-group`, `CI_PROJECT_ROOT_NAMESPACE` is `root-group`. |
|
||||
|
|
|
|||
|
|
@ -694,8 +694,6 @@ TBU
|
|||
|
||||
### Stubbing and Mocking
|
||||
|
||||
Jasmine provides stubbing and mocking capabilities. There are some subtle differences in how to use it within Jest.
|
||||
|
||||
Stubs or spies are often used synonymously. In Jest it's quite easy thanks to the `.spyOn` method.
|
||||
[Official docs](https://jestjs.io/docs/jest-object#jestspyonobject-methodname)
|
||||
The more challenging part are mocks, which can be used for functions or even dependencies.
|
||||
|
|
|
|||
|
|
@ -544,7 +544,7 @@ and the basic idea is that the cost of a test includes:
|
|||
There are cases where the behavior you are testing is not worth the time spent
|
||||
running the full application, for example, if you are testing styling, animation,
|
||||
edge cases or small actions that don't involve the backend,
|
||||
you should write an integration test using Jasmine.
|
||||
you should write an integration test using [Frontend integration tests](https://gitlab.com/gitlab-org/gitlab/-/blob/master/spec/frontend_integration/README.md).
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ compliance report is shown properly.
|
|||
|
||||

|
||||
|
||||
You can click on a license to see more information.
|
||||
You can select a license to see more information.
|
||||
|
||||
When GitLab detects a **Denied** license, you can view it in the [license list](#license-list).
|
||||
|
||||
|
|
@ -710,15 +710,16 @@ instance's administrator can manually update it with a [Rake task](../../../rake
|
|||
The License list allows you to see your project's licenses and key
|
||||
details about them.
|
||||
|
||||
In order for the licenses to appear under the license list, the following
|
||||
For the licenses to appear under the license list, the following
|
||||
requirements must be met:
|
||||
|
||||
1. The License Compliance CI job must be [configured](#configuration) for your project.
|
||||
1. Your project must use at least one of the
|
||||
[supported languages and package managers](#supported-languages-and-package-managers).
|
||||
|
||||
Once everything is set, navigate to **Security & Compliance > License Compliance**
|
||||
in your project's sidebar, and the licenses are displayed, where:
|
||||
When everything is configured, on the left sidebar, select **Security & Compliance > License Compliance**.
|
||||
|
||||
The licenses are displayed, where:
|
||||
|
||||
- **Name:** The name of the license.
|
||||
- **Component:** The components which have this license.
|
||||
|
|
@ -758,8 +759,10 @@ license.
|
|||
|
||||
You can enable `License-Check` one of two ways:
|
||||
|
||||
1. Navigate to your project's **Settings > General** and expand **Merge request approvals**.
|
||||
1. Click **Enable** or **Edit**.
|
||||
1. On the top bar, select **Menu > Projects** and find your project.
|
||||
1. On the left sidebar, select **Settings > General**.
|
||||
1. Expand **Merge request approvals**.
|
||||
1. Select **Enable** or **Edit**.
|
||||
1. Add or change the **Rule name** to `License-Check` (case sensitive).
|
||||
|
||||

|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ module API
|
|||
module Entities
|
||||
class GlobalNotificationSetting < Entities::NotificationSetting
|
||||
expose :notification_email do |notification_setting, options|
|
||||
notification_setting.user.notification_email_or_default
|
||||
notification_setting.user.notification_email
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ module API
|
|||
expose :two_factor_enabled?, as: :two_factor_enabled
|
||||
expose :external
|
||||
expose :private_profile
|
||||
expose :commit_email_or_default, as: :commit_email
|
||||
expose :commit_email
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ module Gitlab
|
|||
mail(
|
||||
template_path: 'unconfirm_mailer',
|
||||
template_name: 'unconfirm_notification_email',
|
||||
to: @user.notification_email_or_default,
|
||||
to: @user.notification_email,
|
||||
subject: subject('GitLab email verification request')
|
||||
)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ module Gitlab
|
|||
def variables
|
||||
processable.simple_variables.tap do |variables|
|
||||
# Adding persisted environment variables
|
||||
if Feature.enabled?(:env_vars_resource_group) && processable.persisted_environment.present?
|
||||
if processable.persisted_environment.present?
|
||||
variables.concat(processable.persisted_environment.predefined_variables)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -31,8 +31,3 @@ deploy:
|
|||
- build
|
||||
environment:
|
||||
name: $TF_STATE_NAME
|
||||
|
||||
cleanup:
|
||||
extends: .terraform:destroy
|
||||
dependencies:
|
||||
- deploy
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ module Gitlab
|
|||
attr_reader :username, :name, :email, :gl_id, :timezone
|
||||
|
||||
def self.from_gitlab(gitlab_user)
|
||||
new(gitlab_user.username, gitlab_user.name, gitlab_user.commit_email_or_default, Gitlab::GlId.gl_id(gitlab_user), gitlab_user.timezone)
|
||||
new(gitlab_user.username, gitlab_user.name, gitlab_user.commit_email, Gitlab::GlId.gl_id(gitlab_user), gitlab_user.timezone)
|
||||
end
|
||||
|
||||
def self.from_gitaly(gitaly_user)
|
||||
|
|
|
|||
|
|
@ -62,28 +62,6 @@ module Gitlab
|
|||
consume_refs_response(response) { |name| Gitlab::Git.tag_name(name) }
|
||||
end
|
||||
|
||||
def list_new_blobs(newrev, limit = 0, dynamic_timeout: nil)
|
||||
request = Gitaly::ListNewBlobsRequest.new(
|
||||
repository: @gitaly_repo,
|
||||
commit_id: newrev,
|
||||
limit: limit
|
||||
)
|
||||
|
||||
timeout =
|
||||
if dynamic_timeout
|
||||
[dynamic_timeout, GitalyClient.medium_timeout].min
|
||||
else
|
||||
GitalyClient.medium_timeout
|
||||
end
|
||||
|
||||
response = GitalyClient.call(@storage, :ref_service, :list_new_blobs, request, timeout: timeout)
|
||||
response.flat_map do |msg|
|
||||
# Returns an Array of Gitaly::NewBlobObject objects
|
||||
# Available methods are: #size, #oid and #path
|
||||
msg.new_blob_objects
|
||||
end
|
||||
end
|
||||
|
||||
def count_tag_names
|
||||
tag_names.count
|
||||
end
|
||||
|
|
|
|||
|
|
@ -22337,6 +22337,9 @@ msgstr ""
|
|||
msgid "NetworkPolicies|Network Policies can be used to limit which network traffic is allowed between containers inside the cluster."
|
||||
msgstr ""
|
||||
|
||||
msgid "NetworkPolicies|Network policy can be created after the environment is loaded successfully."
|
||||
msgstr ""
|
||||
|
||||
msgid "NetworkPolicies|Network traffic"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
|
|
@ -220,7 +220,6 @@
|
|||
"eslint": "7.32.0",
|
||||
"eslint-import-resolver-jest": "3.0.0",
|
||||
"eslint-import-resolver-webpack": "0.13.1",
|
||||
"eslint-plugin-jasmine": "4.1.2",
|
||||
"eslint-plugin-no-jquery": "2.6.0",
|
||||
"gettext-extractor": "^3.5.3",
|
||||
"gettext-extractor-vue": "^5.0.0",
|
||||
|
|
@ -228,9 +227,6 @@
|
|||
"istanbul-lib-coverage": "^3.0.0",
|
||||
"istanbul-lib-report": "^3.0.0",
|
||||
"istanbul-reports": "^3.0.0",
|
||||
"jasmine-core": "^2.9.0",
|
||||
"jasmine-diff": "^0.1.3",
|
||||
"jasmine-jquery": "^2.1.1",
|
||||
"jest": "^26.5.2",
|
||||
"jest-canvas-mock": "^2.1.2",
|
||||
"jest-environment-jsdom": "^26.5.2",
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ RSpec.describe Admin::UsersController do
|
|||
|
||||
it 'sends the user a rejection email' do
|
||||
expect_next_instance_of(NotificationService) do |notification|
|
||||
allow(notification).to receive(:user_admin_rejection).with(user.name, user.notification_email_or_default)
|
||||
allow(notification).to receive(:user_admin_rejection).with(user.name, user.notification_email)
|
||||
end
|
||||
|
||||
subject
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ RSpec.describe 'Groups > Members > Request access' do
|
|||
it 'user can request access to a group' do
|
||||
perform_enqueued_jobs { click_link 'Request Access' }
|
||||
|
||||
expect(ActionMailer::Base.deliveries.last.to).to eq [owner.notification_email_or_default]
|
||||
expect(ActionMailer::Base.deliveries.last.to).to eq [owner.notification_email]
|
||||
expect(ActionMailer::Base.deliveries.last.subject).to match "Request to join the #{group.name} group"
|
||||
|
||||
expect(group.requesters.exists?(user_id: user)).to be_truthy
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ RSpec.describe 'Issues csv', :js do
|
|||
request_csv
|
||||
|
||||
expect(page).to have_content 'CSV export has started'
|
||||
expect(page).to have_content "emailed to #{user.notification_email_or_default}"
|
||||
expect(page).to have_content "emailed to #{user.notification_email}"
|
||||
end
|
||||
|
||||
it 'includes a csv attachment', :sidekiq_might_not_need_inline do
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ RSpec.describe 'Projects > Members > User requests access', :js do
|
|||
it 'user can request access to a project' do
|
||||
perform_enqueued_jobs { click_link 'Request Access' }
|
||||
|
||||
expect(ActionMailer::Base.deliveries.last.to).to eq [maintainer.notification_email_or_default]
|
||||
expect(ActionMailer::Base.deliveries.last.to).to eq [maintainer.notification_email]
|
||||
expect(ActionMailer::Base.deliveries.last.subject).to eq "Request to join the #{project.full_name} project"
|
||||
|
||||
expect(project.requesters.exists?(user_id: user)).to be_truthy
|
||||
|
|
|
|||
|
|
@ -310,7 +310,7 @@ RSpec.describe IssuesHelper do
|
|||
can_bulk_update: 'true',
|
||||
can_edit: 'true',
|
||||
can_import_issues: 'true',
|
||||
email: current_user&.notification_email_or_default,
|
||||
email: current_user&.notification_email,
|
||||
emails_help_page_path: help_page_path('development/emails', anchor: 'email-namespace'),
|
||||
empty_state_svg_path: '#',
|
||||
export_csv_path: export_csv_project_issues_path(project),
|
||||
|
|
|
|||
|
|
@ -133,16 +133,6 @@ RSpec.describe Gitlab::GitalyClient::RefService do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#list_new_blobs' do
|
||||
it 'raises DeadlineExceeded when timeout is too small' do
|
||||
newrev = '54fcc214b94e78d7a41a9a8fe6d87a5e59500e51'
|
||||
|
||||
expect do
|
||||
client.list_new_blobs(newrev, dynamic_timeout: 0.001)
|
||||
end.to raise_error(GRPC::DeadlineExceeded)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#local_branches' do
|
||||
it 'sends a find_local_branches message' do
|
||||
expect_any_instance_of(Gitaly::RefService::Stub)
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ RSpec.describe Emails::InProductMarketing do
|
|||
|
||||
it 'sends to the right user with a link to unsubscribe' do
|
||||
aggregate_failures do
|
||||
expect(subject).to deliver_to(user.notification_email_or_default)
|
||||
expect(subject).to deliver_to(user.notification_email)
|
||||
expect(subject).to have_body_text(profile_notifications_url)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ RSpec.describe Notify do
|
|||
it 'is sent to the assignee as the author' do
|
||||
aggregate_failures do
|
||||
expect_sender(current_user)
|
||||
expect(subject).to deliver_to(recipient.notification_email_or_default)
|
||||
expect(subject).to deliver_to(recipient.notification_email)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -710,7 +710,7 @@ RSpec.describe Notify do
|
|||
|
||||
it 'contains all the useful information' do
|
||||
to_emails = subject.header[:to].addrs.map(&:address)
|
||||
expect(to_emails).to eq([recipient.notification_email_or_default])
|
||||
expect(to_emails).to eq([recipient.notification_email])
|
||||
|
||||
is_expected.to have_subject "Request to join the #{project.full_name} project"
|
||||
is_expected.to have_body_text project.full_name
|
||||
|
|
@ -1047,7 +1047,7 @@ RSpec.describe Notify do
|
|||
it 'is sent to the given recipient as the author' do
|
||||
aggregate_failures do
|
||||
expect_sender(note_author)
|
||||
expect(subject).to deliver_to(recipient.notification_email_or_default)
|
||||
expect(subject).to deliver_to(recipient.notification_email)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -1204,7 +1204,7 @@ RSpec.describe Notify do
|
|||
it 'is sent to the given recipient as the author' do
|
||||
aggregate_failures do
|
||||
expect_sender(note_author)
|
||||
expect(subject).to deliver_to(recipient.notification_email_or_default)
|
||||
expect(subject).to deliver_to(recipient.notification_email)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -1341,7 +1341,7 @@ RSpec.describe Notify do
|
|||
|
||||
it 'contains all the useful information' do
|
||||
to_emails = subject.header[:to].addrs.map(&:address)
|
||||
expect(to_emails).to eq([recipient.notification_email_or_default])
|
||||
expect(to_emails).to eq([recipient.notification_email])
|
||||
|
||||
is_expected.to have_subject "Request to join the #{group.name} group"
|
||||
is_expected.to have_body_text group.name
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ RSpec.describe Integrations::PipelinesEmail, :mailer do
|
|||
end
|
||||
|
||||
it 'sends email' do
|
||||
emails = receivers.map { |r| double(notification_email_or_default: r) }
|
||||
emails = receivers.map { |r| double(notification_email: r) }
|
||||
|
||||
should_only_email(*emails, kind: :bcc)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1826,7 +1826,7 @@ RSpec.describe Repository do
|
|||
|
||||
expect(merge_commit.message).to eq('Custom message')
|
||||
expect(merge_commit.author_name).to eq(user.name)
|
||||
expect(merge_commit.author_email).to eq(user.commit_email_or_default)
|
||||
expect(merge_commit.author_email).to eq(user.commit_email)
|
||||
expect(repository.blob_at(merge_commit.id, 'files/ruby/feature.rb')).to be_present
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -435,12 +435,12 @@ RSpec.describe User do
|
|||
subject { create(:user).tap { |user| user.emails << build(:email, email: email_value, confirmed_at: Time.current) } }
|
||||
end
|
||||
|
||||
describe '#commit_email_or_default' do
|
||||
describe '#commit_email' do
|
||||
subject(:user) { create(:user) }
|
||||
|
||||
it 'defaults to the primary email' do
|
||||
expect(user.email).to be_present
|
||||
expect(user.commit_email_or_default).to eq(user.email)
|
||||
expect(user.commit_email).to eq(user.email)
|
||||
end
|
||||
|
||||
it 'defaults to the primary email when the column in the database is null' do
|
||||
|
|
@ -448,18 +448,14 @@ RSpec.describe User do
|
|||
|
||||
found_user = described_class.find_by(id: user.id)
|
||||
|
||||
expect(found_user.commit_email_or_default).to eq(user.email)
|
||||
expect(found_user.commit_email).to eq(user.email)
|
||||
end
|
||||
|
||||
it 'returns the private commit email when commit_email has _private' do
|
||||
user.update_column(:commit_email, Gitlab::PrivateCommitEmail::TOKEN)
|
||||
|
||||
expect(user.commit_email_or_default).to eq(user.private_commit_email)
|
||||
expect(user.commit_email).to eq(user.private_commit_email)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#commit_email=' do
|
||||
subject(:user) { create(:user) }
|
||||
|
||||
it 'can be set to a confirmed email' do
|
||||
confirmed = create(:email, :confirmed, user: user)
|
||||
|
|
@ -1250,57 +1246,53 @@ RSpec.describe User do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'when changing email' do
|
||||
let(:user) { create(:user) }
|
||||
let(:new_email) { 'new-email@example.com' }
|
||||
describe '#update_notification_email' do
|
||||
# Regression: https://gitlab.com/gitlab-org/gitlab-foss/issues/22846
|
||||
context 'when changing :email' do
|
||||
let(:user) { create(:user) }
|
||||
let(:new_email) { 'new-email@example.com' }
|
||||
|
||||
context 'if notification_email was nil' do
|
||||
it 'sets :unconfirmed_email' do
|
||||
expect do
|
||||
user.tap { |u| u.update!(email: new_email) }.reload
|
||||
end.to change(user, :unconfirmed_email).to(new_email)
|
||||
end
|
||||
|
||||
it 'does not change notification_email or notification_email_or_default before email is confirmed' do
|
||||
expect do
|
||||
user.tap { |u| u.update!(email: new_email) }.reload
|
||||
end.not_to change(user, :notification_email_or_default)
|
||||
|
||||
expect(user.notification_email).to be_nil
|
||||
end
|
||||
|
||||
it 'updates notification_email_or_default to the new email once confirmed' do
|
||||
user.update!(email: new_email)
|
||||
|
||||
expect do
|
||||
user.tap(&:confirm).reload
|
||||
end.to change(user, :notification_email_or_default).to eq(new_email)
|
||||
|
||||
expect(user.notification_email).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'when notification_email is set to a secondary email' do
|
||||
let!(:email_attrs) { attributes_for(:email, :confirmed, user: user) }
|
||||
let(:secondary) { create(:email, :confirmed, email: 'secondary@example.com', user: user) }
|
||||
|
||||
before do
|
||||
user.emails.create!(email_attrs)
|
||||
user.tap { |u| u.update!(notification_email: email_attrs[:email]) }.reload
|
||||
end
|
||||
|
||||
it 'does not change notification_email to email before email is confirmed' do
|
||||
it 'does not change :notification_email' do
|
||||
expect do
|
||||
user.tap { |u| u.update!(email: new_email) }.reload
|
||||
end.not_to change(user, :notification_email)
|
||||
end
|
||||
|
||||
it 'does not change notification_email to email once confirmed' do
|
||||
it 'updates :notification_email to the new email once confirmed' do
|
||||
user.update!(email: new_email)
|
||||
|
||||
expect do
|
||||
user.tap(&:confirm).reload
|
||||
end.not_to change(user, :notification_email)
|
||||
end.to change(user, :notification_email).to eq(new_email)
|
||||
end
|
||||
|
||||
context 'and :notification_email is set to a secondary email' do
|
||||
let!(:email_attrs) { attributes_for(:email, :confirmed, user: user) }
|
||||
let(:secondary) { create(:email, :confirmed, email: 'secondary@example.com', user: user) }
|
||||
|
||||
before do
|
||||
user.emails.create!(email_attrs)
|
||||
user.tap { |u| u.update!(notification_email: email_attrs[:email]) }.reload
|
||||
end
|
||||
|
||||
it 'does not change :notification_email to :email' do
|
||||
expect do
|
||||
user.tap { |u| u.update!(email: new_email) }.reload
|
||||
end.not_to change(user, :notification_email)
|
||||
end
|
||||
|
||||
it 'does not change :notification_email to :email once confirmed' do
|
||||
user.update!(email: new_email)
|
||||
|
||||
expect do
|
||||
user.tap(&:confirm).reload
|
||||
end.not_to change(user, :notification_email)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1886,7 +1878,6 @@ RSpec.describe User do
|
|||
end
|
||||
it 'does not send deactivated user an email' do
|
||||
expect(NotificationService).not_to receive(:new)
|
||||
|
||||
user.deactivate
|
||||
end
|
||||
end
|
||||
|
|
@ -1894,7 +1885,7 @@ RSpec.describe User do
|
|||
context "when user deactivation emails are enabled" do
|
||||
it 'sends deactivated user an email' do
|
||||
expect_next_instance_of(NotificationService) do |notification|
|
||||
allow(notification).to receive(:user_deactivated).with(user.name, user.notification_email_or_default)
|
||||
allow(notification).to receive(:user_deactivated).with(user.name, user.notification_email)
|
||||
end
|
||||
|
||||
user.deactivate
|
||||
|
|
@ -3093,15 +3084,15 @@ RSpec.describe User do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#notification_email_or_default' do
|
||||
describe '#notification_email' do
|
||||
let(:email) { 'gonzo@muppets.com' }
|
||||
|
||||
context 'when the column in the database is null' do
|
||||
subject { create(:user, email: email, notification_email: nil) }
|
||||
|
||||
it 'defaults to the primary email' do
|
||||
expect(subject.notification_email).to be nil
|
||||
expect(subject.notification_email_or_default).to eq(email)
|
||||
expect(subject.read_attribute(:notification_email)).to be nil
|
||||
expect(subject.notification_email).to eq(email)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -5344,7 +5335,7 @@ RSpec.describe User do
|
|||
let(:group) { nil }
|
||||
|
||||
it 'returns global notification email' do
|
||||
is_expected.to eq(user.notification_email_or_default)
|
||||
is_expected.to eq(user.notification_email)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -5352,7 +5343,7 @@ RSpec.describe User do
|
|||
it 'returns global notification email' do
|
||||
create(:notification_setting, user: user, source: group, notification_email: '')
|
||||
|
||||
is_expected.to eq(user.notification_email_or_default)
|
||||
is_expected.to eq(user.notification_email)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -6141,7 +6132,7 @@ RSpec.describe User do
|
|||
it 'does nothing' do
|
||||
expect(subject).not_to receive(:save)
|
||||
subject.unset_secondary_emails_matching_deleted_email!(deleted_email)
|
||||
expect(subject.commit_email).to eq commit_email
|
||||
expect(subject.read_attribute(:commit_email)).to eq commit_email
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -6151,7 +6142,7 @@ RSpec.describe User do
|
|||
it 'un-sets the secondary email' do
|
||||
expect(subject).to receive(:save)
|
||||
subject.unset_secondary_emails_matching_deleted_email!(deleted_email)
|
||||
expect(subject.commit_email).to be nil
|
||||
expect(subject.read_attribute(:commit_email)).to be nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ RSpec.describe API::NotificationSettings do
|
|||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response).to be_a Hash
|
||||
expect(json_response['notification_email']).to eq(user.notification_email_or_default)
|
||||
expect(json_response['notification_email']).to eq(user.notification_email)
|
||||
expect(json_response['level']).to eq(user.global_notification_setting.level)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1202,7 +1202,7 @@ RSpec.describe API::Users do
|
|||
|
||||
it 'updates user with a new email' do
|
||||
old_email = user.email
|
||||
old_notification_email = user.notification_email_or_default
|
||||
old_notification_email = user.notification_email
|
||||
put api("/users/#{user.id}", admin), params: { email: 'new@email.com' }
|
||||
|
||||
user.reload
|
||||
|
|
@ -1210,7 +1210,7 @@ RSpec.describe API::Users do
|
|||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(user).to be_confirmed
|
||||
expect(user.email).to eq(old_email)
|
||||
expect(user.notification_email_or_default).to eq(old_notification_email)
|
||||
expect(user.notification_email).to eq(old_notification_email)
|
||||
expect(user.unconfirmed_email).to eq('new@email.com')
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1041,22 +1041,6 @@ RSpec.describe Ci::CreatePipelineService do
|
|||
|
||||
expect(execute_service.payload).to be_created_successfully
|
||||
end
|
||||
|
||||
context 'when the env_vars_resource_group feature flag is disabled' do
|
||||
before do
|
||||
stub_feature_flags(env_vars_resource_group: false)
|
||||
end
|
||||
|
||||
it 'does not create a resource group because its key contains an invalid character' do
|
||||
result = execute_service.payload
|
||||
deploy_job = result.builds.find_by_name!(:review_app)
|
||||
stop_job = result.builds.find_by_name!(:stop_review_app)
|
||||
expect(result).to be_persisted
|
||||
expect(deploy_job.resource_group).to be_nil
|
||||
expect(stop_job.resource_group).to be_nil
|
||||
expect(project.resource_groups.count).to eq(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with timeout' do
|
||||
|
|
|
|||
|
|
@ -2623,7 +2623,7 @@ RSpec.describe NotificationService, :mailer do
|
|||
let_it_be(:user) { create(:user) }
|
||||
|
||||
it 'sends the user an email' do
|
||||
notification.user_deactivated(user.name, user.notification_email_or_default)
|
||||
notification.user_deactivated(user.name, user.notification_email)
|
||||
|
||||
should_only_email(user)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ RSpec.describe Suggestions::ApplyService do
|
|||
author = suggestions.first.note.author
|
||||
|
||||
expect(user.commit_email).not_to eq(user.email)
|
||||
expect(commit.author_email).to eq(author.commit_email_or_default)
|
||||
expect(commit.author_email).to eq(author.commit_email)
|
||||
expect(commit.committer_email).to eq(user.commit_email)
|
||||
expect(commit.author_name).to eq(author.name)
|
||||
expect(commit.committer_name).to eq(user.name)
|
||||
|
|
@ -333,9 +333,9 @@ RSpec.describe Suggestions::ApplyService do
|
|||
end
|
||||
|
||||
it 'created commit by same author and committer' do
|
||||
expect(user.commit_email).to eq(author.commit_email_or_default)
|
||||
expect(user.commit_email).to eq(author.commit_email)
|
||||
expect(author).to eq(user)
|
||||
expect(commit.author_email).to eq(author.commit_email_or_default)
|
||||
expect(commit.author_email).to eq(author.commit_email)
|
||||
expect(commit.committer_email).to eq(user.commit_email)
|
||||
expect(commit.author_name).to eq(author.name)
|
||||
expect(commit.committer_name).to eq(user.name)
|
||||
|
|
@ -350,7 +350,7 @@ RSpec.describe Suggestions::ApplyService do
|
|||
it 'created commit has authors info and commiters info' do
|
||||
expect(user.commit_email).not_to eq(user.email)
|
||||
expect(author).not_to eq(user)
|
||||
expect(commit.author_email).to eq(author.commit_email_or_default)
|
||||
expect(commit.author_email).to eq(author.commit_email)
|
||||
expect(commit.committer_email).to eq(user.commit_email)
|
||||
expect(commit.author_name).to eq(author.name)
|
||||
expect(commit.committer_name).to eq(user.name)
|
||||
|
|
@ -359,7 +359,7 @@ RSpec.describe Suggestions::ApplyService do
|
|||
end
|
||||
|
||||
context 'multiple suggestions' do
|
||||
let(:author_emails) { suggestions.map {|s| s.note.author.commit_email_or_default } }
|
||||
let(:author_emails) { suggestions.map {|s| s.note.author.commit_email } }
|
||||
let(:first_author) { suggestion.note.author }
|
||||
let(:commit) { project.repository.commit }
|
||||
|
||||
|
|
@ -369,8 +369,8 @@ RSpec.describe Suggestions::ApplyService do
|
|||
end
|
||||
|
||||
it 'uses first authors information' do
|
||||
expect(author_emails).to include(first_author.commit_email_or_default).exactly(3)
|
||||
expect(commit.author_email).to eq(first_author.commit_email_or_default)
|
||||
expect(author_emails).to include(first_author.commit_email).exactly(3)
|
||||
expect(commit.author_email).to eq(first_author.commit_email)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ RSpec.describe Users::RejectService do
|
|||
|
||||
it 'emails the user on rejection' do
|
||||
expect_next_instance_of(NotificationService) do |notification|
|
||||
allow(notification).to receive(:user_admin_rejection).with(user.name, user.notification_email_or_default)
|
||||
allow(notification).to receive(:user_admin_rejection).with(user.name, user.notification_email)
|
||||
end
|
||||
|
||||
subject
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
module EmailHelpers
|
||||
def sent_to_user(user, recipients: email_recipients)
|
||||
recipients.count { |to| to == user.notification_email_or_default }
|
||||
recipients.count { |to| to == user.notification_email }
|
||||
end
|
||||
|
||||
def reset_delivered_emails!
|
||||
|
|
@ -45,7 +45,7 @@ module EmailHelpers
|
|||
end
|
||||
|
||||
def find_email_for(user)
|
||||
ActionMailer::Base.deliveries.find { |d| d.to.include?(user.notification_email_or_default) }
|
||||
ActionMailer::Base.deliveries.find { |d| d.to.include?(user.notification_email) }
|
||||
end
|
||||
|
||||
def have_referable_subject(referable, include_project: true, reply: false)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ RSpec.shared_examples 'thread comments for commit and snippet' do |resource_name
|
|||
let(:menu_selector) { "#{dropdown_selector} .dropdown-menu" }
|
||||
let(:submit_selector) { "#{form_selector} .js-comment-submit-button" }
|
||||
let(:close_selector) { "#{form_selector} .btn-comment-and-close" }
|
||||
let(:comments_selector) { '.timeline > .note.timeline-entry' }
|
||||
let(:comments_selector) { '.timeline > .note.timeline-entry:not(.being-posted)' }
|
||||
let(:comment) { 'My comment' }
|
||||
|
||||
it 'clicking "Comment" will post a comment' do
|
||||
|
|
@ -187,7 +187,7 @@ RSpec.shared_examples 'thread comments for issue, epic and merge request' do |re
|
|||
let(:toggle_selector) { "#{dropdown_selector} .dropdown-toggle-split" }
|
||||
let(:menu_selector) { "#{dropdown_selector} .dropdown-menu" }
|
||||
let(:close_selector) { "#{form_selector} .btn-comment-and-close" }
|
||||
let(:comments_selector) { '.timeline > .note.timeline-entry' }
|
||||
let(:comments_selector) { '.timeline > .note.timeline-entry:not(.being-posted)' }
|
||||
let(:comment) { 'My comment' }
|
||||
|
||||
it 'clicking "Comment" will post a comment' do
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
RSpec.shared_examples 'a multiple recipients email' do
|
||||
it 'is sent to the given recipient' do
|
||||
is_expected.to deliver_to recipient.notification_email_or_default
|
||||
is_expected.to deliver_to recipient.notification_email
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ end
|
|||
|
||||
RSpec.shared_examples 'an email sent to a user' do
|
||||
it 'is sent to user\'s global notification email address' do
|
||||
expect(subject).to deliver_to(recipient.notification_email_or_default)
|
||||
expect(subject).to deliver_to(recipient.notification_email)
|
||||
end
|
||||
|
||||
context 'with group notification email' do
|
||||
|
|
@ -227,7 +227,7 @@ RSpec.shared_examples 'a note email' do
|
|||
aggregate_failures do
|
||||
expect(sender.display_name).to eq("#{note_author.name} (@#{note_author.username})")
|
||||
expect(sender.address).to eq(gitlab_sender)
|
||||
expect(subject).to deliver_to(recipient.notification_email_or_default)
|
||||
expect(subject).to deliver_to(recipient.notification_email)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
24
yarn.lock
24
yarn.lock
|
|
@ -4541,7 +4541,7 @@ diff-sequences@^26.5.0:
|
|||
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.5.0.tgz#ef766cf09d43ed40406611f11c6d8d9dd8b2fefd"
|
||||
integrity sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q==
|
||||
|
||||
diff@^3.2.0, diff@^3.4.0:
|
||||
diff@^3.4.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
|
||||
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
|
||||
|
|
@ -5054,11 +5054,6 @@ eslint-plugin-import@^2.22.1:
|
|||
resolve "^1.17.0"
|
||||
tsconfig-paths "^3.9.0"
|
||||
|
||||
eslint-plugin-jasmine@4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-jasmine/-/eslint-plugin-jasmine-4.1.2.tgz#50cc20d603b02b37727f8d174d4b83b9b8ef25a5"
|
||||
integrity sha512-Jr52EBi6Ql5WVDvRCKBID9kRD6/CaObvCWmgHpqobczX2Mzt8/QMu9vpgx6q/O5jyQ9CIGrKaEbPuEfHRf8guw==
|
||||
|
||||
eslint-plugin-jest@^23.8.2:
|
||||
version "23.8.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.8.2.tgz#6f28b41c67ef635f803ebd9e168f6b73858eb8d4"
|
||||
|
|
@ -6909,23 +6904,6 @@ istextorbinary@^2.2.1:
|
|||
editions "^1.3.3"
|
||||
textextensions "2"
|
||||
|
||||
jasmine-core@^2.9.0:
|
||||
version "2.9.0"
|
||||
resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.9.0.tgz#bfbb56defcd30789adec5a3fbba8504233289c72"
|
||||
integrity sha1-v7tW3vzTB4mt7Fo/u6hQQjMonHI=
|
||||
|
||||
jasmine-diff@^0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/jasmine-diff/-/jasmine-diff-0.1.3.tgz#93ccc2dcc41028c5ddd4606558074839f2deeaa8"
|
||||
integrity sha1-k8zC3MQQKMXd1GBlWAdIOfLe6qg=
|
||||
dependencies:
|
||||
diff "^3.2.0"
|
||||
|
||||
jasmine-jquery@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/jasmine-jquery/-/jasmine-jquery-2.1.1.tgz#d4095e646944a26763235769ab018d9f30f0d47b"
|
||||
integrity sha1-1AleZGlEomdjI1dpqwGNnzDw1Hs=
|
||||
|
||||
jed@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/jed/-/jed-1.1.1.tgz#7a549bbd9ffe1585b0cd0a191e203055bee574b4"
|
||||
|
|
|
|||
Loading…
Reference in New Issue