Skip to content

Commit 757b4b6

Browse files
authored
Merge pull request #73 from vre-hub/dev
fix: subdirectories in file browser
2 parents 7389619 + f19425c commit 757b4b6

File tree

2 files changed

+71
-1
lines changed

2 files changed

+71
-1
lines changed

reana_jupyterlab/handlers/files.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ async def get(self):
1414
entries = []
1515
for entry in os.listdir(path):
1616
entry_path = os.path.join(path, entry)
17-
if not entry.startswith('.') and (os.path.isdir(entry) or entry.endswith('.yaml')):
17+
if not entry.startswith('.') and (os.path.isdir(entry_path) or entry.endswith('.yaml')):
1818
rel_entry_path = os.path.join(relative_path, entry)
1919
entries.append({
2020
"name": entry,
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import json
2+
import pytest
3+
from pathlib import Path
4+
import shutil
5+
6+
ENDPOINT = '/reana_jupyterlab/files'
7+
8+
@pytest.fixture
9+
def filespace():
10+
"""
11+
test_workspace/
12+
folder1/
13+
file1.txt
14+
folder2/
15+
file2.csv
16+
file3.yaml
17+
folder3/
18+
file4.java
19+
file5.py
20+
file6.yaml
21+
"""
22+
23+
base_path = Path("./pytest_workspace").resolve()
24+
25+
if base_path.exists():
26+
shutil.rmtree(base_path)
27+
28+
folder3 = base_path / "folder1" / "folder2" / "folder3"
29+
folder3.mkdir(parents=True)
30+
31+
# files
32+
(base_path / "file4.java").touch()
33+
(base_path / "file5.py").touch()
34+
(base_path / "file6.yaml").touch()
35+
(base_path / "folder1" / "file1.txt").touch()
36+
(base_path / "folder1" / "folder2" / "file2.csv").touch()
37+
(base_path / "folder1" / "folder2" / "file3.yaml").touch()
38+
39+
yield base_path
40+
41+
shutil.rmtree(base_path)
42+
43+
@pytest.mark.parametrize('path, expected', [
44+
('pytest_workspace', set([('folder1', 'directory', 'pytest_workspace/folder1'), ('file6.yaml', 'file', 'pytest_workspace/file6.yaml')])),
45+
('pytest_workspace/folder1', set([('folder2', 'directory', 'pytest_workspace/folder1/folder2')])),
46+
('pytest_workspace/folder1/folder2', set([('file3.yaml', 'file', 'pytest_workspace/folder1/folder2/file3.yaml'), ('folder3', 'directory', 'pytest_workspace/folder1/folder2/folder3')])),
47+
('pytest_workspace/folder1/folder2/folder3', set()),
48+
('pytest_workspace/folder4', set()),
49+
('pytest_workspace/file4.java', set()),
50+
('pytest_workspace/folder1/../file6.yaml', set())
51+
])
52+
async def test_get_files(jp_fetch, path, expected, filespace):
53+
try:
54+
response = await jp_fetch(ENDPOINT, params={'path': path})
55+
assert response.code == 200
56+
57+
data = json.loads(response.body)
58+
59+
assert 'entries' in data
60+
entries = data['entries']
61+
62+
assert isinstance(entries, list)
63+
64+
received = set((entry['name'], entry['type'], entry['path']) for entry in entries)
65+
assert received == expected
66+
67+
68+
except Exception as e:
69+
print(e)
70+
assert e.code == 404

0 commit comments

Comments
 (0)