Skip to content

Commit 0b9fafe

Browse files
bivanalharcysjonathan
authored andcommitted
fix(instanceUser): fix email search flaky test
- include only human users inside the Instance Admin Table - scope InstanceUser inside test to only include human_users - split flaky email search in system admin user management
1 parent ff920c8 commit 0b9fafe

File tree

4 files changed

+18
-15
lines changed

4 files changed

+18
-15
lines changed

app/controllers/system/admin/instance/users_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def destroy
3333
private
3434

3535
def load_instance_users
36-
@instance_users = @instance.instance_users.includes(user: [:emails, :courses]).
36+
@instance_users = @instance.instance_users.human_users.includes(user: [:emails, :courses]).
3737
search_and_ordered_by_username(search_param)
3838
@instance_users = @instance_users.active_in_past_7_days if ActiveRecord::Type::Boolean.new.cast(params[:active])
3939
@instance_users = @instance_users.where(role: params[:role]) \

app/models/instance_user.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class InstanceUser < ApplicationRecord
1616
belongs_to :user, inverse_of: :instance_users
1717

1818
scope :ordered_by_username, -> { joins(:user).merge(User.order(name: :asc)) }
19+
scope :human_users, -> { where.not(user_id: [User::SYSTEM_USER_ID, User::DELETED_USER_ID]) }
1920
scope :active_in_past_7_days, -> { where('last_active_at > ?', 7.days.ago) }
2021

2122
def self.search_and_ordered_by_username(keyword)

spec/features/system/admin/instance/user_management_spec.rb

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
with_tenant(:instance) do
88
let(:instance_admin) { create(:instance_user, role: :administrator).user }
9-
let!(:prefix) { "testadm-#{rand(36**12).to_s(36)}-usr-" }
9+
let!(:prefix) { "testadm-#{SecureRandom.hex}-usr-" }
1010
let!(:instance_users) do
1111
(1..2).map do |i|
1212
create(:instance_user, user_name: "#{prefix}#{i}")
@@ -72,25 +72,23 @@ def search_for_users(query, click: true)
7272

7373
# Generate new users to search so it doesn't conflict with above scenarios
7474
scenario 'I can search users by name' do
75-
search_prefix = "testadm-search-#{rand(36**12).to_s(36)}-usr-"
76-
instance_users_to_search = (1..2).map do |i|
77-
create(:instance_user, user_name: "#{search_prefix}#{i}")
78-
end
75+
user_name = SecureRandom.hex
76+
instance_users_to_search = create_list(:instance_user, 2, user_name: user_name)
7977

8078
# Search by username
81-
search_for_users(search_prefix)
79+
search_for_users(user_name)
8280

8381
instance_users_to_search.each do |instance_user|
84-
expect(page).to have_text(instance_user.user.name)
82+
expect(page).to have_selector('p.user_email', text: instance_user.user.email)
8583
end
8684
expect(page).to have_selector('.instance_user', count: 2)
8785
end
8886

8987
scenario 'I can search users by email' do
90-
random_instance_user = InstanceUser.order('RANDOM()').first
88+
random_instance_user = InstanceUser.human_users.order('RANDOM()').first
9189
search_for_users(random_instance_user.user.email)
9290

93-
expect(page).to have_text(random_instance_user.user.name)
91+
expect(page).to have_selector('p.user_email', text: random_instance_user.user.email)
9492
expect(page).to have_selector('.instance_user', count: 1)
9593
end
9694
end

spec/features/system/admin/user_management_spec.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,26 +62,30 @@
6262
expect_toastify('User was deleted.')
6363
end
6464

65-
scenario 'I can search users' do
65+
scenario 'I can search users by name' do
6666
user_name = SecureRandom.hex
6767
users_to_search = create_list(:user, 2, name: user_name)
6868

69-
# Search by username
7069
find_button('Search').click
7170
find('div[aria-label="Search"]').find('input').set(user_name)
7271

7372
wait_for_field_debouncing # timeout for search debouncing
7473
users_to_search.each do |user|
75-
expect(page).to have_selector('div.user_name', text: user.name)
74+
expect(page).to have_selector('p.user_email', text: user.email)
7675
end
7776
expect(all('.system_user').count).to eq(2)
77+
end
7878

79-
# Search by email
79+
scenario 'I can search users by email' do
80+
user_name = SecureRandom.hex
81+
users_to_search = create_list(:user, 2, name: user_name)
82+
83+
find_button('Search').click
8084
random_user = users_to_search.sample
8185
find('div[aria-label="Search"]').find('input').set(random_user.email)
8286
wait_for_field_debouncing # timeout for search debouncing
8387

84-
expect(page).to have_selector('div.user_name', text: random_user.name)
88+
expect(page).to have_selector('p.user_email', text: random_user.email)
8589
expect(all('.system_user').count).to eq(1)
8690
end
8791
end

0 commit comments

Comments
 (0)