trabajo-afectivo/spec/system/ticket/shared_draft_zoom_spec.rb
2022-03-02 16:43:40 +01:00

252 lines
6.1 KiB
Ruby

# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
require 'rails_helper'
RSpec.describe 'Ticket Shared Draft Zoom', type: :system, authenticated_as: :authenticate do
let(:group) { create(:group, shared_drafts: group_shared_drafts) }
let(:group_access) { :full }
let(:group_shared_drafts) { true }
let(:ticket) { create(:ticket, group: group) }
let(:ticket_with_draft) { create(:ticket, group: group) }
let(:draft_body) { 'draft here' }
let(:draft) do
create(:ticket_shared_draft_zoom,
ticket: ticket_with_draft,
new_article: { body: draft_body, type: 'note', internal: true },
ticket_attributes: { priority_id: '3' })
end
let(:user) do
user = create(:agent)
user.user_groups.create! group: group, access: group_access
user
end
def authenticate
draft
user
end
before do
visit "ticket/zoom/#{ticket.id}"
end
shared_examples 'shared draft ID is present' do
it 'sets shared draft ID' do
within :active_content do
elem = find('.article-add input[name=shared_draft_id]', visible: :all)
expect(Ticket::SharedDraftZoom).to be_exist(elem.value)
end
end
end
context 'buttons' do
context 'when drafts disabled for the group' do
let(:group_shared_drafts) { false }
it 'share button not visible' do
expect(page).to have_no_selector :draft_share_button
end
it 'save button not visible' do
click '.js-openDropdownMacro'
expect(page).to have_no_selector :draft_save_button
end
end
context 'when drafts enabled for the group' do
it 'share button not visible initially' do
expect(page).to have_no_selector :draft_share_button
end
it 'save button visible' do
expect(page).to have_selector(:draft_save_button, visible: :all)
end
it 'share button visible when draft exists' do
visit "ticket/zoom/#{ticket_with_draft.id}"
within :active_content do
expect(page).to have_selector :draft_share_button
end
end
it 'share button appears when other user creates draft' do
create(:ticket_shared_draft_zoom, ticket: ticket)
expect(page).to have_selector :draft_share_button
end
end
context 'when insufficient permissions' do
let(:group_access) { :read }
it 'share button not visible when draft exists' do
visit "ticket/zoom/#{ticket_with_draft.id}"
within :active_content do
expect(page).to have_no_selector :draft_share_button
end
end
it 'save button not visible' do
click '.js-openDropdownMacro'
expect(page).to have_no_selector :draft_save_button
end
end
end
context 'preview' do
before do
visit "ticket/zoom/#{ticket_with_draft.id}"
within :active_content do
click :draft_share_button
end
end
it 'shows content' do
in_modal disappears: false do
expect(page).to have_text draft_body
end
end
it 'shows author' do
in_modal disappears: false do
expect(page).to have_text(User.find(draft.created_by_id).fullname)
end
end
end
context 'delete' do
it 'works' do
visit "ticket/zoom/#{ticket_with_draft.id}"
within :active_content do
click :draft_share_button
end
in_modal do
click '.js-delete'
end
click_on 'Yes'
within :active_content do
expect(page).to have_no_selector :draft_share_button
end
end
it 'hides button when another user deletes' do
visit "ticket/zoom/#{ticket_with_draft.id}"
draft.destroy
within :active_content do
expect(page).to have_no_selector :draft_share_button
end
end
end
context 'save' do
it 'creates new draft' do
find('.articleNewEdit-body').send_keys('Some reply')
click '.js-openDropdownMacro'
expect { click :draft_save_button }
.to change { ticket.reload.shared_draft.present? }
.to true
end
it 'shows overwrite warning when draft exists' do
visit "ticket/zoom/#{ticket_with_draft.id}"
within :active_content do
find('.articleNewEdit-body').send_keys('another reply')
click '.js-openDropdownMacro'
click :draft_save_button
end
in_modal do
click '.js-submit'
end
expect(draft.reload.new_article[:body]).to match %r{another reply}
end
context 'draft saved' do
before do
find('.articleNewEdit-body').send_keys('Some reply')
click '.js-openDropdownMacro'
click :draft_save_button
end
include_examples 'shared draft ID is present'
end
context 'draft loaded' do
before do
visit "ticket/zoom/#{ticket_with_draft.id}"
click :draft_share_button
in_modal do
click '.js-submit'
end
end
it 'updates existing draft' do
click '.js-openDropdownMacro'
click :draft_save_button
expect(draft.reload.new_article[:body]).to match %r{draft here}
end
it 'shows overwrite warning when draft edited after loading' do
find('.articleNewEdit-body').send_keys('another reply')
click '.js-openDropdownMacro'
click :draft_save_button
in_modal do
click '.js-submit'
end
expect(draft.reload.new_article[:body]).to match %r{another reply}
end
end
end
context 'apply' do
before do
attach(id: draft.id, object_name: draft.class.name)
visit "ticket/zoom/#{ticket_with_draft.id}"
click :draft_share_button
in_modal do
click '.js-submit'
end
end
include_examples 'shared draft ID is present'
it 'applies new article body' do
expect(page).to have_text draft_body
end
it 'applies sidebar changes' do
expect(find('[name=priority_id]').value).to eq draft.ticket_attributes[:priority_id]
end
it 'applies attachment' do
expect(page).to have_text('1x1.png')
end
end
end