File: test_template.py

package info (click to toggle)
pdm 2.20.1%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 2,988 kB
  • sloc: python: 24,413; javascript: 34; makefile: 11
file content (64 lines) | stat: -rw-r--r-- 2,870 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import os

import pytest

from pdm.cli.templates import ProjectTemplate
from pdm.exceptions import PdmException


def test_non_pyproject_template_disallowed(project_no_init):
    with ProjectTemplate("tests/fixtures/projects/demo_extras") as template:
        with pytest.raises(PdmException, match="Template pyproject.toml not found"):
            template.generate(project_no_init.root, {"project": {"name": "foo"}})


def test_module_project_template(project_no_init):
    metadata = {
        "project": {"name": "foo", "version": "0.1.0", "requires-python": ">=3.10"},
        "build-system": {"requires": ["pdm-backend"], "build-backend": "pdm.backend"},
    }

    with ProjectTemplate("tests/fixtures/projects/demo") as template:
        template.generate(project_no_init.root, metadata)

    project_no_init.pyproject.reload()
    assert project_no_init.pyproject.metadata["name"] == "foo"
    assert project_no_init.pyproject.metadata["requires-python"] == ">=3.10"
    assert project_no_init.pyproject._data["build-system"] == metadata["build-system"]
    assert project_no_init.pyproject.metadata["dependencies"] == ["idna", "chardet; os_name=='nt'"]
    assert project_no_init.pyproject.metadata["optional-dependencies"]["tests"] == ["pytest"]
    assert (project_no_init.root / "foo.py").exists()
    assert os.access(project_no_init.root / "foo.py", os.W_OK)


def test_module_project_template_generate_application(project_no_init):
    metadata = {
        "project": {"name": "", "version": "", "requires-python": ">=3.10"},
    }

    with ProjectTemplate("tests/fixtures/projects/demo") as template:
        template.generate(project_no_init.root, metadata)

    project_no_init.pyproject.reload()
    assert project_no_init.pyproject.metadata["name"] == ""
    assert "build-system" not in project_no_init.pyproject._data
    assert project_no_init.pyproject.metadata["dependencies"] == ["idna", "chardet; os_name=='nt'"]
    assert (project_no_init.root / "demo.py").exists()


def test_package_project_template(project_no_init):
    metadata = {
        "project": {"name": "foo", "version": "0.1.0", "requires-python": ">=3.10"},
        "build-system": {"requires": ["pdm-backend"], "build-backend": "pdm.backend"},
    }

    with ProjectTemplate("tests/fixtures/projects/demo-package") as template:
        template.generate(project_no_init.root, metadata)

    project_no_init.pyproject.reload()
    assert project_no_init.pyproject.metadata["name"] == "foo"
    assert project_no_init.pyproject.metadata["requires-python"] == ">=3.10"
    assert project_no_init.pyproject._data["build-system"] == metadata["build-system"]
    assert (project_no_init.root / "foo").is_dir()
    assert (project_no_init.root / "foo/__init__.py").exists()
    assert project_no_init.pyproject.settings["version"] == {"path": "foo/__init__.py", "source": "file"}