Browse Source

Refactor WebdavFactory + test config initialisation for wsgidav

Guénaël Muller 6 years ago
parent
commit
fdc6dd8b16
2 changed files with 65 additions and 7 deletions
  1. 15 6
      tracim/lib/webdav/__init__.py
  2. 50 1
      tracim/tests/library/test_webdav.py

+ 15 - 6
tracim/lib/webdav/__init__.py View File

44
         # Set config defaults
44
         # Set config defaults
45
         config = DEFAULT_CONFIG.copy()
45
         config = DEFAULT_CONFIG.copy()
46
         temp_verbose = config["verbose"]
46
         temp_verbose = config["verbose"]
47
-
48
         # Get pyramid Env
47
         # Get pyramid Env
49
         tracim_config_file_path = os.path.abspath(tracim_config_file_path)
48
         tracim_config_file_path = os.path.abspath(tracim_config_file_path)
50
         config['tracim_config'] = tracim_config_file_path
49
         config['tracim_config'] = tracim_config_file_path
51
-        global_conf = get_appsettings(config['tracim_config']).global_conf
52
-        local_conf = get_appsettings(config['tracim_config'], 'tracim_web')
53
-        settings = global_conf
54
-        settings.update(local_conf)
50
+        settings = self._get_tracim_settings(config)
55
         app_config = CFG(settings)
51
         app_config = CFG(settings)
56
 
52
 
57
         default_config_file = os.path.abspath(settings['wsgidav.config_path'])
53
         default_config_file = os.path.abspath(settings['wsgidav.config_path'])
91
         config['domaincontroller'] = TracimDomainController(
87
         config['domaincontroller'] = TracimDomainController(
92
             presetdomain=None,
88
             presetdomain=None,
93
             presetserver=None,
89
             presetserver=None,
94
-            app_config = app_config,
90
+            app_config=app_config,
95
         )
91
         )
96
         return config
92
         return config
97
 
93
 
94
+    def _get_tracim_settings(
95
+            self,
96
+            default_config,
97
+    ):
98
+        """
99
+        Get tracim settings
100
+        """
101
+        global_conf = get_appsettings(default_config['tracim_config']).global_conf
102
+        local_conf = get_appsettings(default_config['tracim_config'], 'tracim_web')  # nopep8
103
+        settings = global_conf
104
+        settings.update(local_conf)
105
+        return settings
106
+
98
     # INFO - G.M - 13-04-2018 - Copy from
107
     # INFO - G.M - 13-04-2018 - Copy from
99
     # wsgidav.server.run_server._readConfigFile
108
     # wsgidav.server.run_server._readConfigFile
100
     def _readConfigFile(self, config_file, verbose):
109
     def _readConfigFile(self, config_file, verbose):

+ 50 - 1
tracim/tests/library/test_webdav.py View File

3
 
3
 
4
 import pytest
4
 import pytest
5
 from sqlalchemy.exc import InvalidRequestError
5
 from sqlalchemy.exc import InvalidRequestError
6
-
6
+from wsgidav.wsgidav_app import DEFAULT_CONFIG
7
+from tracim import WebdavAppFactory
7
 from tracim.lib.core.user import UserApi
8
 from tracim.lib.core.user import UserApi
9
+from tracim.lib.webdav import TracimDomainController
8
 from tracim.tests import eq_
10
 from tracim.tests import eq_
9
 from tracim.lib.core.notifications import DummyNotifier
11
 from tracim.lib.core.notifications import DummyNotifier
10
 from tracim.lib.webdav.dav_provider import Provider
12
 from tracim.lib.webdav.dav_provider import Provider
15
 from tracim.fixtures.content import Content as ContentFixtures
17
 from tracim.fixtures.content import Content as ContentFixtures
16
 from tracim.fixtures.users_and_groups import Base as BaseFixture
18
 from tracim.fixtures.users_and_groups import Base as BaseFixture
17
 from wsgidav import util
19
 from wsgidav import util
20
+from unittest.mock import MagicMock
21
+
22
+
23
+class TestWebdavFactory(StandardTest):
24
+
25
+    def test_unit__initConfig__ok__nominal_case(self):
26
+        """
27
+        Check if config is correctly modify for wsgidav using mocked
28
+        wsgidav and tracim conf (as dict)
29
+        :return:
30
+        """
31
+        tracim_settings = {
32
+            'sqlalchemy.url': 'sqlite:///:memory:',
33
+            'user.auth_token.validity': '604800',
34
+            'depot_storage_dir': '/tmp/test/depot',
35
+            'depot_storage_name': 'test',
36
+            'preview_cache_dir': '/tmp/test/preview_cache',
37
+            'wsgidav.config_path': 'development.ini'
38
+
39
+        }
40
+        wsgidav_setting = DEFAULT_CONFIG.copy()
41
+        wsgidav_setting.update(
42
+            {
43
+               'root_path':  '',
44
+               'acceptbasic': True,
45
+               'acceptdigest': False,
46
+               'defaultdigest': False,
47
+            }
48
+        )
49
+        mock = MagicMock()
50
+        mock._initConfig = WebdavAppFactory._initConfig
51
+        mock._readConfigFile.return_value = wsgidav_setting
52
+        mock._get_tracim_settings.return_value = tracim_settings
53
+        config = mock._initConfig(mock)
54
+        assert config
55
+        assert config['acceptbasic'] is True
56
+        assert config['acceptdigest'] is False
57
+        assert config['defaultdigest'] is False
58
+        # TODO - G.M - 25-05-2018 - Better check for middleware stack config
59
+        assert 'middleware_stack' in config
60
+        assert len(config['middleware_stack']) == 7
61
+        assert 'root_path' in config
62
+        assert 'provider_mapping' in config
63
+        assert config['root_path'] in config['provider_mapping']
64
+        assert isinstance(config['provider_mapping'][config['root_path']], Provider)  # nopep8
65
+        assert 'domaincontroller' in config
66
+        assert isinstance(config['domaincontroller'], TracimDomainController)
18
 
67
 
19
 
68
 
20
 class TestWebDav(StandardTest):
69
 class TestWebDav(StandardTest):