diff --git a/GITLAB_KAS_VERSION b/GITLAB_KAS_VERSION index 77ca19723f5..58221198648 100644 --- a/GITLAB_KAS_VERSION +++ b/GITLAB_KAS_VERSION @@ -1 +1 @@ -2f4d621924f60a44b1367f4a7d3bc4a1a9292cce +d640111e807a3551540e72a1b79b381f33b9105b diff --git a/Gemfile.checksum b/Gemfile.checksum index df0f973df85..a76298177c6 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -587,7 +587,7 @@ {"name":"rest-client","version":"2.1.0","platform":"x86-mswin32","checksum":"a35a3bb8d16ca39d110a946a2c805267f98ce07a0ae890e4512a45eadea47a6e"}, {"name":"retriable","version":"3.1.2","platform":"ruby","checksum":"0a5a5d0ca4ba61a76fb31a17ab8f7f80281beb040c329d34dfc137a1398688e0"}, {"name":"reverse_markdown","version":"1.4.0","platform":"ruby","checksum":"a3305da1509ac8388fa84a28745621113e121383402a2e8e9350ba649034e870"}, -{"name":"rexml","version":"3.3.2","platform":"ruby","checksum":"4513686f858d0ff2e5a412d734c8a192e16cb1df4cb2063f56b72a8ad4c5257f"}, +{"name":"rexml","version":"3.3.8","platform":"ruby","checksum":"f68fd96345330a1062896d0d0401324b0dae0ee20f784791b0843db96b212167"}, {"name":"rinku","version":"2.0.0","platform":"ruby","checksum":"3e695aaf9f24baba3af45823b5c427b58a624582132f18482320e2737f9f8a85"}, {"name":"rotp","version":"6.3.0","platform":"ruby","checksum":"75d40087e65ed0d8022c33055a6306c1c400d1c12261932533b5d6cbcd868854"}, {"name":"rouge","version":"4.3.0","platform":"ruby","checksum":"9ee3d9ec53338e78c03fff0cbcd08881d80d69152349b046761e48ccf2de581c"}, @@ -699,8 +699,6 @@ {"name":"state_machines-activerecord","version":"0.8.0","platform":"ruby","checksum":"072fb701b8ab03de0608297f6c55dc34ed096e556fa8f77e556f3c461c71aab6"}, {"name":"strings","version":"0.2.1","platform":"ruby","checksum":"933293b3c95cf85b81eb44b3cf673e3087661ba739bbadfeadf442083158d6fb"}, {"name":"strings-ansi","version":"0.2.0","platform":"ruby","checksum":"90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88"}, -{"name":"strscan","version":"3.1.0","platform":"java","checksum":"8645aa76e017e21764c6df572d2d79fcc1672284014f5bdbd806278cdbcd11b0"}, -{"name":"strscan","version":"3.1.0","platform":"ruby","checksum":"01b8a81d214fbf7b5308c6fb51b5972bbfc4a6aa1f166fd3618ba97e0fcd5555"}, {"name":"swd","version":"2.0.3","platform":"ruby","checksum":"4cdbe2a4246c19f093fce22e967ec3ebdd4657d37673672e621bf0c7eb770655"}, {"name":"sync","version":"0.5.0","platform":"ruby","checksum":"668356cc07c59ac7ed9ecf34fec3929831f179c07adb1f3e1c3b7a1609a638fd"}, {"name":"sys-filesystem","version":"1.4.3","platform":"ruby","checksum":"390919de89822ad6d3ba3daf694d720be9d83ed95cdf7adf54d4573c98b17421"}, diff --git a/Gemfile.lock b/Gemfile.lock index 3888a3574a1..4bec0c8babf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1568,8 +1568,7 @@ GEM retriable (3.1.2) reverse_markdown (1.4.0) nokogiri - rexml (3.3.2) - strscan + rexml (3.3.8) rinku (2.0.0) rotp (6.3.0) rouge (4.3.0) @@ -1792,7 +1791,6 @@ GEM unicode-display_width (>= 1.5, < 3.0) unicode_utils (~> 1.4) strings-ansi (0.2.0) - strscan (3.1.0) swd (2.0.3) activesupport (>= 3) attr_required (>= 0.0.5) diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index 2f41e6455c1..0a4a89226bf 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -600,7 +600,7 @@ {"name":"rest-client","version":"2.1.0","platform":"x86-mswin32","checksum":"a35a3bb8d16ca39d110a946a2c805267f98ce07a0ae890e4512a45eadea47a6e"}, {"name":"retriable","version":"3.1.2","platform":"ruby","checksum":"0a5a5d0ca4ba61a76fb31a17ab8f7f80281beb040c329d34dfc137a1398688e0"}, {"name":"reverse_markdown","version":"1.4.0","platform":"ruby","checksum":"a3305da1509ac8388fa84a28745621113e121383402a2e8e9350ba649034e870"}, -{"name":"rexml","version":"3.3.2","platform":"ruby","checksum":"4513686f858d0ff2e5a412d734c8a192e16cb1df4cb2063f56b72a8ad4c5257f"}, +{"name":"rexml","version":"3.3.8","platform":"ruby","checksum":"f68fd96345330a1062896d0d0401324b0dae0ee20f784791b0843db96b212167"}, {"name":"rinku","version":"2.0.0","platform":"ruby","checksum":"3e695aaf9f24baba3af45823b5c427b58a624582132f18482320e2737f9f8a85"}, {"name":"rotp","version":"6.3.0","platform":"ruby","checksum":"75d40087e65ed0d8022c33055a6306c1c400d1c12261932533b5d6cbcd868854"}, {"name":"rouge","version":"4.3.0","platform":"ruby","checksum":"9ee3d9ec53338e78c03fff0cbcd08881d80d69152349b046761e48ccf2de581c"}, @@ -714,8 +714,6 @@ {"name":"stringio","version":"3.1.1","platform":"ruby","checksum":"53456e14175c594e0e8eb2206a1be33f3974d4fe21c131e628908b05c8c2ae1e"}, {"name":"strings","version":"0.2.1","platform":"ruby","checksum":"933293b3c95cf85b81eb44b3cf673e3087661ba739bbadfeadf442083158d6fb"}, {"name":"strings-ansi","version":"0.2.0","platform":"ruby","checksum":"90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88"}, -{"name":"strscan","version":"3.1.0","platform":"java","checksum":"8645aa76e017e21764c6df572d2d79fcc1672284014f5bdbd806278cdbcd11b0"}, -{"name":"strscan","version":"3.1.0","platform":"ruby","checksum":"01b8a81d214fbf7b5308c6fb51b5972bbfc4a6aa1f166fd3618ba97e0fcd5555"}, {"name":"swd","version":"2.0.3","platform":"ruby","checksum":"4cdbe2a4246c19f093fce22e967ec3ebdd4657d37673672e621bf0c7eb770655"}, {"name":"sync","version":"0.5.0","platform":"ruby","checksum":"668356cc07c59ac7ed9ecf34fec3929831f179c07adb1f3e1c3b7a1609a638fd"}, {"name":"sys-filesystem","version":"1.4.3","platform":"ruby","checksum":"390919de89822ad6d3ba3daf694d720be9d83ed95cdf7adf54d4573c98b17421"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index 32a076b82bf..ad21cdea93e 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -1594,8 +1594,7 @@ GEM retriable (3.1.2) reverse_markdown (1.4.0) nokogiri - rexml (3.3.2) - strscan + rexml (3.3.8) rinku (2.0.0) rotp (6.3.0) rouge (4.3.0) @@ -1819,7 +1818,6 @@ GEM unicode-display_width (>= 1.5, < 3.0) unicode_utils (~> 1.4) strings-ansi (0.2.0) - strscan (3.1.0) swd (2.0.3) activesupport (>= 3) attr_required (>= 0.0.5) diff --git a/app/assets/javascripts/content_editor/components/wrappers/code_block.vue b/app/assets/javascripts/content_editor/components/wrappers/code_block.vue index 3193b8c830f..c160e113d8e 100644 --- a/app/assets/javascripts/content_editor/components/wrappers/code_block.vue +++ b/app/assets/javascripts/content_editor/components/wrappers/code_block.vue @@ -278,6 +278,7 @@ export default { ref="nodeViewContent" as="code" class="gl-relative gl-z-1 !gl-break-words" + data-testid="suggestion-field" /> diff --git a/app/assets/javascripts/vue_shared/components/markdown/markdown_editor.vue b/app/assets/javascripts/vue_shared/components/markdown/markdown_editor.vue index faca0afc50f..559ce97adf9 100644 --- a/app/assets/javascripts/vue_shared/components/markdown/markdown_editor.vue +++ b/app/assets/javascripts/vue_shared/components/markdown/markdown_editor.vue @@ -394,17 +394,13 @@ export default { :editable="!disabled" :disable-attachments="disableAttachments" :code-suggestions-config="codeSuggestionsConfig" + :data-testid="formFieldProps['data-testid'] || 'markdown-editor-form-field'" @initialized="setEditorAsAutofocused" @change="updateMarkdownFromContentEditor" @keydown="onKeydown" @enableMarkdownEditor="onEditingModeChange('markdownField')" /> - + diff --git a/doc/administration/packages/container_registry.md b/doc/administration/packages/container_registry.md index 877fbd02b51..ade5160b5d2 100644 --- a/doc/administration/packages/container_registry.md +++ b/doc/administration/packages/container_registry.md @@ -1340,7 +1340,7 @@ The GitLab registry is what users use to store their own Docker images. Because of that the Registry is client facing, meaning that we expose it directly on the web server (or load balancers, LB for short). -![GitLab Registry diagram](img/gitlab-registry-architecture.png) +![User login process with GitLab Container Registry.](img/gitlab-registry-architecture.png) The flow described by the diagram above: diff --git a/gems/activerecord-gitlab/Gemfile.lock b/gems/activerecord-gitlab/Gemfile.lock index 9ee91e06a0b..1099dd1fb2b 100644 --- a/gems/activerecord-gitlab/Gemfile.lock +++ b/gems/activerecord-gitlab/Gemfile.lock @@ -39,7 +39,7 @@ GEM rack (3.0.8) rainbow (3.1.1) regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -102,4 +102,4 @@ DEPENDENCIES sqlite3 (~> 1.6) BUNDLED WITH - 2.4.14 + 2.5.21 diff --git a/gems/click_house-client/Gemfile.lock b/gems/click_house-client/Gemfile.lock index d9d672240d2..5c89079d224 100644 --- a/gems/click_house-client/Gemfile.lock +++ b/gems/click_house-client/Gemfile.lock @@ -41,7 +41,7 @@ GEM rainbow (3.1.1) rake (13.0.6) regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -103,4 +103,4 @@ DEPENDENCIES rubocop-rspec BUNDLED WITH - 2.4.16 + 2.5.21 diff --git a/gems/csv_builder/Gemfile.lock b/gems/csv_builder/Gemfile.lock index 04992abc4d6..eeb22e02d23 100644 --- a/gems/csv_builder/Gemfile.lock +++ b/gems/csv_builder/Gemfile.lock @@ -37,7 +37,7 @@ GEM rack (3.0.8) rainbow (3.1.1) regexp_parser (2.8.1) - rexml (3.2.6) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -97,4 +97,4 @@ DEPENDENCIES rubocop-rspec (~> 2.22) BUNDLED WITH - 2.4.17 + 2.5.21 diff --git a/gems/gitlab-backup-cli/Gemfile.lock b/gems/gitlab-backup-cli/Gemfile.lock index a05c7d91ecd..f8ebc5a6de2 100644 --- a/gems/gitlab-backup-cli/Gemfile.lock +++ b/gems/gitlab-backup-cli/Gemfile.lock @@ -133,7 +133,7 @@ GEM rainbow (3.1.1) rake (13.2.1) regexp_parser (2.9.2) - rexml (3.3.7) + rexml (3.3.8) rspec (3.13.0) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) @@ -209,4 +209,4 @@ DEPENDENCIES rubocop-rspec (~> 2.27.1) BUNDLED WITH - 2.5.18 + 2.5.21 diff --git a/gems/gitlab-database-load_balancing/Gemfile.lock b/gems/gitlab-database-load_balancing/Gemfile.lock index 73b153671d2..d430e86e0f1 100644 --- a/gems/gitlab-database-load_balancing/Gemfile.lock +++ b/gems/gitlab-database-load_balancing/Gemfile.lock @@ -205,7 +205,7 @@ GEM regexp_parser (2.7.0) request_store (1.5.1) rack (>= 1.4) - rexml (3.2.5) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -300,4 +300,4 @@ DEPENDENCIES rubocop-rspec (~> 2.22) BUNDLED WITH - 2.4.16 + 2.5.21 diff --git a/gems/gitlab-database-lock_retries/Gemfile.lock b/gems/gitlab-database-lock_retries/Gemfile.lock index 36618f6f5ae..1d3abf97bc1 100644 --- a/gems/gitlab-database-lock_retries/Gemfile.lock +++ b/gems/gitlab-database-lock_retries/Gemfile.lock @@ -43,7 +43,7 @@ GEM rack (3.0.8) rainbow (3.1.1) regexp_parser (2.8.2) - rexml (3.2.6) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -102,4 +102,4 @@ DEPENDENCIES rspec (~> 3.0) BUNDLED WITH - 2.4.22 + 2.5.21 diff --git a/gems/gitlab-housekeeper/Gemfile.lock b/gems/gitlab-housekeeper/Gemfile.lock index 292bfdd6eeb..fedfad0cd50 100644 --- a/gems/gitlab-housekeeper/Gemfile.lock +++ b/gems/gitlab-housekeeper/Gemfile.lock @@ -67,7 +67,7 @@ GEM rainbow (3.1.1) rake (13.1.0) regexp_parser (2.8.3) - rexml (3.2.6) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -139,4 +139,4 @@ DEPENDENCIES webmock BUNDLED WITH - 2.4.21 + 2.5.21 diff --git a/gems/gitlab-http/Gemfile.lock b/gems/gitlab-http/Gemfile.lock index 91cd6eca94f..f0aaf7c6b21 100644 --- a/gems/gitlab-http/Gemfile.lock +++ b/gems/gitlab-http/Gemfile.lock @@ -119,7 +119,7 @@ GEM rainbow (3.1.1) rake (13.0.6) regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.3.8) rouge (4.3.0) rspec (3.12.0) rspec-core (~> 3.12.0) @@ -214,4 +214,4 @@ DEPENDENCIES webrick (~> 1.8) BUNDLED WITH - 2.4.14 + 2.5.21 diff --git a/gems/gitlab-rspec/Gemfile.lock b/gems/gitlab-rspec/Gemfile.lock index d375d858b01..f359420c4b8 100644 --- a/gems/gitlab-rspec/Gemfile.lock +++ b/gems/gitlab-rspec/Gemfile.lock @@ -94,7 +94,7 @@ GEM rainbow (3.1.1) rake (13.0.6) regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -185,4 +185,4 @@ DEPENDENCIES rubocop-rspec (~> 2.22) BUNDLED WITH - 2.4.4 + 2.5.21 diff --git a/gems/gitlab-rspec_flaky/Gemfile.lock b/gems/gitlab-rspec_flaky/Gemfile.lock index 7b5817b91e4..6b540b10c78 100644 --- a/gems/gitlab-rspec_flaky/Gemfile.lock +++ b/gems/gitlab-rspec_flaky/Gemfile.lock @@ -67,7 +67,7 @@ GEM rack (3.0.8) rainbow (3.1.1) regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -143,4 +143,4 @@ DEPENDENCIES rubocop-rspec (~> 2.22) BUNDLED WITH - 2.4.14 + 2.5.21 diff --git a/gems/gitlab-safe_request_store/Gemfile.lock b/gems/gitlab-safe_request_store/Gemfile.lock index d26bab2f4f0..1d391108299 100644 --- a/gems/gitlab-safe_request_store/Gemfile.lock +++ b/gems/gitlab-safe_request_store/Gemfile.lock @@ -41,7 +41,7 @@ GEM regexp_parser (2.7.0) request_store (1.5.1) rack (>= 1.4) - rexml (3.2.5) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -101,4 +101,4 @@ DEPENDENCIES rubocop-rspec (~> 2.22) BUNDLED WITH - 2.4.16 + 2.5.21 diff --git a/gems/gitlab-schema-validation/Gemfile.lock b/gems/gitlab-schema-validation/Gemfile.lock index 124e03422e9..8b2f39657f9 100644 --- a/gems/gitlab-schema-validation/Gemfile.lock +++ b/gems/gitlab-schema-validation/Gemfile.lock @@ -54,7 +54,7 @@ GEM rack (3.0.8) rainbow (3.1.1) regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -136,4 +136,4 @@ DEPENDENCIES rubocop-rspec (~> 2.22) BUNDLED WITH - 2.4.14 + 2.5.21 diff --git a/gems/gitlab-secret_detection/Gemfile.lock b/gems/gitlab-secret_detection/Gemfile.lock index 029ad5d778e..7f2d1bc478e 100644 --- a/gems/gitlab-secret_detection/Gemfile.lock +++ b/gems/gitlab-secret_detection/Gemfile.lock @@ -62,7 +62,7 @@ GEM re2 (2.4.3) mini_portile2 (~> 2.8.5) regexp_parser (2.8.2) - rexml (3.2.6) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -148,4 +148,4 @@ DEPENDENCIES rubocop-rspec (~> 2.22) BUNDLED WITH - 2.4.22 + 2.5.21 diff --git a/gems/gitlab-utils/Gemfile.lock b/gems/gitlab-utils/Gemfile.lock index 76c6c1e2110..ad049978b13 100644 --- a/gems/gitlab-utils/Gemfile.lock +++ b/gems/gitlab-utils/Gemfile.lock @@ -108,7 +108,7 @@ GEM rainbow (3.1.1) rake (13.0.6) regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -201,4 +201,4 @@ DEPENDENCIES rubocop-rspec (~> 2.22) BUNDLED WITH - 2.4.4 + 2.5.21 diff --git a/gems/ipynbdiff/Gemfile.lock b/gems/ipynbdiff/Gemfile.lock index 1d7f985ffe3..d924d895e62 100644 --- a/gems/ipynbdiff/Gemfile.lock +++ b/gems/ipynbdiff/Gemfile.lock @@ -53,7 +53,7 @@ GEM rainbow (3.1.1) rake (13.0.6) regexp_parser (2.8.1) - rexml (3.2.5) + rexml (3.3.8) rspec (3.11.0) rspec-core (~> 3.11.0) rspec-expectations (~> 3.11.0) @@ -136,4 +136,4 @@ DEPENDENCIES simplecov (~> 0.22.0) BUNDLED WITH - 2.3.16 + 2.5.21 diff --git a/gems/openbao_client/Gemfile.lock b/gems/openbao_client/Gemfile.lock index 948090fcf95..4c23141171f 100644 --- a/gems/openbao_client/Gemfile.lock +++ b/gems/openbao_client/Gemfile.lock @@ -58,8 +58,7 @@ GEM rack (3.1.7) rainbow (3.1.1) regexp_parser (2.9.2) - rexml (3.3.2) - strscan + rexml (3.3.8) rspec (3.13.0) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) @@ -105,7 +104,6 @@ GEM rubocop-capybara (~> 2.17) rubocop-factory_bot (~> 2.22) ruby-progressbar (1.13.0) - strscan (3.1.0) typhoeus (1.4.1) ethon (>= 0.9.0) tzinfo (2.0.6) diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 45eaff0c789..07e6d676437 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -5665,6 +5665,9 @@ msgstr "" msgid "All protected branches" msgstr "" +msgid "All required approvals given" +msgstr "" + msgid "All required approvals must be given." msgstr "" diff --git a/qa/Gemfile.lock b/qa/Gemfile.lock index 2e2dbd779d1..4586f5c5d9e 100644 --- a/qa/Gemfile.lock +++ b/qa/Gemfile.lock @@ -266,8 +266,7 @@ GEM mime-types (>= 1.16, < 4.0) netrc (~> 0.8) retriable (3.1.2) - rexml (3.3.1) - strscan + rexml (3.3.8) rotp (6.3.0) rspec (3.13.0) rspec-core (~> 3.13.0) @@ -317,7 +316,6 @@ GEM jwt (>= 1.5, < 3.0) multi_json (~> 1.10) slack-notifier (2.4.0) - strscan (3.1.0) sync (0.5.0) table_print (1.5.7) terminal-table (3.0.2) diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index 998cd969393..7f80a4730c1 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -276,6 +276,21 @@ module QA find_element(name).set(content) end + # fill in editor element, whether plain text or rich text + def fill_editor_element(name, content) + element = find_element name + + if element.tag_name == 'textarea' + element.set content + else + mod = page.driver.browser.capabilities.platform_name.include?("mac") ? :command : :control + prosemirror = element.find '[contenteditable].ProseMirror' + prosemirror.send_keys [mod, 'a'] + prosemirror.send_keys :delete + prosemirror.send_keys content + end + end + def select_element(name, value) element = find_element(name) diff --git a/qa/qa/page/component/design_management.rb b/qa/qa/page/component/design_management.rb index a43c9f95ae4..d924e332503 100644 --- a/qa/qa/page/component/design_management.rb +++ b/qa/qa/page/component/design_management.rb @@ -47,7 +47,8 @@ module QA def add_annotation(note) click_element('design-image-button') - fill_element('note-textarea', note) + fill_editor_element('note-textarea', note) + has_active_element?('save-comment-button', wait: 0.5) click_element('save-comment-button') # It takes a moment for the annotation to be saved. diff --git a/qa/qa/page/component/dropzone.rb b/qa/qa/page/component/dropzone.rb index 2efb96a02bc..bd7290b21ae 100644 --- a/qa/qa/page/component/dropzone.rb +++ b/qa/qa/page/component/dropzone.rb @@ -17,14 +17,24 @@ module QA # instantiated on one page because there is no distinguishing # attribute per dropzone file field. def attach_file(attachment) - filename = ::File.basename(attachment) + if QA::Page::Base.perform { |d| d.has_element?('content-editor', wait: 0.5) } # Rich text editor + filename = attachment.match(%r{([^/]+$)})[1] + page.find('[data-testid="file-upload-field"]', visible: 'false').set attachment - field_style = { visibility: 'visible', height: '', width: '' } - page.attach_file(attachment, class: 'dz-hidden-input', make_visible: field_style) + # Wait for link to be appended to dropzone text + page.wait_until(reload: false) do + page.find("#{container} img")['alt'].match?(filename) + end + else # Plain text editor + filename = ::File.basename(attachment) - # Wait for link to be appended to dropzone text - page.wait_until(reload: false) do - page.find("#{container} textarea").value.match(filename) + field_style = { visibility: 'visible', height: '', width: '' } + page.attach_file(attachment, class: 'dz-hidden-input', make_visible: field_style) + + # Wait for link to be appended to dropzone text + page.wait_until(reload: false) do + page.find("#{container} textarea").value.match(filename) + end end end end diff --git a/qa/qa/page/component/note.rb b/qa/qa/page/component/note.rb index 89409c41802..8cba760edee 100644 --- a/qa/qa/page/component/note.rb +++ b/qa/qa/page/component/note.rb @@ -73,19 +73,21 @@ module QA # Attachment option should be an absolute path def comment(text, attachment: nil, filter: :all_activities) method("select_#{filter}_filter").call - fill_element 'comment-field', "#{text}\n" + fill_editor_element 'comment-field', "#{text}\n" unless attachment.nil? QA::Page::Component::Dropzone.new(self, '.new-note') .attach_file(attachment) end + has_active_element?('comment-button', wait: 0.5) click_element 'comment-button' end def edit_comment(text) click_element 'note-edit-button' - fill_element 'reply-field', text + fill_editor_element 'reply-field', text + has_active_element?('reply-comment-button', wait: 0.5) click_element 'reply-comment-button' end @@ -111,6 +113,7 @@ module QA def reply_to_discussion(position, reply_text) type_reply_to_discussion(position, reply_text) + has_active_element?('reply-comment-button', wait: 0.5) click_element 'reply-comment-button' end @@ -145,7 +148,7 @@ module QA end def start_discussion(text) - fill_element 'comment-field', text + fill_editor_element 'comment-field', text within_element('comment-button') { click_button(class: 'gl-new-dropdown-toggle') } click_element 'discussion-menu-item' click_element 'comment-button' @@ -159,7 +162,7 @@ module QA def type_reply_to_discussion(position, reply_text) all_elements('discussion-reply-tab', minimum: position)[position - 1].click - fill_element 'reply-field', reply_text + fill_editor_element 'reply-field', reply_text end private diff --git a/qa/qa/page/component/wiki_page_form.rb b/qa/qa/page/component/wiki_page_form.rb index 3398086eee7..87f28550971 100644 --- a/qa/qa/page/component/wiki_page_form.rb +++ b/qa/qa/page/component/wiki_page_form.rb @@ -42,7 +42,7 @@ module QA end def set_content(content) - fill_element('markdown-editor-form-field', content) + fill_editor_element('markdown-editor-form-field', content) end def set_message(message) @@ -67,6 +67,8 @@ module QA end def use_new_editor + return if has_element?('content-editor') + click_element('editing-mode-switcher') wait_until(reload: false) do diff --git a/qa/qa/page/group/milestone/new.rb b/qa/qa/page/group/milestone/new.rb index 50965769c9e..d83788b8abe 100644 --- a/qa/qa/page/group/milestone/new.rb +++ b/qa/qa/page/group/milestone/new.rb @@ -16,7 +16,7 @@ module QA end def set_description(description) - fill_element('milestone-description-field', description) + fill_editor_element('milestone-description-field', description) end def set_title(title) diff --git a/qa/qa/page/issuable/new.rb b/qa/qa/page/issuable/new.rb index d5b41e0399f..6bdd9d05abc 100644 --- a/qa/qa/page/issuable/new.rb +++ b/qa/qa/page/issuable/new.rb @@ -37,7 +37,7 @@ module QA end def fill_description(description) - fill_element('issuable-form-description-field', description) + fill_editor_element('issuable-form-description-field', description) end def choose_milestone(milestone) diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index bb82d624952..dee0ba2e824 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -103,6 +103,10 @@ module QA element 'artifacts-dropdown' end + view 'app/assets/javascripts/content_editor/components/formatting_toolbar.vue' do + element 'code-suggestion' + end + view 'app/assets/javascripts/vue_shared/components/markdown/apply_suggestion.vue' do element 'apply-suggestion-dropdown' element 'commit-message-field' @@ -149,6 +153,7 @@ module QA end def start_review + has_active_element?('start-review-button', wait: 0.5) click_element('start-review-button') # After clicking the button, wait for it to disappear @@ -198,7 +203,7 @@ module QA click_element('dismiss-suggestion-popover-button') if has_element?('dismiss-suggestion-popover-button', wait: 1) - fill_element('reply-field', text) + fill_editor_element('reply-field', text) end def click_discussions_tab @@ -445,10 +450,20 @@ module QA def add_suggestion_to_diff(suggestion, line) find("a[data-linenumber='#{line}']").hover click_element('left-comment-button') - click_element('suggestion-button') - initial_content = find_element('reply-field').value - fill_element('reply-field', '') - fill_element('reply-field', initial_content.gsub(/(```suggestion:-0\+0\n).*(\n```)/, "\\1#{suggestion}\\2")) + + if has_element?('suggestion-button', wait: 0.5) + click_element('suggestion-button') + initial_content = find_element('reply-field').value + fill_editor_element('reply-field', '') + fill_editor_element('reply-field', + initial_content.gsub(/(```suggestion:-0\+0\n).*(\n```)/, "\\1#{suggestion}\\2")) + else + click_element('code-suggestion') + suggestion_field = find_element('suggestion-field') + suggestion_field.set(suggestion) + has_active_element?('comment-now-button', wait: 0.5) + end + click_element('comment-now-button') wait_for_requests end diff --git a/qa/qa/page/project/milestone/new.rb b/qa/qa/page/project/milestone/new.rb index a14e1e6b071..92b715fd847 100644 --- a/qa/qa/page/project/milestone/new.rb +++ b/qa/qa/page/project/milestone/new.rb @@ -20,7 +20,7 @@ module QA end def set_description(description) - fill_element('milestone-description-field', description) + fill_editor_element('milestone-description-field', description) end end end