avatar_updates_spec.rb 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe Gql::Subscriptions::User::Current::AvatarUpdates, type: :graphql do
  4. let(:subscription) do
  5. <<~QUERY
  6. subscription userCurrentAvatarUpdates {
  7. userCurrentAvatarUpdates {
  8. avatars {
  9. id
  10. default
  11. deletable
  12. initial
  13. imageHash
  14. createdAt
  15. updatedAt
  16. }
  17. }
  18. }
  19. QUERY
  20. end
  21. let(:mock_channel) { build_mock_channel }
  22. let(:target) { create(:user) }
  23. let(:avatar) { create(:avatar, o_id: target.id, default: false, initial: true) }
  24. context 'when user is authenticated, but has no permission', authenticated_as: :agent do
  25. let(:agent) { create(:agent, roles: []) }
  26. before do
  27. gql.execute(subscription, context: { channel: mock_channel })
  28. end
  29. it_behaves_like 'graphql responds with error if unauthenticated'
  30. end
  31. context 'with authenticated user', authenticated_as: :target do
  32. it 'subscribes' do
  33. gql.execute(subscription, context: { channel: mock_channel })
  34. expect(gql.result.data).to eq({ 'avatars' => nil })
  35. end
  36. it 'receives avatar updates for target user' do
  37. gql.execute(subscription, context: { channel: mock_channel })
  38. avatar.update!(default: true)
  39. expect(mock_channel.mock_broadcasted_messages.first[:result]['data']['userCurrentAvatarUpdates']['avatars'].count).to eq(1)
  40. end
  41. it 'does not receive avatar updates for other users' do
  42. gql.execute(subscription, context: { channel: mock_channel })
  43. another_user = create(:user)
  44. another_avatar = create(:avatar, o_id: another_user.id, default: false)
  45. another_avatar.update!(default: true)
  46. expect(mock_channel.mock_broadcasted_messages).to be_empty
  47. end
  48. end
  49. end