115 lines
4.2 KiB
Ruby
115 lines
4.2 KiB
Ruby
require "application_system_test_case"
|
|
|
|
class ToursTest < ApplicationSystemTestCase
|
|
setup do
|
|
@user_id = Random.rand(1..99999)
|
|
@cookie_name = "walter-dummy-#{@user_id}-dashboard-home-intro"
|
|
ApplicationController.any_instance.stubs(:current_user).returns(OpenStruct.new(id: @user_id))
|
|
end
|
|
|
|
test "see and complete a tour" do
|
|
visit dashboard_home_url
|
|
|
|
# Tour Step 1
|
|
assert_selector ".shepherd-element", visible: true
|
|
assert_selector ".shepherd-text", text: "ENGLISH This first HOME step is centered text-only"
|
|
assert_selector ".shepherd-button", text: "Later"
|
|
assert_selector ".shepherd-button", text: "Continue"
|
|
find(".shepherd-button", text: "Continue").click
|
|
|
|
# Now try to manually trigger another tour
|
|
find('#show_manual').click
|
|
# Even though we triggered another tour, it should not appear since one is already active
|
|
assert_selector ".shepherd-element", count: 1, visible: true
|
|
|
|
# Tour Step 2
|
|
assert_selector ".shepherd-header", text: "ENGLISH This step has a title"
|
|
assert_selector ".shepherd-text", text: "ENGLISH This intermediate step has some text"
|
|
assert_selector ".shepherd-button", text: "Exit"
|
|
assert_selector ".shepherd-button", text: "Next"
|
|
find(".shepherd-button", text: "Next").click
|
|
|
|
# Tour Step 3 (should be skipped)
|
|
refute_selector ".shepherd-header", text: "ENGLISH A missing step"
|
|
|
|
# Tour Step 4
|
|
assert_selector ".shepherd-header", text: "ENGLISH The final step"
|
|
assert_selector ".shepherd-text", text: "ENGLISH Some text here too, and it's attached to the right"
|
|
assert_selector ".shepherd-arrow", visible: true
|
|
assert_selector ".shepherd-button", text: "Done"
|
|
find(".shepherd-button", text: "Done").click
|
|
|
|
# Tour should no longer be visible
|
|
refute_selector ".shepherd-element"
|
|
|
|
# Tour should not reappear on reload
|
|
visit dashboard_home_url
|
|
refute_selector ".shepherd-element"
|
|
|
|
# Now start a manual tour
|
|
find('#show_manual').click
|
|
assert_selector ".shepherd-element", visible: true
|
|
assert_selector ".shepherd-text", text: "You triggered the manual tour"
|
|
assert_selector ".shepherd-button", text: "Done"
|
|
find(".shepherd-button", text: "Done").click
|
|
|
|
# Even though we finished the manual tour, we can start it again right away
|
|
find('#show_manual').click
|
|
assert_selector ".shepherd-element", visible: true
|
|
end
|
|
|
|
test "mark a tour for Later and it will not come back in this session" do
|
|
visit dashboard_home_url
|
|
assert_selector ".shepherd-element", visible: true
|
|
|
|
# Dismiss tour
|
|
find(".shepherd-button", text: "Later").click
|
|
|
|
# Tour should no longer be visible
|
|
refute_selector ".shepherd-element"
|
|
|
|
# Tour should not reappear on reload
|
|
visit dashboard_home_url
|
|
refute_selector ".shepherd-element"
|
|
|
|
# Clear the cookie (simulate browser restart)
|
|
execute_script("Cookies.remove('#{@cookie_name}', { domain: '127.0.0.1' });")
|
|
|
|
# Tour should reappear
|
|
visit dashboard_home_url
|
|
assert_selector ".shepherd-element", visible: true
|
|
end
|
|
|
|
test "navigate with turbolinks between pages with tours" do
|
|
visit dashboard_home_url
|
|
assert_selector ".shepherd-element", visible: true
|
|
# Navigate to other page
|
|
find("a").click
|
|
assert_selector ".shepherd-element", visible: true
|
|
end
|
|
|
|
test "tour with missing first step attachTo does not appear" do
|
|
visit dashboard_missing_url
|
|
# No tour should be visible, since the first step is invalid
|
|
refute_selector ".shepherd-element"
|
|
end
|
|
|
|
test "page with two incomplete tours shows them on consecutive visits" do
|
|
# First tour should appear at first visit
|
|
visit dashboard_other_url
|
|
assert_selector ".shepherd-element", visible: true
|
|
assert_selector ".shepherd-header", text: "TOUR ONE step one ENGLISH"
|
|
find(".shepherd-button", text: "Done").click
|
|
|
|
# Second tour should appear at second visit
|
|
visit dashboard_other_url
|
|
assert_selector ".shepherd-element", visible: true
|
|
assert_selector ".shepherd-header", text: "TOUR TWO step one ENGLISH"
|
|
find(".shepherd-button", text: "Done").click
|
|
|
|
# Now no tours should appear since they're both done
|
|
visit dashboard_other_url
|
|
refute_selector ".shepherd-element"
|
|
end
|
|
end
|