Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2024-08-03 03:11:19 +00:00
parent 7eeb48577d
commit fdecacb306
9 changed files with 62 additions and 13 deletions

View File

@ -206,7 +206,7 @@ export default {
icon: 'user',
token: UserToken,
dataType: 'user',
operators: OPERATORS_IS,
operators: OPERATORS_IS_NOT,
fullPath: this.fullPath,
isProject: true,
recentSuggestionsStorageKey: `${this.fullPath}-merge-requests-recent-tokens-reviewer`,

View File

@ -135,6 +135,9 @@ module Resolvers
argument :milestone_title, GraphQL::Types::String,
required: false,
description: 'Title of the milestone.'
argument :reviewer_username, GraphQL::Types::String,
required: false,
description: 'Username of the reviewer.'
end
validates mutually_exclusive: [:assignee_username, :assignee_wildcard_id]

View File

@ -15,5 +15,9 @@ module CloudConnector
encode_iv: false
validates :token, :expires_at, presence: true
def expired?
expires_at.past?
end
end
end

View File

@ -66,7 +66,7 @@
self-managed: true
gitlab-com: false
available_in: [Ultimate]
documentation_link: https://docs.gitlab.com/ee/ci/runners/configure_runners.html#view-statistics-for-runner-performance
documentation_link: https://docs.gitlab.com/ee/ci/runners/runners_scope.html#view-statistics-for-runner-performance
image_url: https://about.gitlab.com/images/15_8/admin-runners-estimated-queue-wait-time.png
published_at: 2023-01-22
release: 15.8

View File

@ -39726,6 +39726,7 @@ Defines which user roles, users, or groups can merge into a protected branch.
| <a id="mergerequestsresolvernegatedparamsassigneeusernames"></a>`assigneeUsernames` | [`[String!]`](#string) | Usernames of the assignee to exclude. |
| <a id="mergerequestsresolvernegatedparamslabels"></a>`labels` | [`[String!]`](#string) | Array of label names. All resolved merge requests will not have these labels. |
| <a id="mergerequestsresolvernegatedparamsmilestonetitle"></a>`milestoneTitle` | [`String`](#string) | Title of the milestone. |
| <a id="mergerequestsresolvernegatedparamsreviewerusername"></a>`reviewerUsername` | [`String`](#string) | Username of the reviewer. |
### `MonthSelectionInput`

View File

@ -208,11 +208,18 @@ describe('Merge requests list app', () => {
type: 'assignee',
value: { data: ['root'], operator: OPERATOR_IS },
},
{
type: 'reviewer',
value: { data: 'root', operator: OPERATOR_IS },
},
]);
await nextTick();
expect(router.push).toHaveBeenCalledWith({
query: expect.objectContaining({ 'assignee_username[]': ['root'] }),
query: expect.objectContaining({
'assignee_username[]': ['root'],
reviewer_username: 'root',
}),
});
});
@ -224,19 +231,23 @@ describe('Merge requests list app', () => {
type: 'assignee',
value: { data: ['root'], operator: OPERATOR_NOT },
},
{
type: 'reviewer',
value: { data: 'root', operator: OPERATOR_NOT },
},
]);
await nextTick();
expect(getQueryResponseMock).toHaveBeenCalledWith(
expect.objectContaining({
not: { assigneeUsernames: ['root'] },
not: { assigneeUsernames: ['root'], reviewerUsername: 'root' },
}),
);
expect(getCountsQueryResponseMock).toHaveBeenCalledWith(
expect.objectContaining({
not: { assigneeUsernames: ['root'] },
not: { assigneeUsernames: ['root'], reviewerUsername: 'root' },
}),
);
});
@ -249,12 +260,19 @@ describe('Merge requests list app', () => {
type: 'assignee',
value: { data: ['root'], operator: OPERATOR_NOT },
},
{
type: 'reviewer',
value: { data: 'root', operator: OPERATOR_NOT },
},
]);
await nextTick();
expect(router.push).toHaveBeenCalledWith({
query: expect.objectContaining({ 'not[assignee_username][]': ['root'] }),
query: expect.objectContaining({
'not[assignee_username][]': ['root'],
'not[reviewer_username]': 'root',
}),
});
});
});

View File

@ -13,7 +13,7 @@ RSpec.describe Resolvers::MergeRequestsResolver, feature_category: :code_review_
let_it_be(:other_user) { create(:user) }
let_it_be(:common_attrs) { { author: current_user, source_project: project, target_project: project } }
let_it_be(:merge_request_1) { create(:merge_request, :simple, reviewers: create_list(:user, 2), **common_attrs) }
let_it_be(:merge_request_2) { create(:merge_request, :rebased, **common_attrs) }
let_it_be(:merge_request_2) { create(:merge_request, :rebased, reviewers: [current_user], **common_attrs) }
let_it_be(:merge_request_3) { create(:merge_request, :unique_branches, assignees: [current_user], **common_attrs) }
let_it_be(:merge_request_4) { create(:merge_request, :unique_branches, :locked, **common_attrs) }
let_it_be(:merge_request_5) { create(:merge_request, :simple, :locked, **common_attrs) }
@ -402,6 +402,14 @@ RSpec.describe Resolvers::MergeRequestsResolver, feature_category: :code_review_
expect(result).to contain_exactly(merge_request_1, merge_request_2, merge_request_4, merge_request_5, merge_request_6, merge_request_with_milestone)
end
end
context 'with reviewer' do
it do
result = resolve_mr(project, not: { reviewer_username: current_user.username })
expect(result).to contain_exactly(merge_request_1, merge_request_3, merge_request_4, merge_request_5, merge_request_6, merge_request_with_milestone)
end
end
end
describe 'sorting' do

View File

@ -156,6 +156,14 @@ RSpec.describe Resolvers::ProjectMergeRequestsResolver do
expect(result).to contain_exactly(merge_request2)
end
end
context 'with negated reviewer username' do
it do
result = resolve_mr(project, not: { reviewer_username: reviewer.username })
expect(result).to contain_exactly(merge_request2)
end
end
end
def resolve_mr(project, resolver: described_class, user: current_user, **args)

View File

@ -3,19 +3,16 @@
require 'spec_helper'
RSpec.describe CloudConnector::ServiceAccessToken, type: :model, feature_category: :cloud_connector do
describe '.expired', :freeze_time do
let_it_be(:expired_token) { create(:service_access_token, :expired) }
let_it_be(:active_token) { create(:service_access_token, :active) }
let_it_be(:expired_token) { create(:service_access_token, :expired) }
let_it_be(:active_token) { create(:service_access_token, :active) }
describe '.expired', :freeze_time do
it 'selects all expired tokens' do
expect(described_class.expired).to match_array([expired_token])
end
end
describe '.active', :freeze_time do
let_it_be(:expired_token) { create(:service_access_token, :expired) }
let_it_be(:active_token) { create(:service_access_token, :active) }
it 'selects all active tokens' do
expect(described_class.active).to match_array([active_token])
end
@ -42,4 +39,14 @@ RSpec.describe CloudConnector::ServiceAccessToken, type: :model, feature_categor
it { is_expected.to validate_presence_of(:expires_at) }
end
end
describe '#expired?' do
it 'returns false for active token' do
expect(active_token).not_to be_expired
end
it 'returns true for expired token' do
expect(expired_token).to be_expired
end
end
end