{{ $options.i18n.steps.step1.label }}
diff --git a/app/views/admin/application_settings/_signup.html.haml b/app/views/admin/application_settings/_signup.html.haml
index c3deb8af99e..2f2d42e297e 100644
--- a/app/views/admin/application_settings/_signup.html.haml
+++ b/app/views/admin/application_settings/_signup.html.haml
@@ -11,7 +11,7 @@
= _("When enabled, any user visiting %{host} will be able to create an account.") % { host: "#{new_user_session_url(host: Gitlab.config.gitlab.host)}" }
.form-group
.form-check
- = f.check_box :require_admin_approval_after_user_signup, class: 'form-check-input'
+ = f.check_box :require_admin_approval_after_user_signup, class: 'form-check-input', data: { qa_selector: 'require_admin_approval_after_user_signup_checkbox' }
= f.label :require_admin_approval_after_user_signup, class: 'form-check-label' do
= _('Require admin approval for new sign-ups')
.form-text.text-muted
@@ -77,4 +77,4 @@
= f.label :after_sign_up_text, class: 'label-bold'
= f.text_area :after_sign_up_text, class: 'form-control', rows: 4
.form-text.text-muted Markdown enabled
- = f.submit 'Save changes', class: "gl-button btn btn-success"
+ = f.submit 'Save changes', class: "gl-button btn btn-success", data: { qa_selector: 'save_changes_button' }
diff --git a/app/views/admin/application_settings/general.html.haml b/app/views/admin/application_settings/general.html.haml
index 5c3f68843a2..f72a370c634 100644
--- a/app/views/admin/application_settings/general.html.haml
+++ b/app/views/admin/application_settings/general.html.haml
@@ -35,7 +35,7 @@
.settings-content
= render 'diff_limits'
-%section.settings.as-signup.no-animate#js-signup-settings{ class: ('expanded' if expanded_by_default?) }
+%section.settings.as-signup.no-animate#js-signup-settings{ class: ('expanded' if expanded_by_default?), data: { qa_selector: 'sign_up_restrictions_settings_content' } }
.settings-header
%h4
= _('Sign-up restrictions')
diff --git a/app/views/admin/users/_approve_user.html.haml b/app/views/admin/users/_approve_user.html.haml
index b4d960d909c..f61c9fa4b80 100644
--- a/app/views/admin/users/_approve_user.html.haml
+++ b/app/views/admin/users/_approve_user.html.haml
@@ -4,4 +4,4 @@
.card-body
= render partial: 'admin/users/user_approve_effects'
%br
- = link_to s_('AdminUsers|Approve user'), approve_admin_user_path(user), method: :put, class: "btn gl-button btn-info", data: { confirm: s_('AdminUsers|Are you sure?') }
+ = link_to s_('AdminUsers|Approve user'), approve_admin_user_path(user), method: :put, class: "btn gl-button btn-info", data: { confirm: s_('AdminUsers|Are you sure?'), qa_selector: 'approve_user_button' }
diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml
index 2e179d2d845..18f6fd51ca5 100644
--- a/app/views/admin/users/index.html.haml
+++ b/app/views/admin/users/index.html.haml
@@ -31,7 +31,7 @@
= s_('AdminUsers|Blocked')
%small.badge.badge-pill= limited_counter_with_delimiter(User.blocked)
= nav_link(html_options: { class: "#{active_when(params[:filter] == 'blocked_pending_approval')} filter-blocked-pending-approval" }) do
- = link_to admin_users_path(filter: "blocked_pending_approval") do
+ = link_to admin_users_path(filter: "blocked_pending_approval"), data: { qa_selector: 'pending_approval_tab' } do
= s_('AdminUsers|Pending approval')
%small.badge.badge-pill= limited_counter_with_delimiter(User.blocked_pending_approval)
= nav_link(html_options: { class: active_when(params[:filter] == 'deactivated') }) do
diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml
index 9526ab9fb3a..767bba78e4e 100644
--- a/app/views/admin/users/show.html.haml
+++ b/app/views/admin/users/show.html.haml
@@ -42,7 +42,7 @@
= sprite_icon('close', size: 16, css_class: 'gl-icon')
%li
%span.light ID:
- %strong
+ %strong{ data: { qa_selector: 'user_id_content' } }
= @user.id
%li
%span.light= _('Namespace ID:')
diff --git a/doc/api/group_clusters.md b/doc/api/group_clusters.md
index 7f85379474f..88c35329733 100644
--- a/doc/api/group_clusters.md
+++ b/doc/api/group_clusters.md
@@ -8,6 +8,11 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/30213) in GitLab 12.1.
+Similar to [project-level](../user/project/clusters/index.md) and
+[instance-level](../user/instance/clusters/index.md) Kubernetes clusters,
+group-level Kubernetes clusters allow you to connect a Kubernetes cluster to
+your group, enabling you to use the same cluster across multiple projects.
+
Users need at least [Maintainer](../user/permissions.md) access for the group to use these endpoints.
## List group clusters
diff --git a/doc/subscriptions/gitlab_com/index.md b/doc/subscriptions/gitlab_com/index.md
index 09fe6e90e19..881f311313d 100644
--- a/doc/subscriptions/gitlab_com/index.md
+++ b/doc/subscriptions/gitlab_com/index.md
@@ -301,9 +301,9 @@ Be aware that:
be deducted from your Additional Minutes quota immediately after your purchase of additional
minutes.
-## Customers portal
+## Customers Portal
-GitLab provides a [customer portal](../index.md#customers-portal) where you can
+GitLab provides the [Customers Portal](../index.md#customers-portal) where you can
manage your subscriptions and your account details.
## Contact Support
diff --git a/doc/subscriptions/index.md b/doc/subscriptions/index.md
index c4214d3565d..a6116296641 100644
--- a/doc/subscriptions/index.md
+++ b/doc/subscriptions/index.md
@@ -77,7 +77,7 @@ With the [Customers Portal](https://customers.gitlab.com/) you can:
- [Change your payment method](#change-your-payment-method)
- [Change the linked account](#change-the-linked-account)
- [Change the associated namespace](#change-the-associated-namespace)
-- [Change customers portal account password](#change-customer-portal-account-password)
+- [Change customers portal account password](#change-customers-portal-account-password)
### Change your personal details
@@ -154,7 +154,7 @@ With a linked GitLab.com account:
Subscription charges are calculated based on the total number of users in a group, including its subgroups and nested projects. If the total number of users exceeds the number of seats in your subscription, your account is charged for the additional users.
-### Change customer portal account password
+### Change Customers Portal account password
To change the password for this customers portal account:
diff --git a/doc/subscriptions/self_managed/index.md b/doc/subscriptions/self_managed/index.md
index 01cd2c331f3..d541413606e 100644
--- a/doc/subscriptions/self_managed/index.md
+++ b/doc/subscriptions/self_managed/index.md
@@ -315,9 +315,9 @@ only.
However, if you remove the license, you immediately revert to Core
features, and the instance become read / write again.
-## Customers portal
+## Customers Portal
-GitLab provides a [customer portal](../index.md#customers-portal) where you can
+GitLab provides the [Customers Portal](../index.md#customers-portal) where you can
manage your subscriptions and your account details.
## Contact Support
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index cfc1fd67187..fd14af60b9a 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -11375,11 +11375,6 @@ msgstr ""
msgid "Failed"
msgstr ""
-msgid "Failed %d time in the last 14 days"
-msgid_plural "Failed %d times in the last 14 days"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "Failed Jobs"
msgstr ""
@@ -22939,10 +22934,9 @@ msgid "Reports|%{recentlyFailed} out of %{failed} failed test has failed more th
msgstr ""
msgid "Reports|%{recentlyFailed} out of %{failed} failed tests has failed more than once in the last 14 days"
-msgstr ""
-
-msgid "Reports|%{recentlyFailed} out of %{failed} failed tests have failed more than once in the last 14 days"
-msgstr ""
+msgid_plural "Reports|%{recentlyFailed} out of %{failed} failed tests have failed more than once in the last 14 days"
+msgstr[0] ""
+msgstr[1] ""
msgid "Reports|Accessibility scanning detected %d issue for the source branch only"
msgid_plural "Reports|Accessibility scanning detected %d issues for the source branch only"
@@ -22976,6 +22970,11 @@ msgstr ""
msgid "Reports|Execution time"
msgstr ""
+msgid "Reports|Failed %{count} time in %{base_branch} in the last 14 days"
+msgid_plural "Reports|Failed %{count} times in %{base_branch} in the last 14 days"
+msgstr[0] ""
+msgstr[1] ""
+
msgid "Reports|Failure"
msgstr ""
@@ -26699,9 +26698,6 @@ msgstr ""
msgid "Telephone number"
msgstr ""
-msgid "Telephone number (Optional)"
-msgstr ""
-
msgid "Template"
msgstr ""
diff --git a/qa/qa.rb b/qa/qa.rb
index ee7f97e64b1..91058038c80 100644
--- a/qa/qa.rb
+++ b/qa/qa.rb
@@ -20,6 +20,7 @@ module QA
autoload :User, 'qa/flow/user'
autoload :MergeRequest, 'qa/flow/merge_request'
autoload :Pipeline, 'qa/flow/pipeline'
+ autoload :SignUp, 'qa/flow/sign_up'
end
##
@@ -181,10 +182,14 @@ module QA
autoload :Menu, 'qa/page/main/menu'
autoload :OAuth, 'qa/page/main/oauth'
autoload :TwoFactorAuth, 'qa/page/main/two_factor_auth'
- autoload :SignUp, 'qa/page/main/sign_up'
autoload :Terms, 'qa/page/main/terms'
end
+ module Registration
+ autoload :SignUp, 'qa/page/registration/sign_up'
+ autoload :Welcome, 'qa/page/registration/welcome'
+ end
+
module Settings
autoload :Common, 'qa/page/settings/common'
end
@@ -431,6 +436,7 @@ module QA
autoload :OutboundRequests, 'qa/page/admin/settings/component/outbound_requests'
autoload :AccountAndLimit, 'qa/page/admin/settings/component/account_and_limit'
autoload :PerformanceBar, 'qa/page/admin/settings/component/performance_bar'
+ autoload :SignUpRestrictions, 'qa/page/admin/settings/component/sign_up_restrictions'
end
end
diff --git a/qa/qa/flow/sign_up.rb b/qa/qa/flow/sign_up.rb
new file mode 100644
index 00000000000..7dc1bf2a455
--- /dev/null
+++ b/qa/qa/flow/sign_up.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+module QA
+ module Flow
+ module SignUp
+ module_function
+
+ def sign_up!(user)
+ Page::Main::Login.perform(&:switch_to_register_page)
+
+ success = Support::Retrier.retry_until(raise_on_failure: false) do
+ Page::Registration::SignUp.perform do |sign_up|
+ sign_up.fill_new_user_first_name_field(user.first_name)
+ sign_up.fill_new_user_last_name_field(user.last_name)
+ sign_up.fill_new_user_username_field(user.username)
+ sign_up.fill_new_user_email_field(user.email)
+ sign_up.fill_new_user_password_field(user.password)
+ sign_up.click_new_user_register_button
+ end
+
+ # Because invisible_captcha would prevent submitting this form
+ # within 4 seconds, sleep here. This can be removed once we
+ # implement invisible_captcha as an application setting instead
+ # of a feature flag, so we can turn it off while testing.
+ # Issue: https://gitlab.com/gitlab-org/gitlab/-/issues/284113
+ sleep 4
+
+ Page::Registration::Welcome.perform(&:click_get_started_button_if_available)
+
+ if user.expect_fabrication_success
+ Page::Main::Menu.perform(&:has_personal_area?)
+ else
+ Page::Main::Menu.perform(&:not_signed_in?)
+ end
+ end
+
+ raise "Failed to register the user" unless success
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/admin/overview/users/index.rb b/qa/qa/page/admin/overview/users/index.rb
index e374c1bf281..fea95fdb84a 100644
--- a/qa/qa/page/admin/overview/users/index.rb
+++ b/qa/qa/page/admin/overview/users/index.rb
@@ -8,6 +8,7 @@ module QA
class Index < QA::Page::Base
view 'app/views/admin/users/index.html.haml' do
element :user_search_field
+ element :pending_approval_tab
end
view 'app/views/admin/users/_user.html.haml' do
@@ -22,6 +23,10 @@ module QA
find_element(:user_search_field).set(username).send_keys(:return)
end
+ def click_pending_approval_tab
+ click_element :pending_approval_tab
+ end
+
def click_user(username)
within_element(:user_row_content, text: username) do
click_element(:username_link)
diff --git a/qa/qa/page/admin/overview/users/show.rb b/qa/qa/page/admin/overview/users/show.rb
index f15ef0492fc..f455bd31d14 100644
--- a/qa/qa/page/admin/overview/users/show.rb
+++ b/qa/qa/page/admin/overview/users/show.rb
@@ -12,17 +12,32 @@ module QA
view 'app/views/admin/users/show.html.haml' do
element :confirm_user_button
+ element :user_id_content
+ end
+
+ view 'app/views/admin/users/_approve_user.html.haml' do
+ element :approve_user_button
end
def click_impersonate_user
click_element(:impersonate_user_link)
end
+ def user_id
+ find_element(:user_id_content).text
+ end
+
def confirm_user
accept_confirm do
click_element :confirm_user_button
end
end
+
+ def approve_user
+ accept_confirm do
+ click_element :approve_user_button
+ end
+ end
end
end
end
diff --git a/qa/qa/page/admin/settings/component/sign_up_restrictions.rb b/qa/qa/page/admin/settings/component/sign_up_restrictions.rb
new file mode 100644
index 00000000000..8c5b4bf506b
--- /dev/null
+++ b/qa/qa/page/admin/settings/component/sign_up_restrictions.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Admin
+ module Settings
+ module Component
+ class SignUpRestrictions < Page::Base
+ view 'app/views/admin/application_settings/_signup.html.haml' do
+ element :require_admin_approval_after_user_signup_checkbox
+ element :save_changes_button
+ end
+
+ def require_admin_approval_after_user_signup
+ check_element :require_admin_approval_after_user_signup_checkbox
+ click_element :save_changes_button
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/admin/settings/general.rb b/qa/qa/page/admin/settings/general.rb
index 7e35902a778..a2457dded7c 100644
--- a/qa/qa/page/admin/settings/general.rb
+++ b/qa/qa/page/admin/settings/general.rb
@@ -9,6 +9,7 @@ module QA
view 'app/views/admin/application_settings/general.html.haml' do
element :account_and_limit_settings_content
+ element :sign_up_restrictions_settings_content
end
def expand_account_and_limit(&block)
@@ -16,6 +17,12 @@ module QA
Component::AccountAndLimit.perform(&block)
end
end
+
+ def expand_sign_up_restrictions(&block)
+ expand_content(:sign_up_restrictions_settings_content) do
+ Component::SignUpRestrictions.perform(&block)
+ end
+ end
end
end
end
diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb
index 9c63ddee890..627809dacf2 100644
--- a/qa/qa/page/main/menu.rb
+++ b/qa/qa/page/main/menu.rb
@@ -93,6 +93,10 @@ module QA
has_personal_area?(wait: 0)
end
+ def not_signed_in?
+ has_no_personal_area?
+ end
+
def sign_out
retry_until do
wait_if_retry_later
@@ -129,6 +133,10 @@ module QA
has_element?(:user_avatar, wait: wait)
end
+ def has_no_personal_area?(wait: Capybara.default_max_wait_time)
+ has_no_element?(:user_avatar, wait: wait)
+ end
+
def has_admin_area_link?(wait: Capybara.default_max_wait_time)
has_element?(:admin_area_link, wait: wait)
end
diff --git a/qa/qa/page/main/sign_up.rb b/qa/qa/page/main/sign_up.rb
deleted file mode 100644
index 7da682976e7..00000000000
--- a/qa/qa/page/main/sign_up.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# frozen_string_literal: true
-
-module QA
- module Page
- module Main
- class SignUp < Page::Base
- view 'app/views/devise/shared/_signup_box.html.haml' do
- element :new_user_first_name_field
- element :new_user_last_name_field
- element :new_user_username_field
- element :new_user_email_field
- element :new_user_password_field
- element :new_user_register_button
- end
-
- view 'app/views/registrations/welcome/show.html.haml' do
- element :get_started_button
- end
-
- def sign_up!(user)
- signed_in = retry_until(raise_on_failure: false) do
- fill_element :new_user_first_name_field, user.first_name
- fill_element :new_user_last_name_field, user.last_name
- fill_element :new_user_username_field, user.username
- fill_element :new_user_email_field, user.email
- fill_element :new_user_password_field, user.password
-
- # Because invisible_captcha would prevent submitting this form
- # within 4 seconds, sleep here. This can be removed once we
- # implement invisible_captcha as an application setting instead
- # of a feature flag, so we can turn it off while testing.
- # Issue: https://gitlab.com/gitlab-org/gitlab/-/issues/284113
- sleep 4
-
- click_element :new_user_register_button if has_element?(:new_user_register_button)
- click_element :get_started_button if has_element?(:get_started_button)
-
- Page::Main::Menu.perform(&:has_personal_area?)
- end
-
- raise "Failed to register and sign in" unless signed_in
- end
- end
- end
- end
-end
-
-QA::Page::Main::SignUp.prepend_if_ee('QA::EE::Page::Main::SignUp')
diff --git a/qa/qa/page/registration/sign_up.rb b/qa/qa/page/registration/sign_up.rb
new file mode 100644
index 00000000000..0fb4b466e62
--- /dev/null
+++ b/qa/qa/page/registration/sign_up.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Registration
+ class SignUp < Page::Base
+ view 'app/views/devise/shared/_signup_box.html.haml' do
+ element :new_user_first_name_field
+ element :new_user_last_name_field
+ element :new_user_username_field
+ element :new_user_email_field
+ element :new_user_password_field
+ element :new_user_register_button
+ end
+
+ view 'app/views/registrations/welcome/show.html.haml' do
+ element :get_started_button
+ end
+
+ def fill_new_user_first_name_field(first_name)
+ fill_element :new_user_first_name_field, first_name
+ end
+
+ def fill_new_user_last_name_field(last_name)
+ fill_element :new_user_last_name_field, last_name
+ end
+
+ def fill_new_user_username_field(username)
+ fill_element :new_user_username_field, username
+ end
+
+ def fill_new_user_email_field(email)
+ fill_element :new_user_email_field, email
+ end
+
+ def fill_new_user_password_field(password)
+ fill_element :new_user_password_field, password
+ end
+
+ def click_new_user_register_button
+ click_element :new_user_register_button if has_element?(:new_user_register_button)
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/registration/welcome.rb b/qa/qa/page/registration/welcome.rb
new file mode 100644
index 00000000000..32808176eff
--- /dev/null
+++ b/qa/qa/page/registration/welcome.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Registration
+ class Welcome < Page::Base
+ view 'app/views/registrations/welcome/show.html.haml' do
+ element :get_started_button
+ end
+
+ def click_get_started_button_if_available
+ click_element :get_started_button if has_element?(:get_started_button)
+ end
+ end
+ end
+ end
+end
+
+QA::Page::Registration::Welcome.prepend_if_ee('QA::EE::Page::Registration::Welcome')
diff --git a/qa/qa/resource/user.rb b/qa/qa/resource/user.rb
index ca30ff12480..f95a68918dc 100644
--- a/qa/qa/resource/user.rb
+++ b/qa/qa/resource/user.rb
@@ -7,7 +7,7 @@ module QA
class User < Base
attr_reader :unique_id
attr_writer :username, :password
- attr_accessor :admin, :provider, :extern_uid
+ attr_accessor :admin, :provider, :extern_uid, :expect_fabrication_success
attribute :id
attribute :name
@@ -18,6 +18,7 @@ module QA
def initialize
@admin = false
@unique_id = SecureRandom.hex(8)
+ @expect_fabrication_success = true
end
def admin?
@@ -74,12 +75,7 @@ module QA
login.sign_in_using_credentials(user: self)
end
else
- Page::Main::Login.perform do |login|
- login.switch_to_register_page
- end
- Page::Main::SignUp.perform do |signup|
- signup.sign_up!(self)
- end
+ Flow::SignUp.sign_up!(self)
end
end
diff --git a/qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb
index 2bb03b6154f..f18dedf1359 100644
--- a/qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb
+++ b/qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb
@@ -26,7 +26,7 @@ module QA
ldap_username = Runtime::Env.ldap_username
Runtime::Env.ldap_username = nil
- disable_require_admin_approval_after_user_signup
+ set_require_admin_approval_after_user_signup_via_api(false)
Runtime::Env.ldap_username = ldap_username
end
@@ -39,60 +39,135 @@ module QA
end
describe 'standard', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/936' do
- before(:all) do
- disable_require_admin_approval_after_user_signup
+ context 'when admin approval is not required' do
+ before(:all) do
+ set_require_admin_approval_after_user_signup_via_api(false)
+ end
+
+ it_behaves_like 'registration and login'
+
+ context 'when user account is deleted' do
+ let(:user) do
+ Resource::User.fabricate_via_api! do |resource|
+ resource.api_client = admin_api_client
+ end
+ end
+
+ before do
+ # Use the UI instead of API to delete the account since
+ # this is the only test that exercise this UI.
+ # Other tests should use the API for this purpose.
+ Flow::Login.sign_in(as: user)
+ Page::Main::Menu.perform(&:click_settings_link)
+ Page::Profile::Menu.perform(&:click_account)
+ Page::Profile::Accounts::Show.perform do |show|
+ show.delete_account(user.password)
+ end
+ end
+
+ it 'allows recreating with same credentials', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/937' do
+ expect(Page::Main::Menu.perform(&:signed_in?)).to be_falsy
+
+ Flow::Login.sign_in(as: user, skip_page_validation: true)
+
+ expect(page).to have_text("Invalid Login or password")
+
+ @recreated_user = Resource::User.fabricate_via_browser_ui! do |resource|
+ resource.name = user.name
+ resource.username = user.username
+ resource.email = user.email
+ end
+
+ expect(Page::Main::Menu.perform(&:signed_in?)).to be_truthy
+ end
+
+ after do
+ @recreated_user.remove_via_api!
+ end
+
+ def admin_api_client
+ @admin_api_client ||= Runtime::API::Client.as_admin
+ end
+ end
end
- it_behaves_like 'registration and login'
-
- context 'when user account is deleted' do
- let(:user) do
- Resource::User.fabricate_via_api! do |resource|
- resource.api_client = admin_api_client
- end
- end
+ context 'when admin approval is required' do
+ let(:signed_up_waiting_approval_text) { 'You have signed up successfully. However, we could not sign you in because your account is awaiting approval from your GitLab administrator.' }
+ let(:pending_approval_blocked_text) { 'Your account is pending approval from your GitLab administrator and hence blocked. Please contact your GitLab administrator if you think this is an error.' }
before do
- # Use the UI instead of API to delete the account since
- # this is the only test that exercise this UI.
- # Other tests should use the API for this purpose.
- Flow::Login.sign_in(as: user)
- Page::Main::Menu.perform(&:click_settings_link)
- Page::Profile::Menu.perform(&:click_account)
- Page::Profile::Accounts::Show.perform do |show|
- show.delete_account(user.password)
+ enable_require_admin_approval_after_user_signup_via_ui
+
+ @user = Resource::User.fabricate_via_browser_ui! do |user|
+ user.expect_fabrication_success = false
end
end
- it 'allows recreating with same credentials', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/937' do
- expect(Page::Main::Menu.perform(&:signed_in?)).to be_falsy
+ it 'allows user login after approval', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1076' do
+ expect(page).to have_text(signed_up_waiting_approval_text)
- Flow::Login.sign_in(as: user, skip_page_validation: true)
+ Flow::Login.sign_in(as: @user, skip_page_validation: true)
- expect(page).to have_text("Invalid Login or password")
+ expect(page).to have_text(pending_approval_blocked_text)
- @recreated_user = Resource::User.fabricate_via_browser_ui! do |resource|
- resource.name = user.name
- resource.username = user.username
- resource.email = user.email
+ approve_user(@user)
+
+ Flow::Login.sign_in(as: @user, skip_page_validation: true)
+
+ Page::Registration::Welcome.perform(&:click_get_started_button_if_available)
+
+ Page::Main::Menu.perform do |menu|
+ expect(menu).to have_personal_area
end
-
- expect(Page::Main::Menu.perform(&:signed_in?)).to be_truthy
end
after do
- @recreated_user.remove_via_api!
- end
-
- def admin_api_client
- @admin_api_client ||= Runtime::API::Client.as_admin
+ @user.remove_via_api! if @user
end
end
end
- def disable_require_admin_approval_after_user_signup
- Runtime::ApplicationSettings.set_application_settings(require_admin_approval_after_user_signup: false)
+ def approve_user(user)
+ Flow::Login.while_signed_in_as_admin do
+ Page::Main::Menu.perform(&:go_to_admin_area)
+ Page::Admin::Menu.perform(&:go_to_users_overview)
+ Page::Admin::Overview::Users::Index.perform do |index|
+ index.click_pending_approval_tab
+ index.search_user(user.username)
+ index.click_user(user.username)
+ end
+
+ Page::Admin::Overview::Users::Show.perform do |show|
+ user.id = show.user_id.to_i
+ show.approve_user
+ end
+
+ expect(page).to have_text('Successfully approved')
+ end
+ end
+
+ def set_require_admin_approval_after_user_signup_via_api(enable_or_disable)
+ return if Runtime::ApplicationSettings.get_application_settings[:require_admin_approval_after_user_signup] == enable_or_disable
+
+ Runtime::ApplicationSettings.set_application_settings(require_admin_approval_after_user_signup: enable_or_disable)
+
sleep 10 # It takes a moment for the setting to come into effect
end
+
+ def enable_require_admin_approval_after_user_signup_via_ui
+ unless Runtime::ApplicationSettings.get_application_settings[:require_admin_approval_after_user_signup]
+ Flow::Login.while_signed_in_as_admin do
+ Page::Main::Menu.perform(&:go_to_admin_area)
+ QA::Page::Admin::Menu.perform(&:go_to_general_settings)
+ Page::Admin::Settings::General.perform do |setting|
+ setting.expand_sign_up_restrictions do |settings|
+ settings.require_admin_approval_after_user_signup
+ end
+ end
+ end
+
+ sleep 10 # It takes a moment for the setting to come into effect
+ end
+ end
end
end
diff --git a/spec/frontend/reports/components/grouped_test_reports_app_spec.js b/spec/frontend/reports/components/grouped_test_reports_app_spec.js
index ae2718db17f..66d429017b2 100644
--- a/spec/frontend/reports/components/grouped_test_reports_app_spec.js
+++ b/spec/frontend/reports/components/grouped_test_reports_app_spec.js
@@ -264,7 +264,9 @@ describe('Grouped test reports app', () => {
});
it('renders the recent failures count on the test case', () => {
- expect(findIssueDescription().text()).toContain('Failed 8 times in the last 14 days');
+ expect(findIssueDescription().text()).toContain(
+ 'Failed 8 times in master in the last 14 days',
+ );
});
});
diff --git a/spec/frontend/reports/mock_data/recent_failures_report.json b/spec/frontend/reports/mock_data/recent_failures_report.json
index a47bc30a8e5..bc86d788ee2 100644
--- a/spec/frontend/reports/mock_data/recent_failures_report.json
+++ b/spec/frontend/reports/mock_data/recent_failures_report.json
@@ -10,7 +10,10 @@
"name": "Test#sum when a is 1 and b is 2 returns summary",
"execution_time": 0.009411,
"system_output": "Failure/Error: is_expected.to eq(3)\n\n expected: 3\n got: -1\n\n (compared using ==)\n./spec/test_spec.rb:12:in `block (4 levels) in