FreedomBox/plinth/modules/letsencrypt/tests/test_domain_name_changes.py
Sunil Mohan Adapa b1740eee79
letsencrypt: On domain removal, don't revoke certificate, keep it
Closes: #2156.

Tests:

- Remove a domain from System -> Config, 'letsencrypt revoke' action is not
invoked.

- Triggering a manual revoke operation still leads to action getting triggered.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2021-12-06 18:25:20 -05:00

76 lines
2.4 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Tests for letsencrypt module.
"""
from unittest.mock import call, patch
import pytest
from plinth.modules.names.components import DomainType
from .. import on_domain_added, on_domain_removed
@pytest.fixture(name='domain_types')
def fixture_domain_types():
"""Create a domain types required for tests."""
DomainType('domain-type-tor', 'Tor Onion Service', 'tor:index',
can_have_certificate=False)
DomainType('domain-type-test', 'Test Domain Type', 'test:index')
@pytest.mark.usefixtures('domain_types')
def test_add_onion_domain():
"""Test that .onion domains are ignored when added/removed."""
assert not on_domain_added('test', 'domain-type-tor', 'ddddd.onion')
assert not on_domain_removed('test', 'domain-type-tor', 'ddddd.onion')
@patch('plinth.modules.letsencrypt.get_status')
@patch('plinth.modules.letsencrypt.certificate_obtain')
@pytest.mark.usefixtures('load_cfg')
@pytest.mark.parametrize('domain,status_input,obtain,result', [
('domain1.tld', {
'certificate_available': True,
'validity': 'not-valid'
}, True, True),
('domain2.tld', {
'certificate_available': False,
'validity': 'valid'
}, True, True),
('domain3.tld', {
'certificate_available': True,
'validity': 'valid'
}, False, False),
('', {
'certificate_available': False,
'validity': 'valid'
}, False, True),
])
def test_add_valid_domain(certificate_obtain, get_status, domain, status_input,
obtain, result):
"""Test adding a domain that can have certificates."""
get_status.return_value = {'domains': {domain: status_input}}
assert result == on_domain_added('test', 'domain-type-test', domain)
if obtain:
certificate_obtain.assert_has_calls([call(domain)])
else:
certificate_obtain.assert_not_called()
@patch('plinth.modules.letsencrypt.certificate_revoke')
@pytest.mark.usefixtures('load_cfg')
@pytest.mark.parametrize('domain,revoke,result', [
('domain1.tld', True, True),
('', False, True),
])
def test_remove_domain(certificate_revoke, domain, revoke, result):
"""Test removing a domain that can certificates."""
assert result == on_domain_removed('test', 'domain-type-test', domain)
if revoke:
certificate_revoke.assert_has_calls(
[call(domain, really_revoke=False)])
else:
certificate_revoke.assert_not_called()