"""Test list"""

import os

import pytest


@pytest.mark.parametrize(
    "location",
    [
        "work",
        "outside",
        "subdir",
    ],
)
@pytest.mark.usefixtures("ds1_copy")
def test_list(runner, yadm_cmd, paths, ds1, location):
    """List tests"""
    if location == "work":
        run_dir = paths.work
    elif location == "outside":
        run_dir = paths.work.join("..")
    else:
        assert location == "subdir"
        # first directory with tracked data
        run_dir = paths.work.join(ds1.tracked_dirs[0])
    with run_dir.as_cwd():
        # test with '-a'
        # should get all tracked files, relative to the work path
        run = runner(command=yadm_cmd("list", "-a"))
        assert run.success
        assert run.err == ""
        returned_files = set(run.out.splitlines())
        expected_files = {e.path for e in ds1 if e.tracked}
        assert returned_files == expected_files
        # test without '-a'
        # should get all tracked files, relative to the work path unless in a
        # subdir, then those should be a limited set of files, relative to the
        # subdir
        run = runner(command=yadm_cmd("list"))
        assert run.success
        assert run.err == ""
        returned_files = set(run.out.splitlines())
        if location == "subdir":
            basepath = os.path.basename(os.getcwd())
            # only expect files within the subdir
            # names should be relative to subdir
            index = len(basepath) + 1
            expected_files = {e.path[index:] for e in ds1 if e.tracked and e.path.startswith(basepath)}
        assert returned_files == expected_files