From 05fad2b75e9ae92e145c65f46d4ae8a347c6e246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 7 Apr 2021 15:54:36 +0200 Subject: [PATCH] Fix flaky spec "Notifications User not logged in" We had a test failing several times in GitHub Actions where a user was still logged in even after logout. This issue can be reproduced running: ``` rspec spec/system/moderation/proposal_notifications_spec.rb:71 \ spec/system/notifications_spec.rb:126 --order defined ``` One possible cause is a concurrency issue because the process running the test and the process running the browser both access the same database connection. Maybe some database operations leak between tests due to that, particularly if the previous test accessed the database after starting the browser as well. A way to avoid this possible cause is setting up the database before starting the browser with a call to `visit`. --- spec/system/notifications_spec.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/spec/system/notifications_spec.rb b/spec/system/notifications_spec.rb index 8b4a0d102d5..9046024dedc 100644 --- a/spec/system/notifications_spec.rb +++ b/spec/system/notifications_spec.rb @@ -2,17 +2,14 @@ describe "Notifications" do let(:user) { create :user } - - before do - login_as(user) - visit root_path - end + before { login_as(user) } scenario "View all" do read1 = create(:notification, :read, user: user) read2 = create(:notification, :read, user: user) unread = create(:notification, user: user) + visit root_path click_notifications_icon click_link "Read" @@ -27,6 +24,7 @@ unread2 = create(:notification, user: user) read = create(:notification, :read, user: user) + visit root_path click_notifications_icon click_link "Unread" @@ -40,6 +38,7 @@ proposal = create(:proposal) create(:notification, user: user, notifiable: proposal) + visit root_path click_notifications_icon first(".notification a").click @@ -56,6 +55,7 @@ notification1 = create(:notification, user: user) notification2 = create(:notification, user: user) + visit root_path click_notifications_icon within("#notification_#{notification1.id}") do @@ -70,6 +70,7 @@ scenario "Mark all as read" do 2.times { create(:notification, user: user) } + visit root_path click_notifications_icon expect(page).to have_css(".notification", count: 2) @@ -82,6 +83,7 @@ notification1 = create(:notification, :read, user: user) notification2 = create(:notification, user: user) + visit root_path click_notifications_icon click_link "Read" @@ -115,6 +117,7 @@ end scenario "No notifications" do + visit root_path click_notifications_icon expect(page).to have_content "You don't have new notifications." end @@ -129,6 +132,7 @@ scenario "Notification's notifiable model no longer includes Notifiable module" do create(:notification, :for_poll_question, user: user) + visit root_path click_notifications_icon expect(page).to have_content("This resource is not available anymore.", count: 1) end