1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- require 'rails_helper'
- RSpec.describe Gql::Mutations::User::Current::Avatar::Add, type: :graphql do
- context 'when creating a new avatar for the logged-in user', authenticated_as: :agent do
- let(:agent) { create(:agent) }
- let(:variables) { { images: { original: upload, resized: upload } } }
- let(:upload) { { name: filename, type: type, content: image_data } }
- let(:image_data) { 'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' }
- let(:type) { 'image/png' }
- let(:filename) { 'avatar.png' }
- let(:execute_query) { true }
- let(:query) do
- <<~QUERY
- mutation userCurrentAvatarAdd($images: AvatarInput!) {
- userCurrentAvatarAdd(images: $images) {
- avatar {
- id
- }
- errors {
- message
- field
- }
- }
- }
- QUERY
- end
- before do
- next if !execute_query
- gql.execute(query, variables: variables)
- end
- context 'with valid image' do
- it 'returns the newly created avatar' do
- expect(gql.result.data[:avatar]).not_to be_nil
- end
- it 'updates the image for the user' do
- avatar = Gql::ZammadSchema.verified_object_from_id(gql.result.data[:avatar][:id], type: Avatar)
- expect(agent.reload.image).to eq(avatar.store_hash)
- end
- context 'when checking the Store' do
- let(:execute_query) { false }
- it 'increases the amount of records correctly' do
- expect { gql.execute(query, variables: variables) }.to change(Store, :count).by(2)
- end
- end
- end
- context 'with invalid image' do
- let(:image_data) { 'invalid image' }
- it 'fails with error message' do
- expect(gql.result.error_message).to eq('Variable $images of type AvatarInput! was provided invalid value for original.content (invalid base64), resized.content (invalid base64)')
- end
- end
- context 'with invalid mime-type' do
- let(:type) { 'image/tiff' }
- it 'fails with error message' do
- expect(gql.result.data[:errors][0]).to include('message' => 'The MIME type of the image is invalid.')
- end
- end
- it_behaves_like 'graphql responds with error if unauthenticated'
- end
- end
|