Increase test coverage
This commit is contained in:
		
							parent
							
								
									5aad617fbf
								
							
						
					
					
						commit
						5e2a9468c1
					
				
					 10 changed files with 327 additions and 69 deletions
				
			
		
							
								
								
									
										0
									
								
								tests/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								tests/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										69
									
								
								tests/base_client_it.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								tests/base_client_it.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,69 @@
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import shutil
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					from os import path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from webdav3.client import Client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BaseClientTestCase(unittest.TestCase):
 | 
				
			||||||
 | 
					    remote_path_file = 'test_dir/test.txt'
 | 
				
			||||||
 | 
					    remote_path_file2 = 'test_dir2/test.txt'
 | 
				
			||||||
 | 
					    remote_inner_path_file = 'test_dir/inner/test.txt'
 | 
				
			||||||
 | 
					    remote_path_dir = 'test_dir'
 | 
				
			||||||
 | 
					    remote_path_dir2 = 'test_dir2'
 | 
				
			||||||
 | 
					    remote_inner_path_dir = 'test_dir/inner'
 | 
				
			||||||
 | 
					    local_base_dir = 'tests/'
 | 
				
			||||||
 | 
					    local_file = 'test.txt'
 | 
				
			||||||
 | 
					    local_file_path = local_base_dir + 'test.txt'
 | 
				
			||||||
 | 
					    local_path_dir = local_base_dir + 'res/test_dir'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    options = {
 | 
				
			||||||
 | 
					        'webdav_hostname': 'http://localhost:8585',
 | 
				
			||||||
 | 
					        'webdav_login': 'alice',
 | 
				
			||||||
 | 
					        'webdav_password': 'secret1234'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # options = {
 | 
				
			||||||
 | 
					    #     'webdav_hostname': 'https://webdav.yandex.ru',
 | 
				
			||||||
 | 
					    #     'webdav_login': 'webdavclient.test2',
 | 
				
			||||||
 | 
					    #     'webdav_password': 'Qwerty123!'
 | 
				
			||||||
 | 
					    # }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self.client = Client(self.options)
 | 
				
			||||||
 | 
					        if path.exists(path=self.local_path_dir):
 | 
				
			||||||
 | 
					            shutil.rmtree(path=self.local_path_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def tearDown(self):
 | 
				
			||||||
 | 
					        if path.exists(path=self.local_path_dir):
 | 
				
			||||||
 | 
					            shutil.rmtree(path=self.local_path_dir)
 | 
				
			||||||
 | 
					        if self.client.check(remote_path=self.remote_path_dir):
 | 
				
			||||||
 | 
					            self.client.clean(remote_path=self.remote_path_dir)
 | 
				
			||||||
 | 
					        if self.client.check(remote_path=self.remote_path_dir2):
 | 
				
			||||||
 | 
					            self.client.clean(remote_path=self.remote_path_dir2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _prepare_for_downloading(self, inner_dir=False):
 | 
				
			||||||
 | 
					        if not self.client.check(remote_path=self.remote_path_dir):
 | 
				
			||||||
 | 
					            self.client.mkdir(remote_path=self.remote_path_dir)
 | 
				
			||||||
 | 
					        if not self.client.check(remote_path=self.remote_path_file):
 | 
				
			||||||
 | 
					            self.client.upload_file(remote_path=self.remote_path_file, local_path=self.local_file_path)
 | 
				
			||||||
 | 
					        if not path.exists(self.local_path_dir):
 | 
				
			||||||
 | 
					            os.makedirs(self.local_path_dir)
 | 
				
			||||||
 | 
					        if inner_dir:
 | 
				
			||||||
 | 
					            if not self.client.check(remote_path=self.remote_inner_path_dir):
 | 
				
			||||||
 | 
					                self.client.mkdir(remote_path=self.remote_inner_path_dir)
 | 
				
			||||||
 | 
					            if not self.client.check(remote_path=self.remote_inner_path_file):
 | 
				
			||||||
 | 
					                self.client.upload_file(remote_path=self.remote_inner_path_file, local_path=self.local_file_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _prepare_for_uploading(self):
 | 
				
			||||||
 | 
					        if not self.client.check(remote_path=self.remote_path_dir):
 | 
				
			||||||
 | 
					            self.client.mkdir(remote_path=self.remote_path_dir)
 | 
				
			||||||
 | 
					        if not path.exists(path=self.local_path_dir):
 | 
				
			||||||
 | 
					            os.makedirs(self.local_path_dir)
 | 
				
			||||||
 | 
					        if not path.exists(path=self.local_path_dir + os.sep + self.local_file):
 | 
				
			||||||
 | 
					            shutil.copy(src=self.local_file_path, dst=self.local_path_dir + os.sep + self.local_file)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    unittest.main()
 | 
				
			||||||
| 
						 | 
					@ -1,51 +1,14 @@
 | 
				
			||||||
import os.path
 | 
					import os.path
 | 
				
			||||||
import shutil
 | 
					 | 
				
			||||||
import unittest
 | 
					import unittest
 | 
				
			||||||
from io import BytesIO, StringIO
 | 
					from io import BytesIO, StringIO
 | 
				
			||||||
from os import path
 | 
					from os import path
 | 
				
			||||||
from time import sleep
 | 
					from time import sleep
 | 
				
			||||||
from unittest import TestCase
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
from webdav3.client import Client
 | 
					from tests.base_client_it import BaseClientTestCase
 | 
				
			||||||
from webdav3.exceptions import MethodNotSupported
 | 
					from webdav3.exceptions import MethodNotSupported, OptionNotValid, RemoteResourceNotFound
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ClientTestCase(TestCase):
 | 
					class ClientTestCase(BaseClientTestCase):
 | 
				
			||||||
    remote_path_file = 'test_dir/test.txt'
 | 
					 | 
				
			||||||
    remote_path_file2 = 'test_dir2/test.txt'
 | 
					 | 
				
			||||||
    remote_inner_path_file = 'test_dir/inner/test.txt'
 | 
					 | 
				
			||||||
    remote_path_dir = 'test_dir'
 | 
					 | 
				
			||||||
    remote_path_dir2 = 'test_dir2'
 | 
					 | 
				
			||||||
    remote_inner_path_dir = 'test_dir/inner'
 | 
					 | 
				
			||||||
    local_base_dir = 'tests/'
 | 
					 | 
				
			||||||
    local_file = 'test.txt'
 | 
					 | 
				
			||||||
    local_file_path = local_base_dir + 'test.txt'
 | 
					 | 
				
			||||||
    local_path_dir = local_base_dir + 'res/test_dir'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    options = {
 | 
					 | 
				
			||||||
        'webdav_hostname': 'http://localhost:8585',
 | 
					 | 
				
			||||||
        'webdav_login': 'alice',
 | 
					 | 
				
			||||||
        'webdav_password': 'secret1234'
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # options = {
 | 
					 | 
				
			||||||
    #     'webdav_hostname': 'https://webdav.yandex.ru',
 | 
					 | 
				
			||||||
    #     'webdav_login': 'webdavclient.test2',
 | 
					 | 
				
			||||||
    #     'webdav_password': 'Qwerty123!'
 | 
					 | 
				
			||||||
    # }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def setUp(self):
 | 
					 | 
				
			||||||
        self.client = Client(self.options)
 | 
					 | 
				
			||||||
        if path.exists(path=self.local_path_dir):
 | 
					 | 
				
			||||||
            shutil.rmtree(path=self.local_path_dir)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def tearDown(self):
 | 
					 | 
				
			||||||
        if path.exists(path=self.local_path_dir):
 | 
					 | 
				
			||||||
            shutil.rmtree(path=self.local_path_dir)
 | 
					 | 
				
			||||||
        if self.client.check(remote_path=self.remote_path_dir):
 | 
					 | 
				
			||||||
            self.client.clean(remote_path=self.remote_path_dir)
 | 
					 | 
				
			||||||
        if self.client.check(remote_path=self.remote_path_dir2):
 | 
					 | 
				
			||||||
            self.client.clean(remote_path=self.remote_path_dir2)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_list(self):
 | 
					    def test_list(self):
 | 
				
			||||||
        self._prepare_for_downloading()
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
| 
						 | 
					@ -69,12 +32,29 @@ class ClientTestCase(TestCase):
 | 
				
			||||||
        self.client.mkdir(remote_path=self.remote_path_dir)
 | 
					        self.client.mkdir(remote_path=self.remote_path_dir)
 | 
				
			||||||
        self.assertTrue(self.client.check(remote_path=self.remote_path_dir), 'Expected the directory is created.')
 | 
					        self.assertTrue(self.client.check(remote_path=self.remote_path_dir), 'Expected the directory is created.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_download_to(self):
 | 
					    def test_download_from(self):
 | 
				
			||||||
        self._prepare_for_downloading()
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
        buff = BytesIO()
 | 
					        buff = BytesIO()
 | 
				
			||||||
        self.client.download_from(buff=buff, remote_path=self.remote_path_file)
 | 
					        self.client.download_from(buff=buff, remote_path=self.remote_path_file)
 | 
				
			||||||
        self.assertEqual(buff.getvalue(), b'test content for testing of webdav client')
 | 
					        self.assertEqual(buff.getvalue(), b'test content for testing of webdav client')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_download_from_dir(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        buff = BytesIO()
 | 
				
			||||||
 | 
					        with self.assertRaises(OptionNotValid):
 | 
				
			||||||
 | 
					            self.client.download_from(buff=buff, remote_path=self.remote_path_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_download_from_wrong_file(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        buff = BytesIO()
 | 
				
			||||||
 | 
					        with self.assertRaises(RemoteResourceNotFound):
 | 
				
			||||||
 | 
					            self.client.download_from(buff=buff, remote_path='wrong')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_download_directory_wrong(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        with self.assertRaises(RemoteResourceNotFound):
 | 
				
			||||||
 | 
					            self.client.download_directory(remote_path=self.remote_path_file, local_path=self.local_path_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_download(self):
 | 
					    def test_download(self):
 | 
				
			||||||
        self._prepare_for_downloading()
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
        self.client.download(local_path=self.local_path_dir, remote_path=self.remote_path_dir)
 | 
					        self.client.download(local_path=self.local_path_dir, remote_path=self.remote_path_dir)
 | 
				
			||||||
| 
						 | 
					@ -241,26 +221,8 @@ class ClientTestCase(TestCase):
 | 
				
			||||||
        self.assertTrue(self.client.check(self.remote_path_dir), 'Expected the directory is created.')
 | 
					        self.assertTrue(self.client.check(self.remote_path_dir), 'Expected the directory is created.')
 | 
				
			||||||
        self.assertTrue(self.client.check(self.remote_path_file), 'Expected the file is uploaded.')
 | 
					        self.assertTrue(self.client.check(self.remote_path_file), 'Expected the file is uploaded.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _prepare_for_downloading(self, inner_dir=False):
 | 
					    def test_valid(self):
 | 
				
			||||||
        if not self.client.check(remote_path=self.remote_path_dir):
 | 
					        self.assertTrue(self.client.valid())
 | 
				
			||||||
            self.client.mkdir(remote_path=self.remote_path_dir)
 | 
					 | 
				
			||||||
        if not self.client.check(remote_path=self.remote_path_file):
 | 
					 | 
				
			||||||
            self.client.upload_file(remote_path=self.remote_path_file, local_path=self.local_file_path)
 | 
					 | 
				
			||||||
        if not path.exists(self.local_path_dir):
 | 
					 | 
				
			||||||
            os.makedirs(self.local_path_dir)
 | 
					 | 
				
			||||||
        if inner_dir:
 | 
					 | 
				
			||||||
            if not self.client.check(remote_path=self.remote_inner_path_dir):
 | 
					 | 
				
			||||||
                self.client.mkdir(remote_path=self.remote_inner_path_dir)
 | 
					 | 
				
			||||||
            if not self.client.check(remote_path=self.remote_inner_path_file):
 | 
					 | 
				
			||||||
                self.client.upload_file(remote_path=self.remote_inner_path_file, local_path=self.local_file_path)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def _prepare_for_uploading(self):
 | 
					 | 
				
			||||||
        if not self.client.check(remote_path=self.remote_path_dir):
 | 
					 | 
				
			||||||
            self.client.mkdir(remote_path=self.remote_path_dir)
 | 
					 | 
				
			||||||
        if not path.exists(path=self.local_path_dir):
 | 
					 | 
				
			||||||
            os.makedirs(self.local_path_dir)
 | 
					 | 
				
			||||||
        if not path.exists(path=self.local_path_dir + os.sep + self.local_file):
 | 
					 | 
				
			||||||
            shutil.copy(src=self.local_file_path, dst=self.local_path_dir + os.sep + self.local_file)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										75
									
								
								tests/test_client_resource_it.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								tests/test_client_resource_it.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,75 @@
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from tests.base_client_it import BaseClientTestCase
 | 
				
			||||||
 | 
					from webdav3.client import Resource
 | 
				
			||||||
 | 
					from webdav3.urn import Urn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ResourceTestCase(BaseClientTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_str(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_file))
 | 
				
			||||||
 | 
					        self.assertEqual('resource /test_dir/test.txt', resource.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_is_not_dir(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_file))
 | 
				
			||||||
 | 
					        self.assertFalse(resource.is_dir())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_is_dir(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_dir))
 | 
				
			||||||
 | 
					        self.assertTrue(resource.is_dir())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_rename(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_file))
 | 
				
			||||||
 | 
					        resource.rename('new_name.text')
 | 
				
			||||||
 | 
					        self.assertTrue(self.client.check(self.remote_path_dir + '/new_name.text'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_move(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_file))
 | 
				
			||||||
 | 
					        self.client.mkdir(self.remote_path_dir2)
 | 
				
			||||||
 | 
					        resource.move(self.remote_path_file2)
 | 
				
			||||||
 | 
					        self.assertFalse(self.client.check(self.remote_path_file))
 | 
				
			||||||
 | 
					        self.assertTrue(self.client.check(self.remote_path_file2))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_copy(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_file))
 | 
				
			||||||
 | 
					        self.client.mkdir(self.remote_path_dir2)
 | 
				
			||||||
 | 
					        resource.copy(self.remote_path_file2)
 | 
				
			||||||
 | 
					        self.assertTrue(self.client.check(self.remote_path_file))
 | 
				
			||||||
 | 
					        self.assertTrue(self.client.check(self.remote_path_file2))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_info(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_file))
 | 
				
			||||||
 | 
					        info = resource.info()
 | 
				
			||||||
 | 
					        self.assertIsNotNone(info)
 | 
				
			||||||
 | 
					        self.assertGreater(len(info), 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_info_params(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_file))
 | 
				
			||||||
 | 
					        info = resource.info(['size'])
 | 
				
			||||||
 | 
					        self.assertIsNotNone(info)
 | 
				
			||||||
 | 
					        self.assertEqual(1, len(info))
 | 
				
			||||||
 | 
					        self.assertTrue('size' in info)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_clean(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_file))
 | 
				
			||||||
 | 
					        resource.clean()
 | 
				
			||||||
 | 
					        self.assertFalse(self.client.check(self.remote_path_file))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_check(self):
 | 
				
			||||||
 | 
					        self._prepare_for_downloading()
 | 
				
			||||||
 | 
					        resource = Resource(self.client, Urn(self.remote_path_file))
 | 
				
			||||||
 | 
					        self.assertTrue(resource.check())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    unittest.main()
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@ from unittest import TestCase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from lxml.etree import ElementTree, Element
 | 
					from lxml.etree import ElementTree, Element
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from webdav3.client import WebDavXmlUtils as utils
 | 
					from webdav3.client import WebDavXmlUtils as utils, listdir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ClientTestCase(TestCase):
 | 
					class ClientTestCase(TestCase):
 | 
				
			||||||
| 
						 | 
					@ -156,6 +156,11 @@ class ClientTestCase(TestCase):
 | 
				
			||||||
        result = utils.parse_is_dir_response(content.encode('utf-8'), path, hostname)
 | 
					        result = utils.parse_is_dir_response(content.encode('utf-8'), path, hostname)
 | 
				
			||||||
        self.assertFalse(result, 'It should be file')
 | 
					        self.assertFalse(result, 'It should be file')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_listdir_inner_dir(self):
 | 
				
			||||||
 | 
					        file_names = listdir('.')
 | 
				
			||||||
 | 
					        self.assertGreater(len(file_names), 0)
 | 
				
			||||||
 | 
					        self.assertTrue('webdav3/' in file_names)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    unittest.main()
 | 
					    unittest.main()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										91
									
								
								tests/test_connection.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								tests/test_connection.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,91 @@
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from webdav3.client import get_options
 | 
				
			||||||
 | 
					from webdav3.connection import WebDAVSettings, OptionNotValid, ConnectionSettings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ConnectionTestCase(unittest.TestCase):
 | 
				
			||||||
 | 
					    def test_connection_settings_valid(self):
 | 
				
			||||||
 | 
					        options = {
 | 
				
			||||||
 | 
					            'webdav_hostname': 'http://localhost:8585',
 | 
				
			||||||
 | 
					            'webdav_login': 'alice',
 | 
				
			||||||
 | 
					            'webdav_password': 'secret1234'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        webdav_options = get_options(option_type=WebDAVSettings, from_options=options)
 | 
				
			||||||
 | 
					        settings = WebDAVSettings(webdav_options)
 | 
				
			||||||
 | 
					        self.assertTrue(settings.is_valid())
 | 
				
			||||||
 | 
					        self.assertTrue(settings.valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_connection_settings_no_hostname(self):
 | 
				
			||||||
 | 
					        options = {
 | 
				
			||||||
 | 
					            'webdav_login': 'alice',
 | 
				
			||||||
 | 
					            'webdav_password': 'secret1234'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        webdav_options = get_options(option_type=WebDAVSettings, from_options=options)
 | 
				
			||||||
 | 
					        settings = WebDAVSettings(webdav_options)
 | 
				
			||||||
 | 
					        self.assertRaises(OptionNotValid, settings.is_valid)
 | 
				
			||||||
 | 
					        self.assertFalse(settings.valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_connection_settings_no_login(self):
 | 
				
			||||||
 | 
					        options = {
 | 
				
			||||||
 | 
					            'webdav_hostname': 'http://localhost:8585',
 | 
				
			||||||
 | 
					            'webdav_password': 'secret1234'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        webdav_options = get_options(option_type=WebDAVSettings, from_options=options)
 | 
				
			||||||
 | 
					        settings = WebDAVSettings(webdav_options)
 | 
				
			||||||
 | 
					        self.assertRaises(OptionNotValid, settings.is_valid)
 | 
				
			||||||
 | 
					        self.assertFalse(settings.valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_connection_settings_no_token_and_no_login(self):
 | 
				
			||||||
 | 
					        options = {
 | 
				
			||||||
 | 
					            'webdav_hostname': 'http://localhost:8585'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        webdav_options = get_options(option_type=WebDAVSettings, from_options=options)
 | 
				
			||||||
 | 
					        settings = WebDAVSettings(webdav_options)
 | 
				
			||||||
 | 
					        self.assertRaises(OptionNotValid, settings.is_valid)
 | 
				
			||||||
 | 
					        self.assertFalse(settings.valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_connection_settings_wrong_cert_path(self):
 | 
				
			||||||
 | 
					        options = {
 | 
				
			||||||
 | 
					            'webdav_hostname': 'http://localhost:8585',
 | 
				
			||||||
 | 
					            'webdav_login': 'alice',
 | 
				
			||||||
 | 
					            'cert_path': './wrong.file',
 | 
				
			||||||
 | 
					            'webdav_password': 'secret1234'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        webdav_options = get_options(option_type=WebDAVSettings, from_options=options)
 | 
				
			||||||
 | 
					        settings = WebDAVSettings(webdav_options)
 | 
				
			||||||
 | 
					        self.assertRaises(OptionNotValid, settings.is_valid)
 | 
				
			||||||
 | 
					        self.assertFalse(settings.valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_connection_settings_wrong_key_path(self):
 | 
				
			||||||
 | 
					        options = {
 | 
				
			||||||
 | 
					            'webdav_hostname': 'http://localhost:8585',
 | 
				
			||||||
 | 
					            'webdav_login': 'alice',
 | 
				
			||||||
 | 
					            'key_path': './wrong.file',
 | 
				
			||||||
 | 
					            'webdav_password': 'secret1234'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        webdav_options = get_options(option_type=WebDAVSettings, from_options=options)
 | 
				
			||||||
 | 
					        settings = WebDAVSettings(webdav_options)
 | 
				
			||||||
 | 
					        self.assertRaises(OptionNotValid, settings.is_valid)
 | 
				
			||||||
 | 
					        self.assertFalse(settings.valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_connection_settings_with_key_path_an_no_cert_path(self):
 | 
				
			||||||
 | 
					        options = {
 | 
				
			||||||
 | 
					            'webdav_hostname': 'http://localhost:8585',
 | 
				
			||||||
 | 
					            'webdav_login': 'alice',
 | 
				
			||||||
 | 
					            'key_path': './publish.sh',
 | 
				
			||||||
 | 
					            'webdav_password': 'secret1234'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        webdav_options = get_options(option_type=WebDAVSettings, from_options=options)
 | 
				
			||||||
 | 
					        settings = WebDAVSettings(webdav_options)
 | 
				
			||||||
 | 
					        self.assertRaises(OptionNotValid, settings.is_valid)
 | 
				
			||||||
 | 
					        self.assertFalse(settings.valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_connection_settings_does_nothing(self):
 | 
				
			||||||
 | 
					        settings = ConnectionSettings()
 | 
				
			||||||
 | 
					        settings.is_valid()
 | 
				
			||||||
 | 
					        self.assertTrue(settings.valid())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    unittest.main()
 | 
				
			||||||
							
								
								
									
										50
									
								
								tests/test_exceptions.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								tests/test_exceptions.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,50 @@
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from webdav3.exceptions import OptionNotValid, LocalResourceNotFound, RemoteResourceNotFound, MethodNotSupported, ConnectionException, NoConnection, \
 | 
				
			||||||
 | 
					    RemoteParentNotFound, NotConnection, ResponseErrorCode, NotEnoughSpace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ExceptionsTestCase(unittest.TestCase):
 | 
				
			||||||
 | 
					    def test_option_not_valid(self):
 | 
				
			||||||
 | 
					        exception = OptionNotValid('Name', 'Value', 'Namespace/')
 | 
				
			||||||
 | 
					        self.assertEqual("Option (Namespace/Name=Value) have invalid name or value", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_local_resource_not_found(self):
 | 
				
			||||||
 | 
					        exception = LocalResourceNotFound('Path')
 | 
				
			||||||
 | 
					        self.assertEqual("Local file: Path not found", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_remote_resource_not_found(self):
 | 
				
			||||||
 | 
					        exception = RemoteResourceNotFound('Path')
 | 
				
			||||||
 | 
					        self.assertEqual("Remote resource: Path not found", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_remote_parent_not_found(self):
 | 
				
			||||||
 | 
					        exception = RemoteParentNotFound('Path')
 | 
				
			||||||
 | 
					        self.assertEqual("Remote parent for: Path not found", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_method_not_supported(self):
 | 
				
			||||||
 | 
					        exception = MethodNotSupported('HEAD', 'Server')
 | 
				
			||||||
 | 
					        self.assertEqual("Method 'HEAD' not supported for Server", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_connection_exception(self):
 | 
				
			||||||
 | 
					        exception = ConnectionException(MethodNotSupported('HEAD', 'Server'))
 | 
				
			||||||
 | 
					        self.assertEqual("Method 'HEAD' not supported for Server", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_no_connection(self):
 | 
				
			||||||
 | 
					        exception = NoConnection('Server')
 | 
				
			||||||
 | 
					        self.assertEqual("No connection with Server", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_not_connection_legacy(self):
 | 
				
			||||||
 | 
					        exception = NotConnection('Server')
 | 
				
			||||||
 | 
					        self.assertEqual("No connection with Server", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_response_error_code(self):
 | 
				
			||||||
 | 
					        exception = ResponseErrorCode('http://text/', 502, 'Service Unavailable')
 | 
				
			||||||
 | 
					        self.assertEqual("Request to http://text/ failed with code 502 and message: Service Unavailable", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_not_enough_space(self):
 | 
				
			||||||
 | 
					        exception = NotEnoughSpace()
 | 
				
			||||||
 | 
					        self.assertEqual("Not enough space on the server", exception.__str__())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    unittest.main()
 | 
				
			||||||
| 
						 | 
					@ -277,9 +277,9 @@ class Client(object):
 | 
				
			||||||
        :param remote_path: (optional) path to resource on WebDAV server. Defaults is root directory of WebDAV.
 | 
					        :param remote_path: (optional) path to resource on WebDAV server. Defaults is root directory of WebDAV.
 | 
				
			||||||
        :return: True if resource is exist or False otherwise
 | 
					        :return: True if resource is exist or False otherwise
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					 | 
				
			||||||
        if self.webdav.disable_check:
 | 
					        if self.webdav.disable_check:
 | 
				
			||||||
            return True
 | 
					            return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        urn = Urn(remote_path)
 | 
					        urn = Urn(remote_path)
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            response = self.execute_request(action='check', path=urn.quote())
 | 
					            response = self.execute_request(action='check', path=urn.quote())
 | 
				
			||||||
| 
						 | 
					@ -466,7 +466,7 @@ class Client(object):
 | 
				
			||||||
        self.mkdir(remote_path)
 | 
					        self.mkdir(remote_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for resource_name in listdir(local_path):
 | 
					        for resource_name in listdir(local_path):
 | 
				
			||||||
            _remote_path = "{parent}{name}".format(parent=urn.path(), name=resource_name)
 | 
					            _remote_path = "{parent}{name}".format(parent=urn.path(), name=resource_name).replace('\\', '')
 | 
				
			||||||
            _local_path = os.path.join(local_path, resource_name)
 | 
					            _local_path = os.path.join(local_path, resource_name)
 | 
				
			||||||
            self.upload(local_path=_local_path, remote_path=_remote_path, progress=progress)
 | 
					            self.upload(local_path=_local_path, remote_path=_remote_path, progress=progress)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -588,13 +588,16 @@ class Client(object):
 | 
				
			||||||
                 `modified`: date of resource modification.
 | 
					                 `modified`: date of resource modification.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        urn = Urn(remote_path)
 | 
					        urn = Urn(remote_path)
 | 
				
			||||||
        if not self.check(urn.path()) and not self.check(Urn(remote_path, directory=True).path()):
 | 
					        self._check_remote_resource(remote_path, urn)
 | 
				
			||||||
            raise RemoteResourceNotFound(remote_path)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        response = self.execute_request(action='info', path=urn.quote())
 | 
					        response = self.execute_request(action='info', path=urn.quote())
 | 
				
			||||||
        path = self.get_full_path(urn)
 | 
					        path = self.get_full_path(urn)
 | 
				
			||||||
        return WebDavXmlUtils.parse_info_response(content=response.content, path=path, hostname=self.webdav.hostname)
 | 
					        return WebDavXmlUtils.parse_info_response(content=response.content, path=path, hostname=self.webdav.hostname)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _check_remote_resource(self, remote_path, urn):
 | 
				
			||||||
 | 
					        if not self.check(urn.path()) and not self.check(Urn(remote_path, directory=True).path()):
 | 
				
			||||||
 | 
					            raise RemoteResourceNotFound(remote_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @wrap_connection_error
 | 
					    @wrap_connection_error
 | 
				
			||||||
    def is_dir(self, remote_path):
 | 
					    def is_dir(self, remote_path):
 | 
				
			||||||
        """Checks is the remote resource directory.
 | 
					        """Checks is the remote resource directory.
 | 
				
			||||||
| 
						 | 
					@ -605,8 +608,7 @@ class Client(object):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        urn = Urn(remote_path)
 | 
					        urn = Urn(remote_path)
 | 
				
			||||||
        parent_urn = Urn(urn.parent())
 | 
					        parent_urn = Urn(urn.parent())
 | 
				
			||||||
        if not self.check(urn.path()) and not self.check(Urn(remote_path, directory=True).path()):
 | 
					        self._check_remote_resource(remote_path, urn)
 | 
				
			||||||
            raise RemoteResourceNotFound(remote_path)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        response = self.execute_request(action='info', path=parent_urn.quote())
 | 
					        response = self.execute_request(action='info', path=parent_urn.quote())
 | 
				
			||||||
        path = self.get_full_path(urn)
 | 
					        path = self.get_full_path(urn)
 | 
				
			||||||
| 
						 | 
					@ -826,6 +828,9 @@ class Resource(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class WebDavXmlUtils:
 | 
					class WebDavXmlUtils:
 | 
				
			||||||
 | 
					    def __init__(self):
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def parse_get_list_response(content):
 | 
					    def parse_get_list_response(content):
 | 
				
			||||||
        """Parses of response content XML from WebDAV server and extract file and directory names.
 | 
					        """Parses of response content XML from WebDAV server and extract file and directory names.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,3 +68,4 @@ class WebDAVSettings(ConnectionSettings):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not self.token and not self.login:
 | 
					        if not self.token and not self.login:
 | 
				
			||||||
            raise OptionNotValid(name="login", value=self.login, ns=self.ns)
 | 
					            raise OptionNotValid(name="login", value=self.login, ns=self.ns)
 | 
				
			||||||
 | 
					        return True
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -71,7 +71,7 @@ class NoConnection(WebDavException):
 | 
				
			||||||
        self.hostname = hostname
 | 
					        self.hostname = hostname
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        return "Not connection with {hostname}".format(hostname=self.hostname)
 | 
					        return "No connection with {hostname}".format(hostname=self.hostname)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This exception left only for supporting original library interface.
 | 
					# This exception left only for supporting original library interface.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue