# retoor <retoor@molodetz.nl>

import pytest

from devplacepy.services.jobs.isslop.acquisition.workspace import (
    safe_relative_path,
    slugify,
    workspace_for,
)


def test_workspace_for_stays_inside_root(tmp_path):
    workspace = workspace_for(tmp_path, "https://github.com/owner/repo", "abc123")
    assert workspace.parent == tmp_path.resolve()
    assert "github.com-owner-repo" in workspace.name
    assert workspace.name.endswith("abc123")


def test_workspace_for_rejects_escaping_uid(tmp_path):
    with pytest.raises(ValueError):
        workspace_for(tmp_path, "https://example.com", "../../../outside/x")


def test_safe_relative_path_rejects_traversal(tmp_path):
    resolved = safe_relative_path(tmp_path, "../../../etc/passwd")
    assert resolved.is_relative_to(tmp_path.resolve())


def test_safe_relative_path_keeps_nested_files(tmp_path):
    resolved = safe_relative_path(tmp_path, "assets/js/app.js")
    assert resolved == tmp_path.resolve() / "assets" / "js" / "app.js"


def test_slugify_strips_scheme_and_specials():
    assert slugify("https://Example.com/Owner/Repo.git") == "example.com-owner-repo.git"
    assert slugify("!!!") == "source"
