mirror of
https://github.com/YunoHost/moulinette.git
synced 2024-09-03 20:06:31 +02:00
Testing utils.filesystem.mkdir
- creating single folder - creating folder with parent - creating folder with specific owner - no permission prevent creating folder Update filesyste.mkdir to not raise FileExistsError when force=True is used as parameter.
This commit is contained in:
parent
f9c041f02b
commit
47b6a8c0cb
2 changed files with 85 additions and 3 deletions
|
@ -202,7 +202,11 @@ def mkdir(path, mode=0o777, parents=False, uid=None, gid=None, force=False):
|
||||||
return
|
return
|
||||||
|
|
||||||
# Create directory and set permissions
|
# Create directory and set permissions
|
||||||
|
try:
|
||||||
os.mkdir(path, mode)
|
os.mkdir(path, mode)
|
||||||
|
except FileExistsError as e:
|
||||||
|
if not force:
|
||||||
|
raise
|
||||||
if uid is not None or gid is not None:
|
if uid is not None or gid is not None:
|
||||||
chown(path, uid, gid)
|
chown(path, uid, gid)
|
||||||
|
|
||||||
|
|
|
@ -562,8 +562,7 @@ def test_chown_cannot_change_owner_of_non_existant_file(chown):
|
||||||
@mock.patch('os.chown')
|
@mock.patch('os.chown')
|
||||||
def test_chown_recursive_update_folder_owner(chown, isdir, walk):
|
def test_chown_recursive_update_folder_owner(chown, isdir, walk):
|
||||||
foldername = 'folder'
|
foldername = 'folder'
|
||||||
uid = 1000
|
uid = gid = 1000
|
||||||
gid = 1000
|
|
||||||
isdir.return_value = True # foldername is a folder
|
isdir.return_value = True # foldername is a folder
|
||||||
walk.return_value = [(foldername, ['subfolder'], ['file.txt'])]
|
walk.return_value = [(foldername, ['subfolder'], ['file.txt'])]
|
||||||
|
|
||||||
|
@ -575,4 +574,83 @@ def test_chown_recursive_update_folder_owner(chown, isdir, walk):
|
||||||
chown.assert_has_calls(calls)
|
chown.assert_has_calls(calls)
|
||||||
|
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Testing creation of folder
|
||||||
|
########################################################################
|
||||||
|
|
||||||
|
@mock.patch('os.path.exists')
|
||||||
|
def test_mkdir_cannot_create_folder_if_it_exist(exists):
|
||||||
|
folder = 'folder'
|
||||||
|
exists.return_value = True
|
||||||
|
|
||||||
|
with pytest.raises(OSError):
|
||||||
|
filesystem.mkdir(folder)
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch('os.path.exists')
|
||||||
|
@mock.patch('os.mkdir')
|
||||||
|
def test_mkdir_create_folder_if_does_not_exist(mkdir, exists):
|
||||||
|
foldername = 'folder'
|
||||||
|
exists.return_value = False
|
||||||
|
|
||||||
|
filesystem.mkdir(foldername)
|
||||||
|
|
||||||
|
mkdir.assert_called_with(foldername, 0o777)
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch('os.path.exists')
|
||||||
|
@mock.patch('os.mkdir')
|
||||||
|
@mock.patch('moulinette.utils.filesystem.chown')
|
||||||
|
def test_mkdir_create_folder_for_owner_if_provided(chown, mkdir, exists):
|
||||||
|
foldername = 'folder'
|
||||||
|
uid = gid = 1000
|
||||||
|
exists.return_value = False
|
||||||
|
|
||||||
|
filesystem.mkdir(foldername, uid=uid, gid=gid)
|
||||||
|
|
||||||
|
mkdir.assert_called_with(foldername, 0o777)
|
||||||
|
chown.assert_called_with(foldername, uid, gid)
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch('os.path.exists')
|
||||||
|
@mock.patch('os.mkdir')
|
||||||
|
@mock.patch('os.chown')
|
||||||
|
def test_mkdir_update_folder_if_it_exists(chown, mkdir, exists):
|
||||||
|
foldername = 'folder'
|
||||||
|
uid = gid = 1000
|
||||||
|
exists.return_value = True
|
||||||
|
mkdir.side_effect = FileExistsError
|
||||||
|
|
||||||
|
filesystem.mkdir(foldername, uid=uid, gid=gid, force=True)
|
||||||
|
|
||||||
|
chown.assert_called_with(foldername, uid, gid)
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch('os.path.exists')
|
||||||
|
@mock.patch('os.path.split')
|
||||||
|
@mock.patch('os.mkdir')
|
||||||
|
def test_mkdir_create_folder_with_parents_if_necessary(mkdir, split, exists):
|
||||||
|
foldername = 'parent/folder'
|
||||||
|
exists.side_effect = [False, False, False, False] # folder and parent do not exist
|
||||||
|
split.side_effect = [('parent', 'folder'), ('', 'parent')]
|
||||||
|
|
||||||
|
filesystem.mkdir(foldername, parents=True)
|
||||||
|
|
||||||
|
calls = [mock.call('parent', 0o777),
|
||||||
|
mock.call('parent/folder', 0o777)]
|
||||||
|
mkdir.assert_has_calls(calls)
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch('os.path.exists')
|
||||||
|
@mock.patch('os.path.split')
|
||||||
|
@mock.patch('os.mkdir')
|
||||||
|
def test_mkdir_cannot_create_folder_with_parents_if_no_permission(mkdir, split, exists):
|
||||||
|
foldername = 'parent/folder'
|
||||||
|
mkdir.side_effect = PermissionError
|
||||||
|
exists.side_effect = [False, False, False, False] # folder and parent do not exist
|
||||||
|
split.side_effect = [('parent', 'folder'), ('', 'parent')]
|
||||||
|
|
||||||
|
with pytest.raises(PermissionError):
|
||||||
|
filesystem.mkdir(foldername, parents=True)
|
||||||
|
|
||||||
# eof
|
# eof
|
||||||
|
|
Loading…
Add table
Reference in a new issue