FreedomBox/plinth/modules/names/tests/test_components.py
Sunil Mohan Adapa 9368504da5
*.py: Use SPDX license identifier
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2020-02-19 14:38:55 +02:00

139 lines
4.7 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Test the App components provides by names app.
"""
import pytest
from ..components import DomainName, DomainType
@pytest.fixture(name='domain_type')
def fixture_domain_type():
"""Fixture to create a domain type after clearing all existing ones."""
DomainType._all = {}
return DomainType('test-domain-type', 'x-display-name', 'config_url')
@pytest.fixture(name='domain_name')
def fixture_domain_name(domain_type):
DomainName._all = {}
return DomainName('test-domain-name', 'test.example.com',
'test-domain-type', ['http', 443, 'ssh', 9000])
def test_domain_type_init():
"""Test initialization of domain type object."""
component = DomainType('test-component', 'x-display-name', 'config_url')
assert component.component_id == 'test-component'
assert component.display_name == 'x-display-name'
assert component.configuration_url == 'config_url'
assert component.can_have_certificate
assert len(DomainType._all)
assert DomainType._all['test-component'] == component
component = DomainType('test-component', 'x-display-name', 'config_url',
can_have_certificate=False)
assert not component.can_have_certificate
def test_domain_type_get(domain_type):
"""Test getting domain type object."""
assert DomainType.get('test-domain-type') == domain_type
with pytest.raises(KeyError):
DomainType.get('unknown-domain-type')
def test_domain_type_list(domain_type):
"""Test listing of all domain types."""
assert DomainType.list()['test-domain-type'] == domain_type
assert id(DomainType.list()) != id(DomainType._all)
def test_domain_name_init(domain_type):
"""Test initializing a domain name."""
component = DomainName('test-component', 'test.example.com',
'test-domain-type', '__all__')
assert component.component_id == 'test-component'
assert component.name == 'test.example.com'
assert component.domain_type == domain_type
assert component.services == '__all__'
assert len(DomainName._all)
assert DomainName._all['test-component'] == component
def test_domain_name_service_normalization(domain_name):
"""Test that passed services get normalized during initialization."""
assert set(domain_name.services) == {'http', 'https', 'ssh', '9000'}
def test_domain_name_getting_readable_services(domain_name):
"""Test that getting readable string for services works"""
strings = [str(string) for string in domain_name.get_readable_services()]
assert sorted(strings) == sorted(['All web apps', 'Secure Shell', '9000'])
def test_domain_name_has_service(domain_name):
"""Test checking if a domain name provides a service."""
assert domain_name.has_service('http')
assert domain_name.has_service('https')
assert domain_name.has_service('9000')
assert not domain_name.has_service('1234')
assert domain_name.has_service(None)
domain_name._services = '__all__'
assert domain_name.has_service('1234')
def test_domain_name_remove(domain_name):
"""Test removing a domain name from global list."""
domain_name.remove()
assert 'test-domain-name' not in DomainName._all
domain_name.remove()
def test_domain_name_get(domain_name):
"""Test retrieving a domain name using component ID."""
assert DomainName.get('test-domain-name') == domain_name
with pytest.raises(KeyError):
DomainName.get('unknown-domain-name')
def test_domain_name_list(domain_name):
"""Test that retrieving list of domain name objects."""
domain_name2 = DomainName('test-domain-name2', 'test.example.com',
'test-domain-type', '__all__')
domains = DomainName.list()
assert len(domains) == 2
assert domain_name in domains
assert domain_name2 in domains
domains = DomainName.list('http')
assert len(domains) == 2
assert domain_name in domains
assert domain_name2 in domains
domains = DomainName.list('unknown')
assert len(domains) == 1
assert domain_name not in domains
assert domain_name2 in domains
def test_domain_name_list_names(domain_name):
"""Test that retrieving list of unique domain names works."""
DomainName('test-domain-name2', 'test.example.com', 'test-domain-type',
['http'])
DomainName('test-domain-name3', 'test3.example.com', 'test-domain-type',
'__all__')
domains = DomainName.list_names()
assert domains == {'test.example.com', 'test3.example.com'}
domains = DomainName.list_names('http')
assert domains == {'test.example.com', 'test3.example.com'}
domains = DomainName.list_names('unknown')
assert domains == {'test3.example.com'}