ssl_certificates_spec.rb 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe 'Manage > SSL Certificates', type: :system do
  4. let(:fixture) { 'RootCA' }
  5. let(:certificate_file) { Rails.root.join("spec/fixtures/files/smime/#{fixture}.crt") }
  6. let(:certificate_content) { certificate_file.read }
  7. describe 'adding a certificate' do
  8. before do
  9. visit 'system/security'
  10. click_on 'SSL Certificates'
  11. click '.js-addCertificate'
  12. end
  13. context 'when given certificate is valid' do
  14. it 'can be uploaded as a file' do
  15. in_modal do
  16. find('[type=file]').attach_file certificate_file
  17. click_on 'Add'
  18. end
  19. expect(page).to have_css("tr[data-id='#{SSLCertificate.last.id}']")
  20. end
  21. it 'can be added as a text blob' do
  22. in_modal do
  23. fill_in 'Paste Certificate', with: certificate_content
  24. click_on 'Add'
  25. end
  26. expect(page).to have_css("tr[data-id='#{SSLCertificate.last.id}']")
  27. end
  28. end
  29. context 'when given certificate is invalid' do
  30. let(:fixture) { 'smime1@example.com' }
  31. it 'shows an error' do
  32. in_modal do
  33. fill_in 'Paste Certificate', with: certificate_content
  34. click_on 'Add'
  35. expect(page).to have_text('The certificate is not valid for SSL usage.')
  36. end
  37. end
  38. end
  39. end
  40. context 'when certificate is added' do
  41. let(:certificate) { create(:ssl_certificate, certificate: certificate_content) }
  42. before do
  43. certificate
  44. visit 'system/security'
  45. click_on 'SSL Certificates'
  46. end
  47. it 'is listed' do
  48. within "tr[data-id='#{certificate.id}']" do
  49. expect(page).to have_text(certificate.subject)
  50. end
  51. end
  52. it 'can be removed' do
  53. within "tr[data-id='#{certificate.id}']" do
  54. click '.js-action'
  55. click '.js-remove'
  56. end
  57. in_modal do
  58. click_on 'Yes'
  59. end
  60. expect(page).to have_no_css("tr[data-id='#{certificate.id}']")
  61. end
  62. it 'can be downloaded' do
  63. within "tr[data-id='#{certificate.id}']" do
  64. click '.js-action'
  65. expect(page).to have_css('a[download]', text: 'Download Certificate')
  66. end
  67. end
  68. end
  69. end