summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-03-21 00:16:26 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2023-03-21 00:16:26 +0000
commitf52791a91fe3284747b8c9022ee584911ece8dd3 (patch)
treeddb44445f5171d9971b2e30eca0bdc8f9ea24062
parent40a329556f63d919a68dd80bb37b087d1f0e6336 (diff)
downloadgitlab-ce-f52791a91fe3284747b8c9022ee584911ece8dd3.tar.gz
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.rubocop_todo/rspec/missing_feature_category.yml1
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--data/removals/15_11/15-11-project-export-import-ndjson.yml11
-rw-r--r--db/docs/schema_inconsistencies.yml8
-rw-r--r--db/migrate/20230307132729_create_schema_inconsistencies.rb15
-rw-r--r--db/schema_migrations/202303071327291
-rw-r--r--db/structure.sql32
-rw-r--r--doc/development/database/iterating_tables_in_batches.md52
-rw-r--r--doc/development/merge_request_concepts/diffs/frontend.md38
-rw-r--r--doc/update/removals.md6
-rw-r--r--doc/user/project/repository/branches/index.md2
-rw-r--r--locale/gitlab.pot21
-rw-r--r--qa/qa/page/base.rb9
-rw-r--r--qa/qa/support/page/logging.rb4
-rw-r--r--scripts/rspec_helpers.sh6
-rw-r--r--spec/factories/ci/pipelines.rb12
-rw-r--r--spec/frontend/vue_shared/alert_details/alert_details_spec.js10
-rw-r--r--spec/frontend/vue_shared/components/filtered_search_bar/tokens/crm_organization_token_spec.js2
-rw-r--r--spec/frontend/vue_shared/components/filtered_search_bar/tokens/emoji_token_spec.js2
-rw-r--r--spec/frontend/vue_shared/components/filtered_search_bar/tokens/label_token_spec.js2
-rw-r--r--spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js2
-rw-r--r--spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js2
-rw-r--r--spec/frontend/vue_shared/components/markdown_drawer/markdown_drawer_spec.js2
-rw-r--r--spec/frontend/vue_shared/components/runner_instructions/runner_instructions_modal_spec.js2
-rw-r--r--spec/frontend/vue_shared/issuable/list/components/issuable_list_root_spec.js2
-rw-r--r--spec/frontend/work_items/components/widget_wrapper_spec.js2
-rw-r--r--spec/frontend/work_items/components/work_item_detail_spec.js2
-rw-r--r--spec/frontend/work_items/components/work_item_links/work_item_links_spec.js2
-rw-r--r--spec/frontend/work_items/pages/work_item_root_spec.js2
-rw-r--r--spec/support/shared_examples/features/content_editor_shared_examples.rb3
30 files changed, 175 insertions, 82 deletions
diff --git a/.rubocop_todo/rspec/missing_feature_category.yml b/.rubocop_todo/rspec/missing_feature_category.yml
index af8a427c9f8..3f6133b354e 100644
--- a/.rubocop_todo/rspec/missing_feature_category.yml
+++ b/.rubocop_todo/rspec/missing_feature_category.yml
@@ -1179,7 +1179,6 @@ RSpec/MissingFeatureCategory:
- 'ee/spec/models/broadcast_message_spec.rb'
- 'ee/spec/models/ci/bridge_spec.rb'
- 'ee/spec/models/ci/daily_build_group_report_result_spec.rb'
- - 'ee/spec/models/ci/minutes/additional_pack_spec.rb'
- 'ee/spec/models/ci/minutes/context_spec.rb'
- 'ee/spec/models/ci/minutes/namespace_monthly_usage_spec.rb'
- 'ee/spec/models/ci/minutes/notification_spec.rb'
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index e5ec85c5ac9..7cd84631a12 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-5338468e55ae2bd6eba6ddc6021e160854348f2b
+902f1f365fd2f0c8e190accdb092d533cc4692a9
diff --git a/data/removals/15_11/15-11-project-export-import-ndjson.yml b/data/removals/15_11/15-11-project-export-import-ndjson.yml
new file mode 100644
index 00000000000..80c6d4716f7
--- /dev/null
+++ b/data/removals/15_11/15-11-project-export-import-ndjson.yml
@@ -0,0 +1,11 @@
+- title: "Exporting and importing groups and projects in JSON format is no longer supported" # (required) Clearly explain the change. For example, "The `confidential` field for a `Note` is removed" or "CI/CD job names are limited to 250 characters."
+ announcement_milestone: "15.11" # (required) The milestone when this feature was deprecated.
+ announcement_date: "2023-04-22" # (required) The date of the milestone release when this feature was deprecated. This should almost always be the 22nd of a month (YYYY-MM-DD), unless you did an out of band blog post.
+ removal_milestone: "15.11" # (required) The milestone when this feature is being removed.
+ removal_date: "2023-04-22" # (required) This should almost always be the 22nd of a month (YYYY-MM-DD), the date of the milestone release when this feature will be removed.
+ breaking_change: false # (required) Change to false if this is not a breaking change.
+ reporter: wortschi # (required) GitLab username of the person reporting the removal
+ stage: manage # (required) String value of the stage that the feature was created in. e.g., Growth
+ issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/389888 # (required) Link to the deprecation issue in GitLab
+ body: | # (required) Do not modify this line, instead modify the lines below.
+ Before version 14.0, GitLab produced project file exports in JSON format. To support transitions, importing JSON-formatted group and project file exports was still possible if you configured the relevant feature flags. As of GitLab 15.11, importing a JSON-formatted group and project file export is no longer supported.
diff --git a/db/docs/schema_inconsistencies.yml b/db/docs/schema_inconsistencies.yml
new file mode 100644
index 00000000000..85a2681a523
--- /dev/null
+++ b/db/docs/schema_inconsistencies.yml
@@ -0,0 +1,8 @@
+---
+table_name: schema_inconsistencies
+feature_categories:
+- database
+description: The schema_inconsistencies table contains a list of database schema inconsistencies.
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114876
+milestone: '15.11'
+gitlab_schema: gitlab_main
diff --git a/db/migrate/20230307132729_create_schema_inconsistencies.rb b/db/migrate/20230307132729_create_schema_inconsistencies.rb
new file mode 100644
index 00000000000..4891cc6ab7b
--- /dev/null
+++ b/db/migrate/20230307132729_create_schema_inconsistencies.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class CreateSchemaInconsistencies < Gitlab::Database::Migration[2.1]
+ enable_lock_retries!
+
+ def change
+ create_table :schema_inconsistencies do |t|
+ t.references :issue, index: true, null: false, foreign_key: { on_delete: :cascade }
+ t.timestamps_with_timezone null: false
+ t.text :object_name, null: false, limit: 63
+ t.text :table_name, null: false, limit: 63
+ t.text :valitador_name, null: false, limit: 63
+ end
+ end
+end
diff --git a/db/schema_migrations/20230307132729 b/db/schema_migrations/20230307132729
new file mode 100644
index 00000000000..fa72b900120
--- /dev/null
+++ b/db/schema_migrations/20230307132729
@@ -0,0 +1 @@
+868959621d514ba49747cbfc2181fed3598e388c471043b5329e3c7562039b15 \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 268cba4f81d..e40e8e26f14 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -21959,6 +21959,28 @@ CREATE SEQUENCE scan_result_policies_id_seq
ALTER SEQUENCE scan_result_policies_id_seq OWNED BY scan_result_policies.id;
+CREATE TABLE schema_inconsistencies (
+ id bigint NOT NULL,
+ issue_id bigint NOT NULL,
+ created_at timestamp with time zone NOT NULL,
+ updated_at timestamp with time zone NOT NULL,
+ object_name text NOT NULL,
+ table_name text NOT NULL,
+ valitador_name text NOT NULL,
+ CONSTRAINT check_120b6c86d0 CHECK ((char_length(valitador_name) <= 63)),
+ CONSTRAINT check_a0411f31fd CHECK ((char_length(object_name) <= 63)),
+ CONSTRAINT check_d96408dfd2 CHECK ((char_length(table_name) <= 63))
+);
+
+CREATE SEQUENCE schema_inconsistencies_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE schema_inconsistencies_id_seq OWNED BY schema_inconsistencies.id;
+
CREATE TABLE schema_migrations (
version character varying NOT NULL,
finished_at timestamp with time zone DEFAULT now()
@@ -25230,6 +25252,8 @@ ALTER TABLE ONLY sbom_vulnerable_component_versions ALTER COLUMN id SET DEFAULT
ALTER TABLE ONLY scan_result_policies ALTER COLUMN id SET DEFAULT nextval('scan_result_policies_id_seq'::regclass);
+ALTER TABLE ONLY schema_inconsistencies ALTER COLUMN id SET DEFAULT nextval('schema_inconsistencies_id_seq'::regclass);
+
ALTER TABLE ONLY scim_identities ALTER COLUMN id SET DEFAULT nextval('scim_identities_id_seq'::regclass);
ALTER TABLE ONLY scim_oauth_access_tokens ALTER COLUMN id SET DEFAULT nextval('scim_oauth_access_tokens_id_seq'::regclass);
@@ -27594,6 +27618,9 @@ ALTER TABLE ONLY sbom_vulnerable_component_versions
ALTER TABLE ONLY scan_result_policies
ADD CONSTRAINT scan_result_policies_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY schema_inconsistencies
+ ADD CONSTRAINT schema_inconsistencies_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY schema_migrations
ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version);
@@ -31823,6 +31850,8 @@ CREATE UNIQUE INDEX index_sbom_sources_on_source_type_and_source ON sbom_sources
CREATE INDEX index_scan_result_policies_on_policy_configuration_id ON scan_result_policies USING btree (security_orchestration_policy_configuration_id);
+CREATE INDEX index_schema_inconsistencies_on_issue_id ON schema_inconsistencies USING btree (issue_id);
+
CREATE INDEX index_scim_identities_on_group_id ON scim_identities USING btree (group_id);
CREATE UNIQUE INDEX index_scim_identities_on_lower_extern_uid_and_group_id ON scim_identities USING btree (lower((extern_uid)::text), group_id);
@@ -36500,6 +36529,9 @@ ALTER TABLE ONLY packages_debian_group_component_files
ALTER TABLE ONLY incident_management_timeline_event_tags
ADD CONSTRAINT fk_rails_dd5c91484e FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
+ALTER TABLE ONLY schema_inconsistencies
+ ADD CONSTRAINT fk_rails_dd7d763602 FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY user_callouts
ADD CONSTRAINT fk_rails_ddfdd80f3d FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
diff --git a/doc/development/database/iterating_tables_in_batches.md b/doc/development/database/iterating_tables_in_batches.md
index 6357bed8b00..ddba5b377d7 100644
--- a/doc/development/database/iterating_tables_in_batches.md
+++ b/doc/development/database/iterating_tables_in_batches.md
@@ -465,6 +465,58 @@ Issue.each_batch(of: 1000) do |relation|
end
```
+### Counting records
+
+For tables with a large amount of data, counting records through queries can result
+in timeouts. The `EachBatch` module provides an alternative way to iteratively count
+records. The downside of using `each_batch` is the extra count query which is executed
+on the yielded relation object.
+
+The `each_batch_count` method is a more efficient approach that eliminates the need
+for the extra count query. By invoking this method, the iteration process can be
+paused and resumed as needed. This feature is particularly useful in situations
+where error budget violations are triggered after five minutes, such as when performing
+counting operations within Sidekiq workers.
+
+To illustrate, counting records using `EachBatch` involves invoking an additional
+count query as follows:
+
+```ruby
+count = 0
+
+Issue.each_batch do |relation|
+ count += relation.count
+end
+
+puts count
+```
+
+On the other hand, the `each_batch_count` method enables the counting process to be
+performed more efficiently (counting is part of the iteration query) without invoking
+an extra count query:
+
+```ruby
+count, _last_value = Issue.each_batch_count # last value can be ignored here
+```
+
+Furthermore, the `each_batch_count` method allows the counting process to be paused
+and resumed at any point. This capability is demonstrated in the following code snippet:
+
+```ruby
+stop_at = Time.current + 3.minutes
+
+count, last_value = Issue.each_batch_count do
+ Time.current > stop_at # condition for stopping the counting
+end
+
+# Continue the counting later
+stop_at = Time.current + 3.minutes
+
+count, last_value = Issue.each_batch_count(last_count: count, last_value: last_value) do
+ Time.current > stop_at
+end
+```
+
### `EachBatch` vs `BatchCount`
When adding new counters for Service Ping, the preferred way to count records is using the
diff --git a/doc/development/merge_request_concepts/diffs/frontend.md b/doc/development/merge_request_concepts/diffs/frontend.md
index 6bd6d80af94..ff163050e1f 100644
--- a/doc/development/merge_request_concepts/diffs/frontend.md
+++ b/doc/development/merge_request_concepts/diffs/frontend.md
@@ -84,40 +84,9 @@ The most important part of the metadata response is the diff file names. This da
app to render the file browser inside of the diffs app, without waiting for all batch diffs
requests to complete.
-When the metadata response is received, the diff file data gets sent to a web worker. The web worker
-exists to allow for this data, which for larger merge requests could be huge, to be processed off
-the main thread. Processing this data involves getting the data into the correct structure
+When the metadata response is received, the diff file data is processed into the correct structure
that the frontend requires to render the file browser in either tree view or list view.
-```mermaid
-graph TD
- A[fetchDiffFilesMeta]
- B[Create web worker]
- C[Fetch data]
- D[SET_DIFF_METADATA]
- E[Post worker data]
- F[Worker message event listener]
- K[SET_TREE_DATA]
-
- G[TreeWorker]
- H[onMessage]
- I[generateTreeList]
- J[postMessage sortTree]
-
- A -->B
- E -->F
- B -->C
- C -->D
- D -->E
-
- G -->H
- H -->I
- I -->J
- J -->F
-
- F -->K
-```
-
The structure for this file object is:
```javascript
@@ -128,6 +97,11 @@ The structure for this file object is:
"type": "",
"tree": [],
"changed": true,
+ "diffLoaded": false,
+ "filePaths": {
+ "old": file.old_path,
+ "new": file.new_path
+ },
"tempFile": false,
"deleted": false,
"fileHash": "",
diff --git a/doc/update/removals.md b/doc/update/removals.md
index 248d03cbbcb..b9122bd6b52 100644
--- a/doc/update/removals.md
+++ b/doc/update/removals.md
@@ -34,6 +34,12 @@ For removal reviewers (Technical Writers only):
https://about.gitlab.com/handbook/marketing/blog/release-posts/#update-the-removals-doc
-->
+## Removed in 15.11
+
+### Exporting and importing groups and projects in JSON format is no longer supported
+
+Before version 14.0, GitLab produced project file exports in JSON format. To support transitions, importing JSON-formatted group and project file exports was still possible if you configured the relevant feature flags. As of GitLab 15.11, importing a JSON-formatted group and project file export is no longer supported.
+
## Removed in 15.9
### Live Preview no longer available in the Web IDE
diff --git a/doc/user/project/repository/branches/index.md b/doc/user/project/repository/branches/index.md
index ef625739956..4382d666ac6 100644
--- a/doc/user/project/repository/branches/index.md
+++ b/doc/user/project/repository/branches/index.md
@@ -82,7 +82,7 @@ and their protection methods:
Prerequisites:
-- You must have at least the Developer role in the project.
+- You must have at least the Maintainer role in the project.
To view the **Branch rules overview** list:
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index e62f0de5bf0..97f8eef8f0d 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -30012,9 +30012,6 @@ msgstr ""
msgid "OnDemandScans|No %{profileType} profiles found for DAST"
msgstr ""
-msgid "OnDemandScans|No matching results"
-msgstr ""
-
msgid "OnDemandScans|On-demand Scans"
msgstr ""
@@ -37334,6 +37331,15 @@ msgstr ""
msgid "Runner was successfully updated."
msgstr ""
+msgid "RunnerTags|No matching results"
+msgstr ""
+
+msgid "RunnerTags|No tags exist"
+msgstr ""
+
+msgid "RunnerTags|Select runner tags"
+msgstr ""
+
msgid "Runners"
msgstr ""
@@ -39092,9 +39098,6 @@ msgstr ""
msgid "SecurityOrchestration|No description"
msgstr ""
-msgid "SecurityOrchestration|No matching results"
-msgstr ""
-
msgid "SecurityOrchestration|No rules defined - policy will not run."
msgstr ""
@@ -39221,9 +39224,6 @@ msgstr ""
msgid "SecurityOrchestration|Select policy"
msgstr ""
-msgid "SecurityOrchestration|Select runner tags"
-msgstr ""
-
msgid "SecurityOrchestration|Select scan type"
msgstr ""
@@ -39233,9 +39233,6 @@ msgstr ""
msgid "SecurityOrchestration|Select users"
msgstr ""
-msgid "SecurityOrchestration|Selected automatically"
-msgstr ""
-
msgid "SecurityOrchestration|Something went wrong, unable to fetch policies"
msgstr ""
diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb
index ab83da7dacf..5d7ca2d60ad 100644
--- a/qa/qa/page/base.rb
+++ b/qa/qa/page/base.rb
@@ -234,13 +234,14 @@ module QA
page.validate_elements_present! if page
end
- # Uses capybara to locate and click an element instead of `click_element`.
- # This can be used when it's not possible to add a QA selector but we still want to log the click
+ # Uses capybara to locate and interact with an element instead of using `*_element`.
+ # This can be used when it's not possible to add a QA selector but we still want to log the action
#
# @param [String] method the capybara method to use
# @param [String] locator the selector used to find the element
- def click_via_capybara(method, locator)
- page.public_send(method, locator)
+ # @param [Hash] **kwargs optional arguments
+ def act_via_capybara(method, locator, **kwargs)
+ page.public_send(method, locator, **kwargs)
end
def fill_element(name, content)
diff --git a/qa/qa/support/page/logging.rb b/qa/qa/support/page/logging.rb
index 2e97325aff0..ad8d63ec856 100644
--- a/qa/qa/support/page/logging.rb
+++ b/qa/qa/support/page/logging.rb
@@ -92,8 +92,8 @@ module QA
super
end
- def click_via_capybara(method, locator)
- log("clicking via capybara using '#{method}(#{locator})'", :info)
+ def act_via_capybara(method, locator, **kwargs)
+ log("acting via capybara using '#{method}(#{locator})' with args #{kwargs}", :info)
super
end
diff --git a/scripts/rspec_helpers.sh b/scripts/rspec_helpers.sh
index bd2c01dac5e..f96f96c4725 100644
--- a/scripts/rspec_helpers.sh
+++ b/scripts/rspec_helpers.sh
@@ -124,8 +124,8 @@ function debug_rspec_variables() {
echoinfo "SKIP_FLAKY_TESTS_AUTOMATICALLY: ${SKIP_FLAKY_TESTS_AUTOMATICALLY}"
echoinfo "RETRY_FAILED_TESTS_IN_NEW_PROCESS: ${RETRY_FAILED_TESTS_IN_NEW_PROCESS}"
- echoinfo "KNAPSACK_GENERATE_REPORT: ${KNAPSACK_GENERATE_REPORT}"
- echoinfo "FLAKY_RSPEC_GENERATE_REPORT: ${FLAKY_RSPEC_GENERATE_REPORT}"
+ echoinfo "KNAPSACK_GENERATE_REPORT: ${KNAPSACK_GENERATE_REPORT:-}"
+ echoinfo "FLAKY_RSPEC_GENERATE_REPORT: ${FLAKY_RSPEC_GENERATE_REPORT:-}"
echoinfo "KNAPSACK_TEST_FILE_PATTERN: ${KNAPSACK_TEST_FILE_PATTERN}"
echoinfo "KNAPSACK_LOG_LEVEL: ${KNAPSACK_LOG_LEVEL}"
@@ -136,7 +136,7 @@ function debug_rspec_variables() {
echoinfo "NEW_FLAKY_RSPEC_REPORT_PATH: ${NEW_FLAKY_RSPEC_REPORT_PATH}"
echoinfo "SKIPPED_FLAKY_TESTS_REPORT_PATH: ${SKIPPED_FLAKY_TESTS_REPORT_PATH}"
- echoinfo "CRYSTALBALL: ${CRYSTALBALL}"
+ echoinfo "CRYSTALBALL: ${CRYSTALBALL:-}"
}
function handle_retry_rspec_in_new_process() {
diff --git a/spec/factories/ci/pipelines.rb b/spec/factories/ci/pipelines.rb
index d68562c0aa5..2b6bddd2f6d 100644
--- a/spec/factories/ci/pipelines.rb
+++ b/spec/factories/ci/pipelines.rb
@@ -21,6 +21,12 @@ FactoryBot.define do
transient { name { nil } }
+ transient { ci_ref_presence { true } }
+
+ before(:create) do |pipeline, evaluator|
+ pipeline.ensure_ci_ref! if evaluator.ci_ref_presence && pipeline.ci_ref_id.nil?
+ end
+
after(:build) do |pipeline, evaluator|
if evaluator.child_of
pipeline.project = evaluator.child_of.project
@@ -54,12 +60,6 @@ FactoryBot.define do
end
factory :ci_pipeline do
- transient { ci_ref_presence { true } }
-
- before(:create) do |pipeline, evaluator|
- pipeline.ensure_ci_ref! if evaluator.ci_ref_presence && pipeline.ci_ref_id.nil?
- end
-
trait :invalid do
status { :failed }
yaml_errors { 'invalid YAML' }
diff --git a/spec/frontend/vue_shared/alert_details/alert_details_spec.js b/spec/frontend/vue_shared/alert_details/alert_details_spec.js
index 3bc191d988f..6c2b21053f0 100644
--- a/spec/frontend/vue_shared/alert_details/alert_details_spec.js
+++ b/spec/frontend/vue_shared/alert_details/alert_details_spec.js
@@ -86,12 +86,10 @@ describe('AlertDetails', () => {
});
afterEach(() => {
- if (wrapper) {
- wrapper.destroy();
- }
mock.restore();
});
+ const findTabs = () => wrapper.findByTestId('alertDetailsTabs');
const findCreateIncidentBtn = () => wrapper.findByTestId('createIncidentBtn');
const findViewIncidentBtn = () => wrapper.findByTestId('viewIncidentBtn');
const findIncidentCreationAlert = () => wrapper.findByTestId('incidentCreationError');
@@ -107,7 +105,7 @@ describe('AlertDetails', () => {
});
it('shows an empty state', () => {
- expect(wrapper.findByTestId('alertDetailsTabs').exists()).toBe(false);
+ expect(findTabs().exists()).toBe(false);
});
});
@@ -349,9 +347,7 @@ describe('AlertDetails', () => {
${1} | ${'metrics'}
${2} | ${'activity'}
`('will navigate to the correct tab via $tabId', ({ index, tabId }) => {
- // setData usage is discouraged. See https://gitlab.com/groups/gitlab-org/-/epics/7330 for details
- // eslint-disable-next-line no-restricted-syntax
- wrapper.setData({ currentTabIndex: index });
+ findTabs().vm.$emit('input', index);
expect($router.push).toHaveBeenCalledWith({ name: 'tab', params: { tabId } });
});
});
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/crm_organization_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/crm_organization_token_spec.js
index 8526631c63d..f41c5b5d432 100644
--- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/crm_organization_token_spec.js
+++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/crm_organization_token_spec.js
@@ -157,7 +157,7 @@ describe('CrmOrganizationToken', () => {
});
});
- it('calls `createAlert` with alert error message when request fails', async () => {
+ it('calls `createAlert` when request fails', async () => {
mountComponent();
jest.spyOn(wrapper.vm.$apollo, 'query').mockRejectedValue({});
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/emoji_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/emoji_token_spec.js
index 4e00b6837a3..e2c47cf2c42 100644
--- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/emoji_token_spec.js
+++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/emoji_token_spec.js
@@ -119,7 +119,7 @@ describe('EmojiToken', () => {
return triggerFetchEmojis();
});
- it('calls `createAlert` with alert error message', () => {
+ it('calls `createAlert`', () => {
expect(createAlert).toHaveBeenCalledWith({
message: 'There was a problem fetching emojis.',
});
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/label_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/label_token_spec.js
index b9275409125..696483df8ef 100644
--- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/label_token_spec.js
+++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/label_token_spec.js
@@ -152,7 +152,7 @@ describe('LabelToken', () => {
await triggerFetchLabels();
});
- it('calls `createAlert` with alert error message', () => {
+ it('calls `createAlert`', () => {
expect(createAlert).toHaveBeenCalledWith({
message: 'There was a problem fetching labels.',
});
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js
index fea1496a80b..8b95ddf8c4d 100644
--- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js
+++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js
@@ -134,7 +134,7 @@ describe('MilestoneToken', () => {
return triggerFetchMilestones();
});
- it('calls `createAlert` with alert error message', () => {
+ it('calls `createAlert`', () => {
expect(createAlert).toHaveBeenCalledWith({
message: 'There was a problem fetching milestones.',
});
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js
index 89003296854..970dca96a77 100644
--- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js
+++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/user_token_spec.js
@@ -134,7 +134,7 @@ describe('UserToken', () => {
return triggerFetchUsers();
});
- it('calls `createAlert` with alert error message', () => {
+ it('calls `createAlert`', () => {
expect(createAlert).toHaveBeenCalledWith({
message: 'There was a problem fetching users.',
});
diff --git a/spec/frontend/vue_shared/components/markdown_drawer/markdown_drawer_spec.js b/spec/frontend/vue_shared/components/markdown_drawer/markdown_drawer_spec.js
index 37b0767616a..fd2037ecb08 100644
--- a/spec/frontend/vue_shared/components/markdown_drawer/markdown_drawer_spec.js
+++ b/spec/frontend/vue_shared/components/markdown_drawer/markdown_drawer_spec.js
@@ -199,7 +199,7 @@ describe('MarkdownDrawer', () => {
afterEach(() => {
getRenderedMarkdown.mockClear();
});
- it('shows alert', () => {
+ it('shows an alert', () => {
expect(findAlert().exists()).toBe(true);
});
});
diff --git a/spec/frontend/vue_shared/components/runner_instructions/runner_instructions_modal_spec.js b/spec/frontend/vue_shared/components/runner_instructions/runner_instructions_modal_spec.js
index cb35cbd35ad..9121564c196 100644
--- a/spec/frontend/vue_shared/components/runner_instructions/runner_instructions_modal_spec.js
+++ b/spec/frontend/vue_shared/components/runner_instructions/runner_instructions_modal_spec.js
@@ -202,7 +202,7 @@ describe('RunnerInstructionsModal component', () => {
expect(findAlert().exists()).toBe(true);
});
- it('should show alert when instructions cannot be loaded', async () => {
+ it('should show an alert when instructions cannot be loaded', async () => {
createComponent();
await waitForPromises();
diff --git a/spec/frontend/vue_shared/issuable/list/components/issuable_list_root_spec.js b/spec/frontend/vue_shared/issuable/list/components/issuable_list_root_spec.js
index 9a4636e0f4d..a40d2b52081 100644
--- a/spec/frontend/vue_shared/issuable/list/components/issuable_list_root_spec.js
+++ b/spec/frontend/vue_shared/issuable/list/components/issuable_list_root_spec.js
@@ -333,7 +333,7 @@ describe('IssuableListRoot', () => {
describe('alert', () => {
const error = 'oopsie!';
- it('shows alert when there is an error', () => {
+ it('shows an alert when there is an error', () => {
wrapper = createComponent({ props: { error } });
expect(findAlert().text()).toBe(error);
diff --git a/spec/frontend/work_items/components/widget_wrapper_spec.js b/spec/frontend/work_items/components/widget_wrapper_spec.js
index a87233300fc..87fbd1b3830 100644
--- a/spec/frontend/work_items/components/widget_wrapper_spec.js
+++ b/spec/frontend/work_items/components/widget_wrapper_spec.js
@@ -30,7 +30,7 @@ describe('WidgetWrapper component', () => {
expect(findWidgetBody().exists()).toBe(false);
});
- it('shows alert when list loading fails', () => {
+ it('shows an alert when list loading fails', () => {
const error = 'Some error';
createComponent({ error });
diff --git a/spec/frontend/work_items/components/work_item_detail_spec.js b/spec/frontend/work_items/components/work_item_detail_spec.js
index fe7556f8ec6..4d13fbb3250 100644
--- a/spec/frontend/work_items/components/work_item_detail_spec.js
+++ b/spec/frontend/work_items/components/work_item_detail_spec.js
@@ -337,7 +337,7 @@ describe('WorkItemDetail component', () => {
expect(findLoadingIcon().exists()).toBe(false);
});
- it('shows alert message when mutation fails', async () => {
+ it('shows an alert when mutation fails', async () => {
createComponent({
handler: handlerMock,
confidentialityMock: confidentialityFailureMock,
diff --git a/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js b/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js
index 99e44b4d89c..e97c2328b83 100644
--- a/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js
+++ b/spec/frontend/work_items/components/work_item_links/work_item_links_spec.js
@@ -179,7 +179,7 @@ describe('WorkItemLinks', () => {
expect(findWorkItemLinkChildItems()).toHaveLength(4);
});
- it('shows alert when list loading fails', async () => {
+ it('shows an alert when list loading fails', async () => {
const errorMessage = 'Some error';
await createComponent({
fetchHandler: jest.fn().mockRejectedValue(new Error(errorMessage)),
diff --git a/spec/frontend/work_items/pages/work_item_root_spec.js b/spec/frontend/work_items/pages/work_item_root_spec.js
index 37326910e13..c480affe484 100644
--- a/spec/frontend/work_items/pages/work_item_root_spec.js
+++ b/spec/frontend/work_items/pages/work_item_root_spec.js
@@ -75,7 +75,7 @@ describe('Work items root component', () => {
expect(visitUrl).toHaveBeenCalledWith(issuesListPath);
});
- it('shows alert if delete fails', async () => {
+ it('shows an alert if delete fails', async () => {
const deleteWorkItemHandler = jest.fn().mockRejectedValue(deleteWorkItemFailureResponse);
createComponent({
diff --git a/spec/support/shared_examples/features/content_editor_shared_examples.rb b/spec/support/shared_examples/features/content_editor_shared_examples.rb
index 7582e67efbd..40d76c7d5d2 100644
--- a/spec/support/shared_examples/features/content_editor_shared_examples.rb
+++ b/spec/support/shared_examples/features/content_editor_shared_examples.rb
@@ -151,7 +151,8 @@ RSpec.shared_examples 'edits content using the content editor' do
end
end
- it 'toggles the diagram when preview button is clicked' do
+ it 'toggles the diagram when preview button is clicked',
+ quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/397682' do
find('[data-testid="preview-diagram"]').click
expect(find(content_editor_testid)).not_to have_selector('iframe')