Просмотр исходного кода

Maintenance: Add tests for user profile.

Martin Gruner 10 месяцев назад
Родитель
Сommit
6ed5c8aba4

+ 61 - 0
spec/system/apps/desktop/account_spec.rb

@@ -0,0 +1,61 @@
+# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
+
+require 'rails_helper'
+
+RSpec.describe 'Desktop > Account', app: :desktop_view, authenticated_as: :agent, type: :system do
+  let(:agent) { create(:agent) }
+
+  before do
+    visit '/'
+    find("[aria-label=\"Avatar (#{agent.fullname})\"]").click
+  end
+
+  describe 'appearance selection' do
+    it 'user can switch appearance' do
+      # Switch starts on 'auto'
+      default_theme = page.execute_script("return matchMedia('(prefers-color-scheme: dark)').matches") ? 'dark' : 'light'
+      expect(page).to have_css("html[data-theme=#{default_theme}]")
+
+      # Switch to 'dark'
+      click_on 'Appearance'
+      wait_for_mutation('accountAppearance')
+      expect(page).to have_css('html[data-theme=dark]')
+
+      # Switch to 'light'
+      click_on 'Appearance'
+      wait_for_mutation('accountAppearance', number: 2)
+      expect(page).to have_css('html[data-theme=light]')
+
+    end
+  end
+
+  describe 'language selection' do
+    it 'user can change language' do
+      click_on 'Profile settings'
+      click_on 'Language'
+
+      find('label', text: 'Your language').click
+      find('span', text: 'Deutsch').click
+      expect(page).to have_text('Sprache')
+    end
+  end
+
+  describe 'avatar handling', authenticated_as: :agent do
+    let(:agent) { create(:agent, firstname: 'Jane', lastname: 'Doe') }
+
+    it 'user can upload avatar' do
+      click_on 'Profile settings'
+      click_on 'Avatar'
+
+      expect(page).to have_text('JD')
+      find('input[data-test-id="fileUploadInput"]', visible: :all).set(Rails.root.join('test/data/image/1000x1000.png'))
+      expect(page).to have_text('Avatar Preview')
+      click_on 'Save'
+
+      expect(page).to have_text('Your avatar has been uploaded')
+
+      avatar_element_style = find("#user-menu span[aria-label=\"Avatar (#{agent.fullname})\"]").style('background-image')
+      expect(avatar_element_style['background-image']).to include("/api/v1/users/image/#{Avatar.last.store_hash}")
+    end
+  end
+end

+ 0 - 139
spec/system/apps/mobile/account/avatar_spec.rb

@@ -1,139 +0,0 @@
-# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
-
-require 'rails_helper'
-
-RSpec.describe 'Mobile > Account > Avatar', app: :mobile, type: :system do
-  context 'when on Account > Avatar page', authenticated_as: :agent do
-    let(:agent) { create(:agent, firstname: 'Jane', lastname: 'Doe') }
-    let(:route) { '/account/avatar' }
-    let(:initial_buttons) do
-      [
-        {
-          name:     'Library',
-          disabled: false,
-        },
-        {
-          name:     'Camera',
-          disabled: false,
-        },
-        {
-          name:     'Delete',
-          disabled: true,
-        },
-      ]
-    end
-
-    before do
-      visit route
-    end
-
-    def wait_for_avatar
-      expect(page).to have_css('[data-test-id="common-avatar"]')
-      expect(page).to have_button('Library')
-    end
-
-    context 'when initial state is checked' do
-      it 'shows the initials of the agent' do
-        wait_for_avatar
-
-        expect(find('[data-test-id="common-avatar"]')).to have_text('JD')
-      end
-
-      it 'shows buttons for uploading + deleting avatars' do
-        wait_for_avatar
-
-        initial_buttons.each do |button|
-          expect(page).to have_button(button[:name], disabled: button[:disabled])
-        end
-      end
-    end
-
-    context 'when a new avatar is uploaded' do
-      it 'can upload a new avatar' do
-        wait_for_avatar
-
-        expect(page).to have_no_button('Save')
-
-        find('input[data-test-id="fileGalleryInput"]', visible: :all).set(Rails.root.join('test/data/image/1000x1000.png'))
-
-        expect(page).to have_button('Save')
-
-        find_button('Save').click
-
-        expect(page).to have_no_button('Save')
-        expect(page).to have_button('Delete', disabled: false)
-
-        store   = Store.find(Avatar.last.store_resize_id)
-        img_url = "data:#{store.preferences['Mime-Type']};base64,#{Base64.strict_encode64(store.content)}"
-
-        avatar_element_style = find('[data-test-id="common-avatar"]').style('background-image')
-        expect(avatar_element_style['background-image']).to eq("url(\"#{img_url}\")")
-      end
-    end
-
-    context 'when an avatar is already uploaded', authenticated_as: :authenticate do
-      let(:base64_img) { Base64.decode64(Rails.root.join('test/data/image/1000x1000.png').read) }
-
-      let(:avatar) do
-        avatar = Avatar.add(
-          object:        'User',
-          o_id:          agent.id,
-          full:          {
-            content:   base64_img,
-            mime_type: 'image/png',
-          },
-          resize:        {
-            content:   base64_img,
-            mime_type: 'image/png',
-          },
-          source:        "upload #{Time.zone.now}",
-          deletable:     true,
-          created_by_id: agent.id,
-          updated_by_id: agent.id,
-        )
-        agent.update!(image: avatar.store_hash)
-        avatar
-      end
-
-      let(:background_image) do
-        store = Store.find(avatar.store_resize_id)
-        "data:#{store.preferences['Mime-Type']};base64,#{Base64.strict_encode64(store.content)}"
-      end
-
-      def authenticate
-        avatar
-        agent
-      end
-
-      it 'displays the avatar' do
-        avatar_element_style = find('[data-test-id="common-avatar"]').style('background-image')
-        expect(avatar_element_style['background-image']).to eq("url(\"#{background_image}\")")
-      end
-
-      context 'when on Account page' do
-        let(:route) { '/account' }
-
-        it 'displays the avatar in the footer' do
-          avatar_element_style = find('footer [data-test-id="common-avatar"]').style('background-image')
-          background_image_api_url = "/api/v1/users/image/#{avatar.store_hash}"
-
-          expect(avatar_element_style['background-image']).to match(%r{#{background_image_api_url}})
-        end
-      end
-
-      it 'can delete an existing avatar' do
-        expect(page).to have_css('[data-test-id="common-avatar"]')
-        expect(page).to have_button('Delete', disabled: false)
-
-        find_button('Delete').click
-
-        expect(page).to have_button('Delete avatar')
-
-        find_button('Delete avatar').click
-
-        expect(find('[data-test-id="common-avatar"]')).to have_text('JD')
-        expect(page).to have_button('Delete', disabled: true)
-      end
-    end
-  end
-end

+ 22 - 26
spec/system/apps/mobile/account_spec.rb

@@ -3,42 +3,38 @@
 require 'rails_helper'
 
 RSpec.describe 'Mobile > App Account Page', app: :mobile, type: :system do
-  context 'when on account page' do
-    let(:admin) { create(:admin) }
-    let(:agent) { create(:agent) }
-
+  describe 'language selection' do
     before do
       visit '/account'
     end
 
-    context 'when updating locale', authenticated_as: :agent do
-      it 'check that user can see and change locale' do
-        locale = find_treeselect('Language')
+    it 'user can change language' do
+      locale = find_treeselect('Language')
+      locale.select_option('Deutsch')
+      expect(page).to have_text('Sprache')
+    end
+  end
 
-        # current locale is visible
-        expect(locale).to have_selected_option('English (United States)')
+  describe 'avatar handling', authenticated_as: :agent do
+    let(:agent) { create(:agent, firstname: 'Jane', lastname: 'Doe') }
 
-        locale.select_option('Dansk')
-        wait_for_gql('shared/entities/account/graphql/mutations/locale.graphql')
-        agent.reload
-        expect(agent.preferences[:locale]).to eq('da')
-      end
+    before do
+      visit '/account/avatar'
     end
 
-    context 'when checking about information' do
-      context 'when permitted', authenticated_as: :admin do
-        it 'shows about information' do
-          wait_for_gql('shared/graphql/queries/about.graphql')
+    it 'user can upload avatar' do
+      expect(page).to have_text('JD')
+      find('input[data-test-id="fileGalleryInput"]', visible: :all).set(Rails.root.join('test/data/image/1000x1000.png'))
+
+      expect(page).to have_css('.vue-advanced-cropper')
+      click_on 'Save'
 
-          expect(page).to have_content(Version.get)
-        end
-      end
+      wait.until { Avatar.last.present? }
+      store   = Store.find(Avatar.last.store_resize_id)
+      img_url = "data:#{store.preferences['Mime-Type']};base64,#{Base64.strict_encode64(store.content)}"
 
-      context 'when forbidden', authenticated_as: :agent do
-        it 'does not show about information' do
-          expect(page).to have_no_content(Version.get)
-        end
-      end
+      avatar_element_style = find('[data-test-id="common-avatar"]').style('background-image')
+      expect(avatar_element_style['background-image']).to eq("url(\"#{img_url}\")")
     end
   end
 end

+ 0 - 0
spec/system/apps/mobile/after_auth_spec.rb → spec/system/apps/mobile_old/after_auth_spec.rb


+ 0 - 0
spec/system/apps/mobile/app_links_spec.rb → spec/system/apps/mobile_old/app_links_spec.rb


+ 0 - 0
spec/system/apps/mobile/app_maintenance_spec.rb → spec/system/apps/mobile_old/app_maintenance_spec.rb


+ 0 - 0
spec/system/apps/mobile/basic/invalid_session_handling_spec.rb → spec/system/apps/mobile_old/basic/invalid_session_handling_spec.rb


+ 0 - 0
spec/system/apps/mobile/basic/logout_frontend_store_reset_spec.rb → spec/system/apps/mobile_old/basic/logout_frontend_store_reset_spec.rb


+ 0 - 0
spec/system/apps/mobile/basic/shared_authentication_state_spec.rb → spec/system/apps/mobile_old/basic/shared_authentication_state_spec.rb


+ 0 - 0
spec/system/apps/mobile/examples/article_security_examples.rb → spec/system/apps/mobile_old/examples/article_security_examples.rb


Некоторые файлы не были показаны из-за большого количества измененных файлов