File: test_domain_name_changes.py

package info (click to toggle)
freedombox 26.3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 83,092 kB
  • sloc: python: 48,542; javascript: 1,730; xml: 481; makefile: 290; sh: 137; php: 32
file content (75 lines) | stat: -rw-r--r-- 2,497 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 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()