xref: /unit/test/test_static_variables.py (revision 2330:4b1f175f9c88)
1import os
2from pathlib import Path
3
4import pytest
5from unit.applications.proto import TestApplicationProto
6
7
8class TestStaticVariables(TestApplicationProto):
9    prerequisites = {}
10
11    @pytest.fixture(autouse=True)
12    def setup_method_fixture(self, temp_dir):
13        os.makedirs(f'{temp_dir}/assets/dir')
14        os.makedirs(f'{temp_dir}/assets/d$r')
15        Path(f'{temp_dir}/assets/index.html').write_text('0123456789')
16        Path(f'{temp_dir}/assets/dir/file').write_text('file')
17        Path(f'{temp_dir}/assets/d$r/file').write_text('d$r')
18
19        self._load_conf(
20            {
21                "listeners": {"*:7080": {"pass": "routes"}},
22                "routes": [{"action": {"share": f'{temp_dir}/assets$uri'}}],
23            }
24        )
25
26    def update_share(self, share):
27        if isinstance(share, list):
28            return self.conf(share, 'routes/0/action/share')
29
30        return self.conf(f'"{share}"', 'routes/0/action/share')
31
32    def test_static_variables(self, temp_dir):
33        assert self.get(url='/index.html')['status'] == 200
34        assert self.get(url='/d$r/file')['status'] == 200
35
36        assert 'success' in self.update_share('$uri')
37        assert self.get(url=f'{temp_dir}/assets/index.html')['status'] == 200
38
39        assert 'success' in self.update_share(f'{temp_dir}/assets${{uri}}')
40        assert self.get(url='/index.html')['status'] == 200
41
42    def test_static_variables_array(self, temp_dir):
43        assert 'success' in self.update_share(
44            [f'{temp_dir}/assets$uri', '$uri']
45        )
46
47        assert self.get(url='/dir/file')['status'] == 200
48        assert self.get(url=f'{temp_dir}/assets/index.html')['status'] == 200
49        assert self.get(url='/blah')['status'] == 404
50
51        assert 'success' in self.conf(
52            {
53                "share": [f'{temp_dir}/assets$uri', '$uri'],
54                "fallback": {"return": 201},
55            },
56            'routes/0/action',
57        )
58
59        assert self.get(url='/dir/file')['status'] == 200
60        assert self.get(url=f'{temp_dir}/assets/index.html')['status'] == 200
61        assert self.get(url='/dir/blah')['status'] == 201
62
63    def test_static_variables_buildin_start(self, temp_dir):
64        assert 'success' in self.update_share('$uri/assets/index.html')
65        assert self.get(url=temp_dir)['status'] == 200
66
67    def test_static_variables_buildin_mid(self, temp_dir):
68        assert 'success' in self.update_share(f'{temp_dir}$uri/index.html')
69        assert self.get(url='/assets')['status'] == 200
70
71    def test_static_variables_buildin_end(self):
72        assert self.get(url='/index.html')['status'] == 200
73
74    def test_static_variables_invalid(self, temp_dir):
75        assert 'error' in self.update_share(f'{temp_dir}/assets/d$r$uri')
76        assert 'error' in self.update_share(f'{temp_dir}/assets/$$uri')
77        assert 'error' in self.update_share(
78            [f'{temp_dir}/assets$uri', f'{temp_dir}/assets/dir', '$$uri']
79        )
80