Skip to content

Commit 817cac6

Browse files
committed
fix(tests): fix flaky tests
- Remove instances of `Capybara.enable_aria_label = false`, as this causes parallel tests which rely on `aria_label` to find elements to fail, e.g. fixes flakiness in `admin/user_management_spec` - Re-enable `admin/course_management_spec` for searching courses, previously flaky due to the `aria_label` issue - Fix flaky `features/course/experience_points/forum_disbursement_spec` "As a Course Teaching Assistant: I can compute and award forum participation points" due to MUI DateTimePicker space key behaviour - Fix flaky `features/system/admin/user_management_spec.rb` "As a System Administrator: I can change a user's record" due to occasionally randomly sampling user who is already admin role.
1 parent 59f83e2 commit 817cac6

File tree

5 files changed

+16
-31
lines changed

5 files changed

+16
-31
lines changed

spec/features/course/assessment_management_spec.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@
4444

4545
expect do
4646
find('svg[data-testid="DeleteIcon"]').click
47-
Capybara.enable_aria_label = false
48-
click_button 'Delete Assessment'
47+
find('button.prompt-primary-btn').click
4948
expect_toastify('Assessment successfully deleted.')
5049
end.to change { course.reload.assessments.count }.by(-1)
5150

spec/features/course/material/folder_management_spec.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,14 @@
102102
end
103103

104104
scenario 'I can upload a file to the folder' do
105-
Capybara.enable_aria_label = false
106105
file1 = File.join(Rails.root, '/spec/fixtures/files/text.txt')
107106
file2 = File.join(Rails.root, '/spec/fixtures/files/text2.txt')
108107

109108
find('#upload-files-button').click
110109
find('input[type="file"]', visible: false).attach_file([file1, file2], make_visible: true)
111110

112111
expect do
113-
click_button 'Upload'
112+
find('button#material-upload-form-upload-button').click
114113
wait_for_page
115114
end.to change { parent_folder.materials.count }.by(2)
116115
end
@@ -158,7 +157,6 @@
158157
end
159158

160159
scenario 'I can upload a file to the folder' do
161-
Capybara.enable_aria_label = false
162160
folder = create(:folder, parent: parent_folder, course: course, can_student_upload: true)
163161
file1 = File.join(Rails.root, '/spec/fixtures/files/text.txt')
164162
file2 = File.join(Rails.root, '/spec/fixtures/files/text2.txt')
@@ -168,7 +166,7 @@
168166
find('input[type="file"]', visible: false).attach_file([file1, file2], make_visible: true)
169167

170168
expect do
171-
click_button 'Upload'
169+
find('button#material-upload-form-upload-button').click
172170
wait_for_page
173171
end.to change { folder.materials.count }.by(2)
174172

spec/features/system/admin/course_management_spec.rb

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,23 @@
1111
courses.first.update_column(:instance_id, other_instance.id)
1212
Course.unscoped.ordered_by_title.first(15)
1313
end
14-
let(:active_course) do
14+
let!(:active_course) do
1515
course = create(:course)
1616
create_list(:course_student, 5, last_active_at: 1.day.ago, course: course)
1717
course
1818
end
19-
let(:inactive_course) do
19+
let!(:inactive_course) do
2020
Course.unscoped.where.not(id: Course.unscoped.active_in_past_7_days.pluck(:id)).sample || create(:course)
2121
end
22+
# use ordered_by_title.first ensure course is the first in the list to delete without need to search
23+
let!(:course_to_delete) { create(:course, title: Course.unscoped.ordered_by_title.first.title) }
24+
let!(:course_to_search) { create(:course) }
2225

2326
context 'As a System Administrator' do
2427
let(:admin) { create(:administrator) }
25-
before { login_as(admin, scope: :user) }
28+
before { login_as(admin, scope: :user, redirect_url: admin_courses_path) }
2629

2730
scenario 'I can view courses in the system' do
28-
visit admin_courses_path
2931
courses.each do |course|
3032
expect(page).to have_selector("tr.course_#{course.id}", text: course.title)
3133
expect(page).
@@ -34,11 +36,6 @@
3436
end
3537

3638
scenario 'I can filter only active courses' do
37-
active_course
38-
inactive_course
39-
40-
visit admin_courses_path
41-
4239
within find('p', text: 'Active Courses', exact_text: false) do
4340
find_all('a').first.click
4441
end
@@ -56,9 +53,6 @@
5653
end
5754

5855
scenario 'I can delete a course' do
59-
course_to_delete = create(:course, title: Course.unscoped.ordered_by_title.first.title)
60-
visit admin_courses_path
61-
6256
expect_delete_action = expect do
6357
find("button.course-delete-#{course_to_delete.id}").click
6458
expect(page).to have_button('Delete course', disabled: true)
@@ -71,18 +65,10 @@
7165
end
7266

7367
scenario 'I can search courses' do
74-
skip 'Flaky tests'
75-
course_to_search = create(:course)
76-
77-
visit admin_courses_path
78-
wait_for_page
79-
find_button('Search').click
80-
find('div[aria-label="Search"]').find('input').set(course_to_search.title)
81-
82-
wait_for_field_debouncing # timeout for search debouncing
68+
find_field('Search courses by title or owner').set(course_to_search.title)
8369

84-
expect(page).to have_selector('p.course_title', text: course_to_search.title)
85-
expect(all('.course').count).to eq(1)
70+
expect(page).to have_xpath('//tr/td/a', text: course_to_search.title)
71+
expect(page).to have_xpath('//tr[contains(@class, "course_")]', count: 1)
8672
end
8773
end
8874
end

spec/features/system/admin/user_management_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
end
3939

4040
scenario "I can change a user's record" do
41-
user_to_change = users.sample
41+
user_to_change = User.human_users.normal.ordered_by_name.limit(5).sample
4242
new_name = 'updated user name'
4343
within find("tr.system_user_#{user_to_change.id}") do
4444
find('button.inline-edit-button', visible: false).click

spec/support/capybara.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@ def fill_in_rails_summernote(selector, text)
7878

7979
# Special helper to fill in MUI DateTimePicker defined by react.
8080
def fill_in_mui_datetime(field_name, date)
81-
find_field(field_name).send_keys([:control, 'a']).send_keys(date)
81+
# remove space in date DateTimePicker as space key causes input issues
82+
# https://mui.com/x/react-data-grid/accessibility/#navigation
83+
find_field(field_name).send_keys([:control, 'a']).send_keys(date.gsub(' ', ''))
8284
end
8385

8486
# Special helper to find a react-toastify message

0 commit comments

Comments
 (0)