diff --git a/swh/scanner/tests/conftest.py b/swh/scanner/tests/conftest.py index 3457704..de9c89a 100644 --- a/swh/scanner/tests/conftest.py +++ b/swh/scanner/tests/conftest.py @@ -1,88 +1,90 @@ # Copyright (C) 2020 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import pytest import asyncio import aiohttp import os from pathlib import PosixPath from aioresponses import aioresponses # type: ignore from swh.model.cli import pid_of_file, pid_of_dir from .flask_api import create_app @pytest.fixture def mock_aioresponse(): with aioresponses() as m: yield m @pytest.fixture def event_loop(): """Fixture that generate an asyncio event loop.""" loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) yield loop loop.close() @pytest.fixture async def aiosession(): """Fixture that generate an aiohttp Client Session.""" session = aiohttp.ClientSession() yield session session.detach() @pytest.fixture(scope='session') def temp_folder(tmp_path_factory): - """Fixture that generate a temporary folder with the following + """Fixture that generates a temporary folder with the following structure: - root: { - subdir: { - filesample.txt + .. code-block:: python + + root = { + subdir: { + filesample.txt + } + subdir2 + subfile.txt } - subdir2 - subfile.txt - } """ root = tmp_path_factory.getbasetemp() subdir = tmp_path_factory.mktemp('subdir') subdir2 = tmp_path_factory.mktemp('subdir2') - subfile = root.joinpath(PosixPath('./subfile.txt')) + subfile = root / 'subfile.txt' subfile.touch() - filesample = subdir.joinpath(PosixPath('./filesample.txt')) + filesample = subdir / 'filesample.txt' filesample.touch() avail_path = { subdir: pid_of_dir(bytes(subdir)), subdir2: pid_of_dir(bytes(subdir2)), subfile: pid_of_file(bytes(subfile)), filesample: pid_of_file(bytes(filesample)) } return { 'root': root, 'paths': avail_path, 'filesample': filesample } @pytest.fixture(scope='session') def app(): """Flask backend API (used by live_server).""" app = create_app() return app @pytest.fixture def test_folder(): """Location of the "data" folder """ tests_path = PosixPath(os.path.abspath(__file__)).parent tests_data_folder = tests_path.joinpath('data') assert tests_data_folder.exists() return tests_data_folder diff --git a/swh/scanner/tests/test_model.py b/swh/scanner/tests/test_model.py index 45208eb..5e4eee2 100644 --- a/swh/scanner/tests/test_model.py +++ b/swh/scanner/tests/test_model.py @@ -1,4 +1,67 @@ # Copyright (C) 2020 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information + +import pytest + +from swh.scanner.model import Tree + + +@pytest.fixture(scope='function') +def example_tree(temp_folder): + """Fixture that generate a Tree with the root present in the + session fixture "temp_folder". + """ + example_tree = Tree(temp_folder['root']) + assert example_tree.path == temp_folder['root'] + + return example_tree + + +def test_tree_add_node(example_tree, temp_folder): + avail_paths = temp_folder['paths'].keys() + + for path, pid in temp_folder['paths'].items(): + example_tree.addNode(path, pid) + + for path, node in example_tree.children.items(): + assert path in avail_paths + if node.children: + for subpath, subnode in node.children.items(): + assert subpath in avail_paths + + +def test_get_json_tree_all_not_present(example_tree, temp_folder): + for path, pid in temp_folder['paths'].items(): + example_tree.addNode(path) + + json_tree = example_tree.getJsonTree() + + assert len(json_tree) == 0 + + +def test_get_json_tree_all_present(example_tree, temp_folder): + for path, pid in temp_folder['paths'].items(): + example_tree.addNode(path, pid) + + tree_dict = example_tree.getJsonTree() + + assert len(tree_dict) == 3 + # since subdir have a pid, it can't have a children path + assert tree_dict['subdir0'] is not dict + + +def test_get_json_tree_only_one_present(example_tree, temp_folder): + filesample_path = temp_folder['filesample'] + + for path, pid in temp_folder['paths'].items(): + if path == filesample_path: + example_tree.addNode(path, pid) + else: + example_tree.addNode(path) + + tree_dict = example_tree.getJsonTree() + + assert len(tree_dict) == 1 + assert tree_dict['subdir0']['filesample.txt']