zammad/test/browser/chat_test.rb
2016-02-08 21:47:09 +01:00

738 lines
16 KiB
Ruby

# encoding: utf-8
require 'browser_test_helper'
class ChatTest < TestCase
def test_basic
agent = browser_instance
login(
browser: agent,
username: 'master@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all(
browser: agent,
)
# disable chat
click(
browser: agent,
css: 'a[href="#manage"]',
)
click(
browser: agent,
css: 'a[href="#channels/chat"]',
)
switch(
browser: agent,
css: '#content .js-chatSetting',
type: 'off',
)
# nav bar shuld be gone
sleep 2
exists_not(
browser: agent,
css: 'a[href="#customer_chat"]',
)
sleep 15
customer = browser_instance
location(
browser: customer,
url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
)
sleep 4
exists_not(
browser: customer,
css: '.zammad-chat',
)
match(
browser: customer,
css: '.settings',
value: '{"state":"chat_disabled"}',
)
click(
browser: agent,
css: 'a[href="#manage"]',
)
click(
browser: agent,
css: 'a[href="#channels/chat"]',
)
switch(
browser: agent,
css: '#content .js-chatSetting',
type: 'on',
)
sleep 15 # wait for rerendering
switch(
browser: agent,
css: '#navigation .js-switch',
type: 'off',
)
click(
browser: agent,
css: 'a[href="#customer_chat"]',
wait: 2,
)
match_not(
browser: agent,
css: '.active.content',
value: 'disabled',
)
reload(
browser: customer,
)
sleep 4
exists_not(
browser: customer,
css: '.zammad-chat',
)
match_not(
browser: customer,
css: '.settings',
value: '{"state":"chat_disabled"}',
)
match(
browser: customer,
css: '.settings',
value: '{"event":"chat_status_customer","data":{"state":"offline"}}',
)
click(
browser: agent,
css: 'a[href="#customer_chat"]',
)
switch(
browser: agent,
css: '#navigation .js-switch',
type: 'on',
)
reload(
browser: customer,
)
watch_for(
browser: customer,
css: '.zammad-chat',
timeout: 5,
)
match_not(
browser: customer,
css: '.settings',
value: '{"state":"chat_disabled"}',
)
match_not(
browser: customer,
css: '.settings',
value: '{"event":"chat_status_customer","data":{"state":"offline"}}',
)
match(
browser: customer,
css: '.settings',
value: '"data":{"state":"online"}',
)
# init chat
click(
browser: customer,
css: '.js-chat-open',
)
exists(
browser: customer,
css: '.zammad-chat-is-shown',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: '(waiting|warte)',
)
watch_for(
browser: agent,
css: '.js-chatMenuItem .counter',
value: '1',
)
click(
browser: customer,
css: '.js-chat-toggle',
)
watch_for_disappear(
browser: customer,
css: '.zammad-chat',
value: '(waiting|warte)',
)
watch_for_disappear(
browser: agent,
css: '.js-chatMenuItem .counter',
)
end
def test_basic_usecase1
agent = browser_instance
login(
browser: agent,
username: 'master@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all(
browser: agent,
)
click(
browser: agent,
css: 'a[href="#customer_chat"]',
)
agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
customer = browser_instance
location(
browser: customer,
url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
)
watch_for(
browser: customer,
css: '.zammad-chat',
timeout: 5,
)
click(
browser: customer,
css: '.js-chat-open',
)
exists(
browser: customer,
css: '.zammad-chat-is-shown',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: '(waiting|warte)',
)
click(
browser: agent,
css: '.active .js-acceptChat',
)
sleep 2
exists_not(
browser: agent,
css: '.active .chat-window .chat-status.is-modified',
)
set(
browser: agent,
css: '.active .chat-window .js-customerChatInput',
value: 'my name is me',
)
click(
browser: agent,
css: '.active .chat-window .js-send',
)
watch_for(
browser: customer,
css: '.zammad-chat .zammad-chat-agent-status',
value: 'online',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'my name is me',
)
set(
browser: customer,
css: '.zammad-chat .zammad-chat-input',
value: 'my name is customer',
)
click(
browser: customer,
css: '.zammad-chat .zammad-chat-send',
)
watch_for(
browser: agent,
css: '.active .chat-window',
value: 'my name is customer',
)
exists(
browser: agent,
css: '.active .chat-window .chat-status.is-modified',
)
click(
browser: agent,
css: '.active .chat-window .js-customerChatInput',
)
exists_not(
browser: agent,
css: '.active .chat-window .chat-status.is-modified',
)
click(
browser: customer,
css: '.js-chat-toggle',
)
watch_for(
browser: agent,
css: '.active .chat-window',
value: 'closed the conversation',
)
end
def test_basic_usecase2
agent = browser_instance
login(
browser: agent,
username: 'master@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all(
browser: agent,
)
click(
browser: agent,
css: 'a[href="#customer_chat"]',
)
agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
customer = browser_instance
location(
browser: customer,
url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
)
watch_for(
browser: customer,
css: '.zammad-chat',
timeout: 5,
)
click(
browser: customer,
css: '.js-chat-open',
)
exists(
browser: customer,
css: '.zammad-chat-is-shown',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: '(waiting|warte)',
)
click(
browser: agent,
css: '.active .js-acceptChat',
)
sleep 2
exists_not(
browser: agent,
css: '.active .chat-window .chat-status.is-modified',
)
# keep focus outside of chat window to check .chat-status.is-modified later
click(
browser: agent,
css: '#global-search',
)
watch_for(
browser: customer,
css: '.zammad-chat .zammad-chat-agent-status',
value: 'online',
)
set(
browser: customer,
css: '.zammad-chat .zammad-chat-input',
value: 'my name is customer',
)
click(
browser: customer,
css: '.zammad-chat .zammad-chat-send',
)
watch_for(
browser: agent,
css: '.active .chat-window',
value: 'my name is customer',
)
exists(
browser: agent,
css: '.active .chat-window .chat-status.is-modified',
)
set(
browser: agent,
css: '.active .chat-window .js-customerChatInput',
value: 'my name is me',
)
exists_not(
browser: agent,
css: '.active .chat-window .chat-status.is-modified',
)
click(
browser: agent,
css: '.active .chat-window .js-send',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'my name is me',
)
click(
browser: agent,
css: '.active .chat-window .js-disconnect',
)
click(
browser: agent,
css: '.active .chat-window .js-close',
)
watch_for(
browser: customer,
css: '.zammad-chat .zammad-chat-agent-status',
value: 'offline',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'Chat closed by',
)
click(
browser: customer,
css: '.zammad-chat .js-chat-toggle',
)
watch_for_disappear(
browser: customer,
css: '.zammad-chat-is-open',
)
agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
sleep 2
click(
browser: customer,
css: '.js-chat-open',
)
exists(
browser: customer,
css: '.zammad-chat-is-shown',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: '(waiting|warte)',
)
click(
browser: agent,
css: '.active .js-acceptChat',
)
sleep 2
exists_not(
browser: agent,
css: '.active .chat-window .chat-status.is-modified',
)
exists(
browser: agent,
css: '.active .chat-window .chat-status',
)
end
def test_basic_usecase3
agent = browser_instance
login(
browser: agent,
username: 'master@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all(
browser: agent,
)
click(
browser: agent,
css: 'a[href="#customer_chat"]',
)
agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
# set chat preferences
click(
browser: agent,
css: '.active .js-settings',
)
set(
browser: agent,
css: '.modal [name="chat::phrase::1"]',
value: 'Hi Stranger!;My Greeting',
)
click(
browser: agent,
css: '.modal .js-submit',
)
customer = browser_instance
location(
browser: customer,
url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
)
watch_for(
browser: customer,
css: '.zammad-chat',
timeout: 5,
)
click(
browser: customer,
css: '.js-chat-open',
)
exists(
browser: customer,
css: '.zammad-chat-is-shown',
)
watch_for(
browser: agent,
css: '.active .js-badgeWaitingCustomers',
value: '1',
)
click(
browser: agent,
css: '.active .js-acceptChat',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'Hi Stranger|My Greeting',
)
watch_for(
browser: customer,
css: '.zammad-chat .zammad-chat-agent-status',
value: 'online',
)
set(
browser: agent,
css: '.active .chat-window .js-customerChatInput',
value: 'my name is me',
)
click(
browser: agent,
css: '.active .chat-window .js-send',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'my name is me',
)
set(
browser: customer,
css: '.zammad-chat .zammad-chat-input',
value: 'my name is customer',
)
click(
browser: customer,
css: '.zammad-chat .zammad-chat-send',
)
watch_for(
browser: agent,
css: '.active .chat-window',
value: 'my name is customer',
)
click(
browser: agent,
css: '.active .chat-window .js-customerChatInput',
)
reload(
browser: customer,
)
exists(
browser: customer,
css: '.zammad-chat',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'Hi Stranger|My Greeting',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'my name is me',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'my name is customer',
)
click(
browser: customer,
css: '.js-chat-toggle',
)
watch_for(
browser: agent,
css: '.active .chat-window',
value: 'closed the conversation',
)
end
def test_timeouts
agent = browser_instance
login(
browser: agent,
username: 'master@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all(
browser: agent,
)
click(
browser: agent,
css: 'a[href="#customer_chat"]',
)
agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
exists(
browser: agent,
css: '#navigation .js-switch input[checked]'
)
# no customer action, hide widget
customer = browser_instance
location(
browser: customer,
url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
)
watch_for(
browser: customer,
css: '.zammad-chat',
timeout: 5,
)
watch_for_disappear(
browser: customer,
css: '.zammad-chat',
timeout: 95,
)
# no agent action, show sorry screen
reload(
browser: customer,
)
exists(
browser: customer,
css: '.zammad-chat',
)
click(
browser: customer,
css: '.js-chat-open',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: '(waiting|warte)',
timeout: 35,
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: '(takes longer|dauert länger)',
timeout: 120,
)
# check if agent is offline, idle timeout, chat not answered
exists_not(
browser: agent,
css: '#navigation .js-switch input[checked]'
)
switch(
browser: agent,
css: '#navigation .js-switch',
type: 'on',
)
# no customer action, show sorry screen
reload(
browser: customer,
)
exists(
browser: customer,
css: '.zammad-chat',
)
click(
browser: customer,
css: '.js-chat-open',
)
watch_for(
browser: agent,
css: '.js-chatMenuItem .counter',
value: '1',
)
click(
browser: agent,
css: '.active .js-acceptChat',
)
sleep 2
set(
browser: agent,
css: '.active .chat-window .js-customerChatInput',
value: 'agent is asking',
)
click(
browser: agent,
css: '.active .chat-window .js-send',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'agent is asking',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: '(Since you didn\'t respond|Da Sie in den letzten)',
timeout: 150,
)
agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
sleep 2
click(
browser: customer,
css: '.js-restart',
)
sleep 5
click(
browser: customer,
css: '.js-chat-open',
)
exists(
browser: customer,
css: '.zammad-chat-is-shown',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: '(waiting|warte)',
)
click(
browser: agent,
css: '.active .js-acceptChat',
)
sleep 2
exists(
browser: agent,
css: '.active .chat-window .chat-status',
)
set(
browser: agent,
css: '.active .chat-window .js-customerChatInput',
value: 'my name is me',
)
click(
browser: agent,
css: '.active .chat-window .js-send',
)
watch_for(
browser: customer,
css: '.zammad-chat .zammad-chat-agent-status',
value: 'online',
)
watch_for(
browser: customer,
css: '.zammad-chat',
value: 'my name is me',
)
end
end