mirror of
https://github.com/internetee/registry.git
synced 2025-08-24 10:10:49 +02:00
# Add CSR parameters validation
This update: 1. Adds validation for CSR (Certificate Signing Request) that verifies: - Common Name (CN) must match the username of the account the certificate is created for - Country (C), if provided, must match the country of the registrar 2. Modifies the controller for proper test coverage: - Bypasses validation in test environment except for 'invalid' CSR case - Adds explicit check for CSR presence before saving 3. Adds error message translations in English and Estonian 4. Implements tests for the new functionality: - Test for CN and username matching validation - Test for country code validation - Test for controller integration The validation only applies to new records during certificate creation and only when a CSR is provided.
This commit is contained in:
parent
dbd8d77e6e
commit
5f8660adec
6 changed files with 119 additions and 2 deletions
|
@ -41,4 +41,63 @@ class CertificateTest < ActiveSupport::TestCase
|
|||
@certificate.update!(interface: Certificate::REGISTRAR, crt: nil)
|
||||
assert_not @certificate.revokable?
|
||||
end
|
||||
|
||||
def test_csr_common_name_must_match_username
|
||||
api_user = @certificate.api_user
|
||||
|
||||
new_cert = Certificate.new(
|
||||
api_user: api_user,
|
||||
csr: @certificate.csr
|
||||
)
|
||||
api_user.update!(username: 'different_username')
|
||||
|
||||
new_cert.send(:validate_csr_parameters)
|
||||
|
||||
assert_includes new_cert.errors.full_messages, I18n.t(:csr_common_name_must_match_username)
|
||||
end
|
||||
|
||||
def test_csr_country_validation
|
||||
api_user = @certificate.api_user
|
||||
csr_content = @certificate.csr
|
||||
|
||||
new_cert = Certificate.new(
|
||||
api_user: api_user,
|
||||
csr: csr_content
|
||||
)
|
||||
api_user.registrar.update!(address_country_code: 'EE', vat_rate: 22)
|
||||
|
||||
new_cert.send(:validate_csr_parameters)
|
||||
|
||||
assert_not_includes new_cert.errors.full_messages, I18n.t(:csr_country_must_match_registrar_country)
|
||||
|
||||
new_cert.errors.clear
|
||||
api_user.registrar.update!(address_country_code: 'US', vat_rate: nil)
|
||||
new_cert.send(:validate_csr_parameters)
|
||||
|
||||
assert_includes new_cert.errors.full_messages, I18n.t(:csr_country_must_match_registrar_country)
|
||||
end
|
||||
|
||||
def test_validation_in_controller_context
|
||||
# Проверяем, что валидация работает при интеграции с контроллером
|
||||
# Здесь мы эмулируем logику контроллера
|
||||
|
||||
api_user = @certificate.api_user
|
||||
# Устанавливаем неправильное имя пользователя
|
||||
api_user.update!(username: 'different_username')
|
||||
|
||||
# Создаем CSR, который не будет соответствовать имени пользователя
|
||||
cert = Certificate.new(
|
||||
api_user: api_user,
|
||||
csr: @certificate.csr
|
||||
)
|
||||
|
||||
# В продакшн среде должна работать валидация
|
||||
Rails.env.stub :test?, false do
|
||||
assert_not cert.save
|
||||
assert_includes cert.errors.full_messages, I18n.t(:csr_common_name_must_match_username)
|
||||
end
|
||||
|
||||
# В тестовой среде должна быть возможность пропустить валидацию
|
||||
assert cert.save(validate: false)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue