123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- require 'browser_test_helper'
- class AdminDragDropToNewGroupTest < TestCase
- def test_group_via_role
- @browser = browser_instance
- login(
- username: 'admin@example.com',
- password: 'test',
- url: browser_url,
- )
- new_group_name = add_group
- new_role_name = add_role(new_group_name)
- open_user_modal do
- assign_role(new_role_name)
- end
- list_tickets
- assert get_group_element(new_group_name)
- end
- def test_new_group
- @browser = browser_instance
- login(
- username: 'admin@example.com',
- password: 'test',
- url: browser_url,
- )
- new_group_name = add_group
- open_user_modal do
- assign_group(new_group_name, scroll: true)
- end
- list_tickets
- assert get_group_element(new_group_name)
- end
- private
- def add_group
- name = "dndgroup-#{SecureRandom.uuid}"
- click(css: '.user-menu a[title=Admin')
- click(css: '.content.active a[href="#manage/groups"]')
- click(css: '.content.active a[data-type="new"]')
- modal_ready
- element = @browser.find_element(css: '.modal input[name=name_last]')
- element.clear
- element.send_keys(name)
- click(css: '.modal button.js-submit')
- sleep(1)
- name
- end
- def add_role(group_name)
- role_name = "#{group_name}-role"
- click(css: '.content.active a[href="#manage/roles"]')
- click(css: '.content.active a[data-type="new"]')
- modal_ready
- element = @browser.find_element(css: '.modal input[name=name]')
- element.clear
- element.send_keys(role_name)
- agent_permission = @browser.find_element(css: '.modal input[data-permission-name="ticket.agent"]')
- permission_id = agent_permission.attribute(:value)
- scroll_to(agent_permission.location.y)
- toggle_checkbox(@browser.find_element(css: '.modal'), "\"#{permission_id}\"") # digit-only selector fails
- assign_group(group_name)
- click(css: '.modal button.js-submit')
- sleep(1)
- role_name
- end
- def open_user_modal
- click(css: '.content.active a[href="#manage/users"]')
- user_css = '.user-list .js-tableBody tr td'
- watch_for(css: user_css)
- user_element = @browser.find_elements(css: user_css).find do |el|
- el.text.strip == 'admin@example.com'
- end
- user_element.click
- modal_ready
- yield
- click(css: '.modal button.js-submit')
- sleep(1)
- end
- def scroll_to(offset_y = 'el.scrollHeight')
- scroll_script = "var el = document.getElementsByClassName('modal')[0];"
- scroll_script += "el.scrollTo(0, #{offset_y});"
- @browser.execute_script scroll_script
- end
- def assign_group(group_name, scroll: false)
- await_text(text: 'Group Permissions')
- group_container = @browser.find_elements(css: '.modal .settings-list tbody tr').find do |el|
- el.find_element(css: 'td').text == group_name
- end
- if group_container.nil?
- @browser.find_elements(css: '.modal .js-groupListNewItemRow .js-groupListItemAddNew .js-input')[0].click
- @browser.find_elements(css: ".modal .js-groupListNewItemRow .js-optionsList .js-option [title='#{group_name}']")[0].click
- @browser.find_elements(css: '.modal .js-groupListNewItemRow .js-add')[0].click
- group_container = @browser.find_elements(css: '.modal .settings-list tbody tr').find do |el|
- el.find_element(css: 'td').text == group_name
- end
- end
- assert_not_nil(group_container)
- scroll_to(group_container.location.y) if scroll
- toggle_checkbox(group_container, 'full')
- end
- def assign_role(role_name)
- role_container = @browser.find_elements(css: '.modal .checkbox > .inline-label').find do |el|
- el.find_elements(css: '.label-text').first&.text == role_name
- end
- scroll_to role_container.location.y
- assert_not_nil role_container
- role_id = role_container.find_element(css: 'input').attribute(:value)
- toggle_checkbox(role_container, "\"#{role_id}\"") # digit-only selector fails
- end
- def get_group_element(group_name)
- # wait until the scheduler pushes
- # the changes to the FE
- sleep(1.5)
- 10.times do
- dnd_element = @browser.find_element(css: '.content.active .js-tableBody .item')
- window_height = @browser.execute_script('return window.innerHeight')
- offset = window_height - dnd_element.location.y - dnd_element.rect.height - 50
- @browser.action.click_and_hold(dnd_element).perform
- @browser.action.move_by(0, 100).perform
- sleep(0.5)
- @browser.action.move_by(0, offset - 100).perform
- sleep(1)
- group_containers = @browser.find_elements(css: '.batch-overlay-assign-entry[data-action=group_assign]')
- new_group_container = group_containers.find do |g|
- g.find_element(css: '.batch-overlay-assign-entry-name').text.downcase == group_name
- end
- verified = verify_group_and_contents(new_group_container)
- return true if verified
- sleep(0.5)
- @browser
- .action
- .release
- .perform
- end
- false
- end
- def verify_group_and_contents(group_container)
- return false if group_container.nil?
- group_description = group_container.find_element(css: '.batch-overlay-assign-entry-detail').text
- return false if group_description != '1 PEOPLE'
- @browser.action.move_to(group_container).perform
- users_in_group = @browser.find_elements(css: '.js-batch-assign-group-inner .batch-overlay-assign-entry[data-action=user_assign]')
- users_in_group.count == 1
- end
- def list_tickets
- click(css: '.menu-item[href="#ticket/view"]')
- click(css: '.overview-header .tabsHolder a.tab[href="#ticket/view/all_unassigned"]')
- end
- end
|