Passed
Push — main ( 643c88...e4df14 )
by Jochen
04:22
created

test_delete()   A

Complexity

Conditions 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nop 2
dl 0
loc 9
rs 10
c 0
b 0
f 0
1
"""
2
:Copyright: 2014-2022 Jochen Kupperschmidt
3
:License: Revised BSD (see `LICENSE` file for details)
4
"""
5
6
from __future__ import annotations
7
from typing import Optional
8
9
import pytest
10
11
from byceps.events.page import PageCreated
12
from byceps.services.page import service as page_service
13
from byceps.services.page.transfer.models import Version
14
from byceps.services.site.transfer.models import Site
15
from byceps.services.user.transfer.models import User
16
17
from tests.helpers import generate_token, log_in_user
18
19
20
@pytest.fixture(scope='package')
21
def page_admin(make_admin):
22
    permission_ids = {
23
        'admin.access',
24
        'page.create',
25
        'page.update',
26
        'page.delete',
27
        'page.view',
28
        'page.view_history',
29
    }
30
    admin = make_admin(permission_ids)
31
    log_in_user(admin.id)
32
    return admin
33
34
35
@pytest.fixture(scope='package')
36
def page_admin_client(make_client, admin_app, page_admin):
37
    return make_client(admin_app, user_id=page_admin.id)
38
39
40
@pytest.fixture
41
def make_page(site: Site, page_admin: User):
42
    def _wrapper(
43
        name: Optional[str] = None,
44
        language_code: str = 'en',
45
        url_path: Optional[str] = None,
46
        title: str = 'Title',
47
        body: str = 'Body',
48
    ) -> tuple[Version, PageCreated]:
49
        if name is None:
50
            name = generate_token()
51
52
        if url_path is None:
53
            url_path = f'/page-{generate_token()}'
54
55
        version, event = page_service.create_page(
56
            site.id, name, language_code, url_path, page_admin.id, title, body
57
        )
58
        return version, event
59
60
    return _wrapper
61
62
63
def test_index_for_site(page_admin_client, site):
64
    url = f'/admin/pages/for_site/{site.id}'
65
    response = page_admin_client.get(url)
66
    assert response.status_code == 200
67
68
69
def test_view_current_version(page_admin_client, make_page):
70
    _, event = make_page()
71
    page_id = event.page_id
72
73
    url = f'/admin/pages/pages/{page_id}/current_version'
74
    response = page_admin_client.get(url)
75
    assert response.status_code == 200
76
77
78
def test_view_version(page_admin_client, make_page):
79
    version, event = make_page()
80
    page_id = event.page_id
81
82
    url = f'/admin/pages/versions/{version.id}'
83
    response = page_admin_client.get(url)
84
    assert response.status_code == 200
85
86
87
def test_history(page_admin_client, make_page):
88
    _, event = make_page()
89
    page_id = event.page_id
90
91
    url = f'/admin/pages/pages/{page_id}/history'
92
    response = page_admin_client.get(url)
93
    assert response.status_code == 200
94
95
96
def test_compare(page_admin_client, page_admin, make_page):
97
    version1, event = make_page()
98
    page_id = event.page_id
99
100
    page = page_service.get_page(page_id)
101
102
    version2, _ = page_service.update_page(
103
        page.id,
104
        page.language_code,
105
        page.url_path,
106
        page_admin.id,
107
        'Title v2',
108
        'Head v2',
109
        'Body v2',
110
    )
111
112
    url = f'/admin/pages/pages/{version1.id}/compare_to/{version2.id}'
113
    response = page_admin_client.get(url)
114
    assert response.status_code == 200
115
116
117
def test_create_form(page_admin_client, site):
118
    url = f'/admin/pages/for_site/{site.id}/create'
119
    response = page_admin_client.get(url)
120
    assert response.status_code == 200
121
122
123
def test_delete(page_admin_client, make_page):
124
    _, event = make_page()
125
    page_id = event.page_id
126
127
    url = f'/admin/pages/pages/{page_id}'
128
    response = page_admin_client.delete(url)
129
    assert response.status_code == 204
130
131
    assert page_service.find_page(page_id) is None
132