xref: /unit/test/test_static_share.py (revision 2616:ab2896c980ab)
1import os
2from pathlib import Path
3
4import pytest
5
6from unit.applications.proto import ApplicationProto
7
8client = ApplicationProto()
9
10
11@pytest.fixture(autouse=True)
12def setup_method_fixture(temp_dir):
13    os.makedirs(f'{temp_dir}/assets/dir')
14    os.makedirs(f'{temp_dir}/assets/dir2')
15
16    Path(f'{temp_dir}/assets/dir/file').write_text('1', encoding='utf-8')
17    Path(f'{temp_dir}/assets/dir2/file2').write_text('2', encoding='utf-8')
18
19    assert 'success' in client.conf(
20        {
21            "listeners": {"*:8080": {"pass": "routes"}},
22            "routes": [{"action": {"share": f'{temp_dir}/assets$uri'}}],
23            "applications": {},
24        }
25    )
26
27
28def action_update(conf):
29    assert 'success' in client.conf(conf, 'routes/0/action')
30
31
32def test_share_array(temp_dir):
33    assert client.get(url='/dir/file')['body'] == '1'
34    assert client.get(url='/dir2/file2')['body'] == '2'
35
36    action_update({"share": [f'{temp_dir}/assets/dir$uri']})
37
38    assert client.get(url='/file')['body'] == '1'
39    assert client.get(url='/file2')['status'] == 404
40
41    action_update(
42        {
43            "share": [
44                f'{temp_dir}/assets/dir$uri',
45                f'{temp_dir}/assets/dir2$uri',
46            ]
47        }
48    )
49
50    assert client.get(url='/file')['body'] == '1'
51    assert client.get(url='/file2')['body'] == '2'
52
53    action_update(
54        {
55            "share": [
56                f'{temp_dir}/assets/dir2$uri',
57                f'{temp_dir}/assets/dir3$uri',
58            ]
59        }
60    )
61
62    assert client.get(url='/file')['status'] == 404
63    assert client.get(url='/file2')['body'] == '2'
64
65
66def test_share_array_fallback():
67    action_update({"share": ["/blah", "/blah2"], "fallback": {"return": 201}})
68
69    assert client.get()['status'] == 201
70
71
72def test_share_array_invalid():
73    assert 'error' in client.conf({"share": []}, 'routes/0/action')
74    assert 'error' in client.conf({"share": {}}, 'routes/0/action')
75