From 3446c6473d0f315f70f274dd644fb4ee1298524a Mon Sep 17 00:00:00 2001 From: mmeest Date: Thu, 24 Jul 2025 11:34:45 +0300 Subject: [PATCH 1/3] added tests --- .../certificates_integration_test.rb | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 test/integration/admin_area/certificates_integration_test.rb diff --git a/test/integration/admin_area/certificates_integration_test.rb b/test/integration/admin_area/certificates_integration_test.rb new file mode 100644 index 000000000..24a9cbf76 --- /dev/null +++ b/test/integration/admin_area/certificates_integration_test.rb @@ -0,0 +1,62 @@ +require 'test_helper' + +class AdminCertificatesControllerTest < ActionDispatch::IntegrationTest + include Devise::Test::IntegrationHelpers + include ActionDispatch::TestProcess + + setup do + @admin = users(:admin) + sign_in @admin + + @api_user = users(:api_bestnames) + @certificate = certificates(:api) + @password = ENV['ca_key_password'] || 'test' + end + + def test_new_renders_successfully + get new_admin_api_user_certificate_path(api_user_id: @api_user.id) + + assert_response :success + end + + def test_create_certificate_with_valid_csr + csr_file = fixture_file_upload('files/test_ca/server.csr', 'text/plain') + + assert_difference -> { @api_user.certificates.count } do + post admin_api_user_certificates_path(api_user_id: @api_user.id), + params: { certificate: { csr: csr_file } } + end + + assert_redirected_to admin_api_user_certificate_path(@api_user, Certificate.last) + assert_equal I18n.t('record_created'), flash[:notice] + end + + def test_destroy_certificate + assert_difference -> { Certificate.count }, -1 do + delete admin_api_user_certificate_path(api_user_id: @api_user.id, id: @certificate.id) + end + + assert_redirected_to admin_registrar_api_user_path(@api_user.registrar, @api_user) + assert_equal I18n.t('record_deleted'), flash[:notice] + end + + def test_sign_certificate + Certificate.stub_any_instance(:sign!, true) do + post sign_admin_api_user_certificate_path(api_user_id: @api_user.id, id: @certificate.id), + params: { certificate: { password: @password } } + end + + assert_redirected_to admin_api_user_certificate_path(@api_user, @certificate) + assert_equal I18n.t('record_updated'), flash[:notice] + end + + def test_revoke_certificate + Certificate.stub_any_instance(:revoke!, true) do + post revoke_admin_api_user_certificate_path(api_user_id: @api_user.id, id: @certificate.id), + params: { certificate: { password: @password } } + end + + assert_redirected_to admin_api_user_certificate_path(@api_user, @certificate) + assert_equal I18n.t('record_updated'), flash[:notice] + end +end From 485de905db84795bd6bbb4ae8c3f5fbcf5486729 Mon Sep 17 00:00:00 2001 From: mmeest Date: Thu, 24 Jul 2025 12:08:57 +0300 Subject: [PATCH 2/3] added new tests --- .../certificates_integration_test.rb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/integration/admin_area/certificates_integration_test.rb b/test/integration/admin_area/certificates_integration_test.rb index 24a9cbf76..0dcccf09d 100644 --- a/test/integration/admin_area/certificates_integration_test.rb +++ b/test/integration/admin_area/certificates_integration_test.rb @@ -59,4 +59,28 @@ class AdminCertificatesControllerTest < ActionDispatch::IntegrationTest assert_redirected_to admin_api_user_certificate_path(@api_user, @certificate) assert_equal I18n.t('record_updated'), flash[:notice] end + + def test_revoke_certificate_failure + Certificate.stub_any_instance(:revoke!, false) do + post revoke_admin_api_user_certificate_path(api_user_id: @api_user.id, id: @certificate.id), + params: { certificate: { password: @password } } + end + + assert_redirected_to admin_api_user_certificate_path(@api_user, @certificate) + assert_equal I18n.t('failed_to_update_record'), flash[:alert] + end + + def test_destroy_revocable_certificate + @certificate.update!(interface: Certificate::REGISTRAR) + + Certificate.stub_any_instance(:revoke!, true) do + assert_difference -> { Certificate.count }, -1 do + delete admin_api_user_certificate_path(api_user_id: @api_user.id, id: @certificate.id), + params: { certificate: { password: @password } } + end + end + + assert_redirected_to admin_registrar_api_user_path(@api_user.registrar, @api_user) + assert_equal I18n.t('record_deleted'), flash[:notice] + end end From 33b38e52c6c171c5eed1d2530a91b599b2c75f39 Mon Sep 17 00:00:00 2001 From: mmeest Date: Thu, 24 Jul 2025 12:16:31 +0300 Subject: [PATCH 3/3] added email notification test --- .../admin_area/certificates_integration_test.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/integration/admin_area/certificates_integration_test.rb b/test/integration/admin_area/certificates_integration_test.rb index 0dcccf09d..73910452a 100644 --- a/test/integration/admin_area/certificates_integration_test.rb +++ b/test/integration/admin_area/certificates_integration_test.rb @@ -42,12 +42,17 @@ class AdminCertificatesControllerTest < ActionDispatch::IntegrationTest def test_sign_certificate Certificate.stub_any_instance(:sign!, true) do - post sign_admin_api_user_certificate_path(api_user_id: @api_user.id, id: @certificate.id), - params: { certificate: { password: @password } } + assert_difference -> { ActionMailer::Base.deliveries.size }, 1 do + post sign_admin_api_user_certificate_path(api_user_id: @api_user.id, id: @certificate.id), + params: { certificate: { password: @password } } + end end assert_redirected_to admin_api_user_certificate_path(@api_user, @certificate) assert_equal I18n.t('record_updated'), flash[:notice] + + mail = ActionMailer::Base.deliveries.last + assert_includes mail.to, @api_user.registrar.email end def test_revoke_certificate