123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- require 'rails_helper'
- RSpec.describe 'Desktop > Ticket > Online Notifications', app: :desktop_view, authenticated_as: :agent, type: :system do
- let(:group) { create(:group) }
- let(:agent) { create(:agent, groups: [group]) }
- let(:agent_b) { create(:agent, groups: [group]) }
- let(:ticket) { create(:ticket, group:, title: 'Ticket A') }
- let(:ticket_b) { create(:ticket, group:, title: 'Ticket B') }
- let(:online_notification) { create(:online_notification, user: agent, created_by: agent_b, updated_by: agent_b, o: ticket, type_name: 'update') }
- let(:online_notification_new_ticket) { create(:online_notification, user: agent, created_by: agent_b, updated_by: agent_b, o: ticket_b, type_name: 'create') }
- context 'when receiving a new ticket notification' do
- before do
- online_notification
- visit '/'
- # Initial subscription request will fetch the new online notification,
- # which is why we must wait for the update flag instead of the start.
- wait_for_subscription_update('onlineNotificationsCount', number: 1)
- end
- it 'receives an online notification' do
- expect(find('[aria-label="Unseen notifications count"]')).to have_text('1')
- find('button[aria-label="Show notifications"]').click
- within('[role="region"]') do
- expect(page).to have_text("#{agent_b.fullname} updated ticket Ticket A")
- click_on 'mark all as read'
- wait_for_mutation('onlineNotificationMarkAllAsSeen')
- end
- find('button[aria-label="Show notifications"]').click
- within('[role="region"]') do
- expect(page).to have_css('a', text: "#{agent_b.fullname} updated ticket Ticket A", style: { opacity: '0.3' })
- end
- find("[aria-label='#{Capybara::Selector::CSS.escape(agent.fullname)}']").click
- click_on 'Profile settings'
- click_on 'Notifications'
- find('label', text: 'New ticket - All tickets').click
- find('label', text: 'Ticket update - All tickets').click
- click_on 'Save Notifications'
- wait_for_mutation('userCurrentNotificationPreferencesUpdate', number: 1)
- expect(agent.preferences['notification_config']['matrix']).to include(
- 'create' => include(
- 'criteria' => include('owned_by_me' => true, 'owned_by_nobody' => true, 'subscribed' => true, 'no' => false),
- 'channel' => include('email' => true, 'online' => true)
- ),
- 'update' => include(
- 'criteria' => include('owned_by_me' => true, 'owned_by_nobody' => true, 'subscribed' => true, 'no' => false),
- 'channel' => include('email' => true, 'online' => true)
- ),
- 'reminder_reached' => include(
- 'criteria' => include('owned_by_me' => true, 'owned_by_nobody' => false, 'subscribed' => false, 'no' => false),
- 'channel' => include('email' => true, 'online' => true)
- ),
- 'escalation' => include(
- 'criteria' => include('owned_by_me' => true, 'owned_by_nobody' => false, 'subscribed' => false, 'no' => false),
- 'channel' => include('email' => true, 'online' => true)
- )
- )
- online_notification_new_ticket
- wait_for_subscription_update('onlineNotificationsCount', number: 2)
- expect(find('[aria-label="Unseen notifications count"]')).to have_text('1')
- find('button[aria-label="Show notifications"]').click
- within('[role="region"]') do
- click_on "#{agent_b.fullname} created ticket Ticket B"
- end
- wait_for_mutation('onlineNotificationSeen')
- wait_for_subscription_update('onlineNotificationsCount', number: 3)
- expect(page).to have_current_path("/desktop/tickets/#{ticket_b.id}")
- find('button[aria-label="Show notifications"]').click
- within('[role="region"]') do
- expect(page).to have_css('a', text: "#{agent_b.fullname} created ticket Ticket B", style: { opacity: '0.3' })
- end
- end
- end
- end
|