jam-cloud/web/spec/support/client_interactions.rb

126 lines
3.5 KiB
Ruby

# methods here all assume you are in /client
NOTIFICATION_PANEL = '[layout-id="panelNotifications"]'
# enters text into the search sidebar
def site_search(text, options = {})
within('#searchForm') do
fill_in "search-input", with: text
end
if options[:expand]
page.driver.execute_script("jQuery('#searchForm').submit()")
find('h1', text:'search results')
end
end
# goes to the musician tile, and tries to find a musician
def find_musician(user)
visit "/client#/musicians"
timeout = 30
start = Time.now
# scroll by 100px until we find a user with the right id
while page.all('#end-of-musician-list').length == 0
page.execute_script('jQuery("#musician-filter-results").scrollTo("+=100px", 0, {axis:"y"})')
found = page.all(".result-list-button-wrapper[data-musician-id='#{user.id}']")
if found.length == 1
return found[0]
elsif found.length > 1
raise "ambiguous results in musician list"
end
if Time.now - start > timeout
raise "unable to find musician #{user} within #{timeout} seconds"
end
end
raise "unable to find musician #{user}"
end
def initiate_text_dialog(user)
# verify that the chat window is grayed out
site_search(user.first_name, expand: true)
find("#search-results a[user-id=\"#{user.id}\"][hoveraction=\"musician\"]", text: user.name).hover_intent
find('#musician-hover #btnMessage').trigger(:click)
find('h1', text: 'conversation with ' + user.name)
end
# sends a text message in the chat interface.
def send_text_message(msg, options={})
find('#text-message-dialog') # assert that the dialog is showing already
within('#text-message-dialog form.text-message-box') do
fill_in 'new-text-message', with: msg
end
find('#text-message-dialog .btn-send-text-message').trigger(:click)
find('#text-message-dialog .previous-message-text', text: msg) unless options[:should_fail]
# close the dialog if caller specified close_on_send
if options[:close_on_send]
find('#text-message-dialog .btn-close-dialog', text: 'CLOSE').trigger(:click) if options[:close_on_send]
page.should have_no_selector('#text-message-dialog')
end
if options[:should_fail]
find('#notification').should have_text(options[:should_fail])
end
end
# sends a chat message during session
def send_chat_message(msg)
find("[layout-id=\"panelChat\"] .chat-sender").should be_visible
within("[layout-id=\"panelChat\"] .chat-sender form.chat-message-form") do
fill_in 'new-chat-message', with: msg
end
find("[layout-id=\"panelChat\"] .chat-sender .btn-send-chat-message").trigger(:click)
end
def open_notifications
find("#{NOTIFICATION_PANEL} .panel-header").trigger(:click)
end
def hover_intent(element)
element.hover
element.hover
end
# forces document.hasFocus() to return false
def document_blur
page.evaluate_script(%{(function() {
// save original
if(!window.documentFocus) { window.documentFocus = window.document.hasFocus; }
window.document.hasFocus = function() {
console.log("document.hasFocus() returns false");
return false;
}
})()})
end
def document_focus
page.evaluate_script(%{(function() {
// save original
if(!window.documentFocus) { window.documentFocus = window.document.hasFocus; }
window.document.hasFocus = function() {
console.log("document.hasFocus() returns true");
return true;
}
})()})
end
# simulates focus event on window
def window_focus
page.evaluate_script(%{window.jQuery(window).trigger('focus');})
end
def close_websocket
page.evaluate_script("window.JK.JamServer.close(true)")
end