macros_update_spec.rb 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe Gql::Subscriptions::MacrosUpdate, type: :graphql do
  4. let(:mock_channel) { build_mock_channel }
  5. let(:group1) { create(:group) }
  6. let(:macro) { create(:macro, group_ids: [group1.id]) }
  7. let(:subscription) do
  8. <<~QUERY
  9. subscription macrosUpdate {
  10. macrosUpdate {
  11. macroId
  12. groupIds
  13. removeMacroId
  14. }
  15. }
  16. QUERY
  17. end
  18. let(:expected_group_ids) { [gql.id(group1)] }
  19. let(:expected_msg) do
  20. {
  21. 'data' => {
  22. 'macrosUpdate' => {
  23. 'macroId' => gql.id(macro),
  24. 'groupIds' => expected_group_ids,
  25. 'removeMacroId' => nil
  26. }
  27. }
  28. }
  29. end
  30. before do
  31. gql.execute(subscription, context: { channel: mock_channel })
  32. macro
  33. end
  34. context 'when authenticated', authenticated_as: :agent do
  35. let(:agent) { create(:agent) }
  36. it 'creating a macro triggers subscription' do
  37. expect(mock_channel.mock_broadcasted_messages.last[:result]).to eq(expected_msg)
  38. end
  39. context 'when macro is updated' do
  40. let(:expected_group_ids) { [] }
  41. it 'triggers subscription' do
  42. macro.update!(name: 'New Name', group_ids: [])
  43. expect(mock_channel.mock_broadcasted_messages.last[:result]).to eq(expected_msg)
  44. end
  45. end
  46. context 'when macro is destroyed' do
  47. let(:expected_msg) do
  48. {
  49. 'data' => {
  50. 'macrosUpdate' => {
  51. 'macroId' => nil,
  52. 'groupIds' => nil,
  53. 'removeMacroId' => gql.id(macro),
  54. }
  55. }
  56. }
  57. end
  58. it 'triggers subscription' do
  59. macro.destroy
  60. expect(mock_channel.mock_broadcasted_messages.last[:result]).to eq(expected_msg)
  61. end
  62. end
  63. end
  64. it_behaves_like 'graphql responds with error if unauthenticated'
  65. end