Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-05-25 18:08:05 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-05-25 18:08:05 +0300
commit4dc41ac252c0bfefb9bc55a8627262cc76c69d5e (patch)
tree24bd114dee0235c3874d83d57d64abab87b39a3c /spec
parentba9892d3c122a4f437b4b38926fb75848deaf097 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/features/milestone_spec.rb8
-rw-r--r--spec/frontend/issues/list/components/issues_list_app_spec.js29
-rw-r--r--spec/frontend/vue_shared/issuable/show/components/issuable_body_spec.js1
-rw-r--r--spec/frontend/vue_shared/issuable/show/components/issuable_show_root_spec.js3
-rw-r--r--spec/frontend/vue_shared/issuable/show/components/issuable_title_spec.js3
-rw-r--r--spec/frontend/vue_shared/issuable/show/mock_data.js1
-rw-r--r--spec/frontend/work_items/components/work_item_assignees_spec.js42
-rw-r--r--spec/frontend/work_items/pages/work_item_detail_spec.js53
-rw-r--r--spec/graphql/types/ci/runner_type_spec.rb2
-rw-r--r--spec/helpers/issues_helper_spec.rb84
-rw-r--r--spec/helpers/todos_helper_spec.rb16
-rw-r--r--spec/requests/api/graphql/ci/runner_spec.rb4
-rw-r--r--spec/services/packages/go/create_package_service_spec.rb16
-rw-r--r--spec/workers/every_sidekiq_worker_spec.rb1
14 files changed, 239 insertions, 24 deletions
diff --git a/spec/features/milestone_spec.rb b/spec/features/milestone_spec.rb
index b9594293996..33c253363db 100644
--- a/spec/features/milestone_spec.rb
+++ b/spec/features/milestone_spec.rb
@@ -122,8 +122,8 @@ RSpec.describe 'Milestone' do
click_link 'Reopen Milestone'
- expect(page).not_to have_selector('.status-box-closed')
- expect(page).to have_selector('.status-box-open')
+ expect(page).not_to have_selector('.gl-bg-red-500')
+ expect(page).to have_selector('.gl-bg-green-500')
end
end
@@ -133,8 +133,8 @@ RSpec.describe 'Milestone' do
click_link 'Reopen Milestone'
- expect(page).not_to have_selector('.status-box-closed')
- expect(page).to have_selector('.status-box-open')
+ expect(page).not_to have_selector('.gl-bg-red-500')
+ expect(page).to have_selector('.gl-bg-green-500')
end
end
end
diff --git a/spec/frontend/issues/list/components/issues_list_app_spec.js b/spec/frontend/issues/list/components/issues_list_app_spec.js
index 4780851e9c1..14aac5ea562 100644
--- a/spec/frontend/issues/list/components/issues_list_app_spec.js
+++ b/spec/frontend/issues/list/components/issues_list_app_spec.js
@@ -36,9 +36,11 @@ import {
TOKEN_TYPE_ASSIGNEE,
TOKEN_TYPE_AUTHOR,
TOKEN_TYPE_CONFIDENTIAL,
+ TOKEN_TYPE_CONTACT,
TOKEN_TYPE_LABEL,
TOKEN_TYPE_MILESTONE,
TOKEN_TYPE_MY_REACTION,
+ TOKEN_TYPE_ORGANIZATION,
TOKEN_TYPE_RELEASE,
TOKEN_TYPE_TYPE,
urlSortParams,
@@ -65,6 +67,8 @@ describe('CE IssuesListApp component', () => {
autocompleteAwardEmojisPath: 'autocomplete/award/emojis/path',
calendarPath: 'calendar/path',
canBulkUpdate: false,
+ canReadCrmContact: false,
+ canReadCrmOrganization: false,
emptyStateSvgPath: 'empty-state.svg',
exportCsvPath: 'export/csv/path',
fullPath: 'path/to/project',
@@ -589,6 +593,21 @@ describe('CE IssuesListApp component', () => {
});
});
+ describe('when user does not have CRM enabled', () => {
+ beforeEach(() => {
+ wrapper = mountComponent({
+ provide: { canReadCrmContact: false, canReadCrmOrganization: false },
+ });
+ });
+
+ it('does not render Contact or Organization tokens', () => {
+ expect(findIssuableList().props('searchTokens')).not.toMatchObject([
+ { type: TOKEN_TYPE_CONTACT },
+ { type: TOKEN_TYPE_ORGANIZATION },
+ ]);
+ });
+ });
+
describe('when all tokens are available', () => {
const originalGon = window.gon;
@@ -601,7 +620,13 @@ describe('CE IssuesListApp component', () => {
current_user_avatar_url: mockCurrentUser.avatar_url,
};
- wrapper = mountComponent({ provide: { isSignedIn: true } });
+ wrapper = mountComponent({
+ provide: {
+ canReadCrmContact: true,
+ canReadCrmOrganization: true,
+ isSignedIn: true,
+ },
+ });
});
afterEach(() => {
@@ -617,9 +642,11 @@ describe('CE IssuesListApp component', () => {
{ type: TOKEN_TYPE_ASSIGNEE, preloadedAuthors },
{ type: TOKEN_TYPE_AUTHOR, preloadedAuthors },
{ type: TOKEN_TYPE_CONFIDENTIAL },
+ { type: TOKEN_TYPE_CONTACT },
{ type: TOKEN_TYPE_LABEL },
{ type: TOKEN_TYPE_MILESTONE },
{ type: TOKEN_TYPE_MY_REACTION },
+ { type: TOKEN_TYPE_ORGANIZATION },
{ type: TOKEN_TYPE_RELEASE },
{ type: TOKEN_TYPE_TYPE },
]);
diff --git a/spec/frontend/vue_shared/issuable/show/components/issuable_body_spec.js b/spec/frontend/vue_shared/issuable/show/components/issuable_body_spec.js
index 1a93838b03f..7c582360637 100644
--- a/spec/frontend/vue_shared/issuable/show/components/issuable_body_spec.js
+++ b/spec/frontend/vue_shared/issuable/show/components/issuable_body_spec.js
@@ -159,7 +159,6 @@ describe('IssuableBody', () => {
expect(titleEl.exists()).toBe(true);
expect(titleEl.props()).toMatchObject({
issuable: issuableBodyProps.issuable,
- statusBadgeClass: issuableBodyProps.statusBadgeClass,
statusIcon: issuableBodyProps.statusIcon,
enableEdit: issuableBodyProps.enableEdit,
});
diff --git a/spec/frontend/vue_shared/issuable/show/components/issuable_show_root_spec.js b/spec/frontend/vue_shared/issuable/show/components/issuable_show_root_spec.js
index 8b027f990a2..f56064ed8e1 100644
--- a/spec/frontend/vue_shared/issuable/show/components/issuable_show_root_spec.js
+++ b/spec/frontend/vue_shared/issuable/show/components/issuable_show_root_spec.js
@@ -47,7 +47,6 @@ describe('IssuableShowRoot', () => {
describe('template', () => {
const {
- statusBadgeClass,
statusIcon,
statusIconClass,
enableEdit,
@@ -69,7 +68,6 @@ describe('IssuableShowRoot', () => {
expect(issuableHeader.exists()).toBe(true);
expect(issuableHeader.props()).toMatchObject({
issuableState: state,
- statusBadgeClass,
statusIcon,
statusIconClass,
blocked,
@@ -91,7 +89,6 @@ describe('IssuableShowRoot', () => {
expect(issuableBody.exists()).toBe(true);
expect(issuableBody.props()).toMatchObject({
issuable: mockIssuable,
- statusBadgeClass,
statusIcon,
enableEdit,
enableAutocomplete,
diff --git a/spec/frontend/vue_shared/issuable/show/components/issuable_title_spec.js b/spec/frontend/vue_shared/issuable/show/components/issuable_title_spec.js
index 2e418ed3041..75e7e6ce8f8 100644
--- a/spec/frontend/vue_shared/issuable/show/components/issuable_title_spec.js
+++ b/spec/frontend/vue_shared/issuable/show/components/issuable_title_spec.js
@@ -98,9 +98,6 @@ describe('IssuableTitle', () => {
expect(stickyHeaderEl.exists()).toBe(true);
expect(stickyHeaderEl.findComponent(GlBadge).props('variant')).toBe('success');
- expect(stickyHeaderEl.findComponent(GlBadge).classes()).toContain(
- mockIssuableShowProps.statusBadgeClass,
- );
expect(stickyHeaderEl.findComponent(GlIcon).props('name')).toBe(
issuableTitleProps.statusIcon,
);
diff --git a/spec/frontend/vue_shared/issuable/show/mock_data.js b/spec/frontend/vue_shared/issuable/show/mock_data.js
index 32bb9edfe08..5ec205a2d5c 100644
--- a/spec/frontend/vue_shared/issuable/show/mock_data.js
+++ b/spec/frontend/vue_shared/issuable/show/mock_data.js
@@ -36,7 +36,6 @@ export const mockIssuableShowProps = {
enableTaskList: true,
enableEdit: true,
showFieldTitle: false,
- statusBadgeClass: 'issuable-status-badge-open',
statusIcon: 'issues',
statusIconClass: 'gl-sm-display-none',
taskCompletionStatus: {
diff --git a/spec/frontend/work_items/components/work_item_assignees_spec.js b/spec/frontend/work_items/components/work_item_assignees_spec.js
new file mode 100644
index 00000000000..58aaa2ef49c
--- /dev/null
+++ b/spec/frontend/work_items/components/work_item_assignees_spec.js
@@ -0,0 +1,42 @@
+import { shallowMount } from '@vue/test-utils';
+import { GlLink } from '@gitlab/ui';
+import WorkItemAssignees from '~/work_items/components/work_item_assignees.vue';
+
+const mockAssignees = [
+ {
+ __typename: 'UserCore',
+ id: 'gid://gitlab/User/1',
+ avatarUrl: '',
+ webUrl: '',
+ name: 'John Doe',
+ username: 'doe_I',
+ },
+ {
+ __typename: 'UserCore',
+ id: 'gid://gitlab/User/2',
+ avatarUrl: '',
+ webUrl: '',
+ name: 'Marcus Rutherford',
+ username: 'ruthfull',
+ },
+];
+
+describe('WorkItemAssignees component', () => {
+ let wrapper;
+
+ const findAssigneeLinks = () => wrapper.findAllComponents(GlLink);
+
+ const createComponent = () => {
+ wrapper = shallowMount(WorkItemAssignees, {
+ propsData: {
+ assignees: mockAssignees,
+ },
+ });
+ };
+
+ it('should pass the correct data-user-id attribute', () => {
+ createComponent();
+
+ expect(findAssigneeLinks().at(0).attributes('data-user-id')).toBe('1');
+ });
+});
diff --git a/spec/frontend/work_items/pages/work_item_detail_spec.js b/spec/frontend/work_items/pages/work_item_detail_spec.js
index 9f87655175c..fa992750883 100644
--- a/spec/frontend/work_items/pages/work_item_detail_spec.js
+++ b/spec/frontend/work_items/pages/work_item_detail_spec.js
@@ -7,9 +7,11 @@ import waitForPromises from 'helpers/wait_for_promises';
import WorkItemDetail from '~/work_items/components/work_item_detail.vue';
import WorkItemState from '~/work_items/components/work_item_state.vue';
import WorkItemTitle from '~/work_items/components/work_item_title.vue';
+import WorkItemAssignees from '~/work_items/components/work_item_assignees.vue';
import { i18n } from '~/work_items/constants';
import workItemQuery from '~/work_items/graphql/work_item.query.graphql';
import workItemTitleSubscription from '~/work_items/graphql/work_item_title.subscription.graphql';
+import { temporaryConfig } from '~/work_items/graphql/provider';
import { workItemTitleSubscriptionResponse, workItemQueryResponse } from '../mock_data';
describe('WorkItemDetail component', () => {
@@ -24,18 +26,32 @@ describe('WorkItemDetail component', () => {
const findSkeleton = () => wrapper.findComponent(GlSkeletonLoader);
const findWorkItemTitle = () => wrapper.findComponent(WorkItemTitle);
const findWorkItemState = () => wrapper.findComponent(WorkItemState);
+ const findWorkItemAssignees = () => wrapper.findComponent(WorkItemAssignees);
const createComponent = ({
workItemId = workItemQueryResponse.data.workItem.id,
handler = successHandler,
subscriptionHandler = initialSubscriptionHandler,
+ assigneesEnabled = false,
+ includeAssigneesWidget = false,
} = {}) => {
wrapper = shallowMount(WorkItemDetail, {
- apolloProvider: createMockApollo([
- [workItemQuery, handler],
- [workItemTitleSubscription, subscriptionHandler],
- ]),
+ apolloProvider: createMockApollo(
+ [
+ [workItemQuery, handler],
+ [workItemTitleSubscription, subscriptionHandler],
+ ],
+ {},
+ {
+ typePolicies: includeAssigneesWidget ? temporaryConfig.cacheConfig.typePolicies : {},
+ },
+ ),
propsData: { workItemId },
+ provide: {
+ glFeatures: {
+ workItemAssignees: assigneesEnabled,
+ },
+ },
});
};
@@ -118,4 +134,33 @@ describe('WorkItemDetail component', () => {
expect(wrapper.emitted('workItemUpdated')).toEqual([[], []]);
});
+
+ describe('when assignees feature flag is enabled', () => {
+ it('renders assignees component when assignees widget is returned from the API', async () => {
+ createComponent({
+ assigneesEnabled: true,
+ includeAssigneesWidget: true,
+ });
+ await waitForPromises();
+
+ expect(findWorkItemAssignees().exists()).toBe(true);
+ });
+
+ it('does not render assignees component when assignees widget is not returned from the API', async () => {
+ createComponent({
+ assigneesEnabled: true,
+ includeAssigneesWidget: false,
+ });
+ await waitForPromises();
+
+ expect(findWorkItemAssignees().exists()).toBe(false);
+ });
+ });
+
+ it('does not render assignees component when assignees feature flag is disabled', async () => {
+ createComponent();
+ await waitForPromises();
+
+ expect(findWorkItemAssignees().exists()).toBe(false);
+ });
});
diff --git a/spec/graphql/types/ci/runner_type_spec.rb b/spec/graphql/types/ci/runner_type_spec.rb
index 26ac7a4da8d..64f27f8e242 100644
--- a/spec/graphql/types/ci/runner_type_spec.rb
+++ b/spec/graphql/types/ci/runner_type_spec.rb
@@ -12,7 +12,7 @@ RSpec.describe GitlabSchema.types['CiRunner'] do
id description created_at contacted_at maximum_timeout access_level active paused status
version short_sha revision locked run_untagged ip_address runner_type tag_list
project_count job_count admin_url edit_admin_url user_permissions executor_name architecture_name platform_name
- maintenance_note groups projects jobs token_expires_at
+ maintenance_note maintenance_note_html groups projects jobs token_expires_at
]
expect(described_class).to include_graphql_fields(*expected_fields)
diff --git a/spec/helpers/issues_helper_spec.rb b/spec/helpers/issues_helper_spec.rb
index 0421c7b7458..b55b4aaf76a 100644
--- a/spec/helpers/issues_helper_spec.rb
+++ b/spec/helpers/issues_helper_spec.rb
@@ -440,6 +440,90 @@ RSpec.describe IssuesHelper do
end
end
+ describe '#status_box_class' do
+ context 'when updated_mr_header feature flag is enabled' do
+ before do
+ stub_feature_flags(updated_mr_header: true)
+ end
+
+ context 'when object is expired' do
+ it 'returns orange background' do
+ milestone = build(:milestone, due_date: Date.today.prev_month)
+ expect(helper.status_box_class(milestone)).to eq('gl-bg-orange-500')
+ end
+ end
+
+ context 'when object is merged' do
+ it 'returns blue background' do
+ merge_request = build(:merge_request, :merged)
+ expect(helper.status_box_class(merge_request)).to eq('badge-info')
+ end
+ end
+
+ context 'when object is closed' do
+ it 'returns red background' do
+ merge_request = build(:merge_request, :closed)
+ expect(helper.status_box_class(merge_request)).to eq('badge-danger')
+ end
+ end
+
+ context 'when object is upcoming' do
+ it 'returns gray background' do
+ milestone = build(:milestone, start_date: Date.today.next_month)
+ expect(helper.status_box_class(milestone)).to eq('gl-bg-gray-500')
+ end
+ end
+
+ context 'when object is opened' do
+ it 'returns green background' do
+ merge_request = build(:merge_request, :opened)
+ expect(helper.status_box_class(merge_request)).to eq('badge-success')
+ end
+ end
+ end
+
+ context 'when updated_mr_header feature flag is disabled' do
+ before do
+ stub_feature_flags(updated_mr_header: false)
+ end
+
+ context 'when object is expired' do
+ it 'returns orange background' do
+ milestone = build(:milestone, due_date: Date.today.prev_month)
+ expect(helper.status_box_class(milestone)).to eq('gl-bg-orange-500')
+ end
+ end
+
+ context 'when object is merged' do
+ it 'returns blue background' do
+ merge_request = build(:merge_request, :merged)
+ expect(helper.status_box_class(merge_request)).to eq('gl-bg-blue-500')
+ end
+ end
+
+ context 'when object is closed' do
+ it 'returns red background' do
+ merge_request = build(:merge_request, :closed)
+ expect(helper.status_box_class(merge_request)).to eq('gl-bg-red-500')
+ end
+ end
+
+ context 'when object is upcoming' do
+ it 'returns gray background' do
+ milestone = build(:milestone, start_date: Date.today.next_month)
+ expect(helper.status_box_class(milestone)).to eq('gl-bg-gray-500')
+ end
+ end
+
+ context 'when object is opened' do
+ it 'returns green background' do
+ merge_request = build(:merge_request, :opened)
+ expect(helper.status_box_class(merge_request)).to eq('gl-bg-green-500')
+ end
+ end
+ end
+ end
+
describe '#issue_hidden?' do
context 'when issue is hidden' do
let_it_be(:banned_user) { build(:user, :banned) }
diff --git a/spec/helpers/todos_helper_spec.rb b/spec/helpers/todos_helper_spec.rb
index 3787864e144..922fb1d7c92 100644
--- a/spec/helpers/todos_helper_spec.rb
+++ b/spec/helpers/todos_helper_spec.rb
@@ -152,7 +152,7 @@ RSpec.describe TodosHelper do
shared_examples 'a rendered state pill' do |attr|
it 'returns expected html' do
aggregate_failures do
- expect(subject).to have_css(".status-box-#{attr[:type]}-#{attr[:state].dasherize}")
+ expect(subject).to have_css(attr[:css])
expect(subject).to have_content(attr[:state].capitalize)
end
end
@@ -167,12 +167,20 @@ RSpec.describe TodosHelper do
it_behaves_like 'no state pill'
+ context 'closed MR' do
+ before do
+ todo.target.update!(state: 'closed')
+ end
+
+ it_behaves_like 'a rendered state pill', css: '.gl-bg-red-500', state: 'closed'
+ end
+
context 'merged MR' do
before do
todo.target.update!(state: 'merged')
end
- it_behaves_like 'a rendered state pill', type: 'mr', state: 'merged'
+ it_behaves_like 'a rendered state pill', css: '.gl-bg-blue-500', state: 'merged'
end
end
@@ -186,7 +194,7 @@ RSpec.describe TodosHelper do
todo.target.update!(state: 'closed')
end
- it_behaves_like 'a rendered state pill', type: 'issue', state: 'closed'
+ it_behaves_like 'a rendered state pill', css: '.gl-bg-blue-500', state: 'closed'
end
end
@@ -200,7 +208,7 @@ RSpec.describe TodosHelper do
todo.target.resolve!
end
- it_behaves_like 'a rendered state pill', type: 'alert', state: 'resolved'
+ it_behaves_like 'a rendered state pill', css: '.gl-bg-blue-500', state: 'resolved'
end
end
end
diff --git a/spec/requests/api/graphql/ci/runner_spec.rb b/spec/requests/api/graphql/ci/runner_spec.rb
index 6fa455cbfca..91008dd57e7 100644
--- a/spec/requests/api/graphql/ci/runner_spec.rb
+++ b/spec/requests/api/graphql/ci/runner_spec.rb
@@ -12,7 +12,7 @@ RSpec.describe 'Query.runner(id)' do
create(:ci_runner, :instance, description: 'Runner 1', contacted_at: 2.hours.ago,
active: true, version: 'adfe156', revision: 'a', locked: true, ip_address: '127.0.0.1', maximum_timeout: 600,
access_level: 0, tag_list: %w[tag1 tag2], run_untagged: true, executor_type: :custom,
- maintenance_note: 'Test maintenance note')
+ maintenance_note: '**Test maintenance note**')
end
let_it_be(:inactive_instance_runner) do
@@ -66,6 +66,8 @@ RSpec.describe 'Query.runner(id)' do
'architectureName' => runner.architecture,
'platformName' => runner.platform,
'maintenanceNote' => runner.maintenance_note,
+ 'maintenanceNoteHtml' =>
+ runner.maintainer_note.present? ? a_string_including('<strong>Test maintenance note</strong>') : '',
'jobCount' => 0,
'jobs' => a_hash_including("count" => 0, "nodes" => [], "pageInfo" => anything),
'projectCount' => nil,
diff --git a/spec/services/packages/go/create_package_service_spec.rb b/spec/services/packages/go/create_package_service_spec.rb
index 5c5fec0aa3a..4ca1119fbaa 100644
--- a/spec/services/packages/go/create_package_service_spec.rb
+++ b/spec/services/packages/go/create_package_service_spec.rb
@@ -35,6 +35,22 @@ RSpec.describe Packages::Go::CreatePackageService do
expect(file.file_sha1).not_to be_nil
expect(file.file_sha256).not_to be_nil
end
+
+ context 'with FIPS mode', :fips_mode do
+ it 'does not generate file_md5' do
+ file_name = "#{version.name}.#{type}"
+ expect(subject.package_files.map { |f| f.file_name }).to include(file_name)
+
+ file = subject.package_files.with_file_name(file_name).first
+ expect(file).not_to be_nil
+ expect(file.file).not_to be_nil
+ expect(file.size).to eq(file.file.size)
+ expect(file.file_name).to eq(file_name)
+ expect(file.file_md5).to be_nil
+ expect(file.file_sha1).not_to be_nil
+ expect(file.file_sha256).not_to be_nil
+ end
+ end
end
describe '#execute' do
diff --git a/spec/workers/every_sidekiq_worker_spec.rb b/spec/workers/every_sidekiq_worker_spec.rb
index 625b4644649..c15d1198ded 100644
--- a/spec/workers/every_sidekiq_worker_spec.rb
+++ b/spec/workers/every_sidekiq_worker_spec.rb
@@ -192,7 +192,6 @@ RSpec.describe 'Every Sidekiq worker' do
'CreateGithubWebhookWorker' => 3,
'CreateNoteDiffFileWorker' => 3,
'CreatePipelineWorker' => 3,
- 'DastSiteValidationWorker' => 3,
'DeleteContainerRepositoryWorker' => 3,
'DeleteDiffFilesWorker' => 3,
'DeleteMergedBranchesWorker' => 3,