File: test_functional.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 (103 lines) | stat: -rw-r--r-- 3,972 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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Functional, browser based tests for radicale app.
"""

import logging

import pytest
import requests

from plinth.tests import functional

logger = logging.getLogger(__name__)

pytestmark = [pytest.mark.apps, pytest.mark.radicale]


class TestRadicaleApp(functional.BaseAppTests):
    app_name = 'radicale'
    has_service = True
    has_web = True

    def assert_app_running(self, session_browser):
        """Assert that the app is running."""
        assert functional.service_is_running(session_browser, self.app_name)
        assert _calendar_is_available(session_browser)
        assert _addressbook_is_available(session_browser)

    def assert_app_not_running(self, session_browser):
        """Assert that the app is not running."""
        assert functional.service_is_not_running(session_browser,
                                                 self.app_name)
        assert not _calendar_is_available(session_browser)
        assert not _addressbook_is_available(session_browser)

    def test_access_rights(self, session_browser):
        """Test setting the access rights."""
        functional.app_enable(session_browser, 'radicale')
        _set_access_rights(session_browser, 'owner_only')

        # Owner-write access rights
        _set_access_rights(session_browser, 'owner_write')
        assert functional.service_is_running(session_browser, 'radicale')
        assert _get_access_rights(session_browser) == 'owner_write'

        # Authenticated access rights
        _set_access_rights(session_browser, 'authenticated')
        assert functional.service_is_running(session_browser, 'radicale')
        assert _get_access_rights(session_browser) == 'authenticated'

        # Owner-only access rights
        _set_access_rights(session_browser, 'owner_only')
        assert functional.service_is_running(session_browser, 'radicale')
        assert _get_access_rights(session_browser) == 'owner_only'

    @pytest.mark.backups
    def test_backup_restore(self, session_browser):
        """Test backup and restore of configuration."""
        functional.app_enable(session_browser, 'radicale')
        _set_access_rights(session_browser, 'owner_only')
        functional.backup_create(session_browser, 'radicale', 'test_radicale')

        _set_access_rights(session_browser, 'owner_write')
        functional.backup_restore(session_browser, 'radicale', 'test_radicale')

        assert functional.service_is_running(session_browser, 'radicale')
        assert _get_access_rights(session_browser) == 'owner_only'


def _get_access_rights(browser):
    access_rights_types = ['owner_only', 'owner_write', 'authenticated']
    functional.nav_to_module(browser, 'radicale')
    for access_rights_type in access_rights_types:
        if browser.find_by_value(access_rights_type).checked:
            return access_rights_type


def _set_access_rights(browser, access_rights_type):
    functional.nav_to_module(browser, 'radicale')
    browser.choose('access_rights', access_rights_type)
    functional.submit(browser, form_class='form-configuration')


def _calendar_is_available(browser):
    """Return whether calendar is available at well-known URL."""
    conf = functional.config['DEFAULT']
    url = functional.base_url + '/.well-known/caldav'
    logging.captureWarnings(True)
    request = requests.get(url, auth=(conf['username'], conf['password']),
                           verify=False)
    logging.captureWarnings(False)
    return request.status_code != 404


def _addressbook_is_available(browser):
    """Return whether addressbook is available at well-known URL."""
    conf = functional.config['DEFAULT']
    url = functional.base_url + '/.well-known/carddav'
    logging.captureWarnings(True)
    request = requests.get(url, auth=(conf['username'], conf['password']),
                           verify=False)
    logging.captureWarnings(False)
    return request.status_code != 404