File: test_project.py

package info (click to toggle)
pontos 25.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,744 kB
  • sloc: python: 44,602; makefile: 21; sh: 10; xml: 3
file content (147 lines) | stat: -rw-r--r-- 5,565 bytes parent folder | download | duplicates (2)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# Copyright (C) 2023 Greenbone AG
#
# SPDX-License-Identifier: GPL-3.0-or-later
#

import unittest

from pontos.testing import temp_directory, temp_python_module
from pontos.version.project import Project, ProjectError
from pontos.version.schemes import PEP440VersioningScheme


class ProjectTestCase(unittest.TestCase):
    def test_no_project_found(self):
        with (
            temp_directory(change_into=True),
            self.assertRaisesRegex(
                ProjectError, "No project settings file found"
            ),
        ):
            Project(PEP440VersioningScheme)

    def test_python_project(self):
        current_version = PEP440VersioningScheme.parse_version("1.2.3")
        new_version = PEP440VersioningScheme.parse_version("1.2.4")

        content = f"__version__ = '{current_version}'"
        with temp_python_module(
            content, name="foo", change_into=True
        ) as temp_module:
            pyproject_toml = temp_module.parent / "pyproject.toml"
            pyproject_toml.write_text(
                f'[tool.poetry]\nversion = "{current_version}"\n'
                '[tool.pontos.version]\nversion-module-file = "foo.py"',
                encoding="utf8",
            )

            project = Project(PEP440VersioningScheme)
            self.assertEqual(project.get_current_version(), current_version)

            update = project.update_version(new_version)

            self.assertEqual(update.previous, current_version)
            self.assertEqual(update.new, new_version)

            self.assertEqual(len(update.changed_files), 2)

    def test_go_project(self):
        current_version = PEP440VersioningScheme.parse_version("1.2.3")
        new_version = PEP440VersioningScheme.parse_version("1.2.4")

        with temp_directory(change_into=True) as temp_dir:
            project_file = temp_dir / "go.mod"
            project_file.touch()
            version_file = temp_dir / "version.go"
            version_file.write_text(f'var version = "{current_version}"')

            project = Project(PEP440VersioningScheme)
            self.assertEqual(project.get_current_version(), current_version)

            update = project.update_version(new_version)

            self.assertEqual(update.previous, current_version)
            self.assertEqual(update.new, new_version)

            self.assertEqual(len(update.changed_files), 1)

    def test_javascript_project(self):
        current_version = PEP440VersioningScheme.parse_version("1.2.3")
        new_version = PEP440VersioningScheme.parse_version("1.2.4")

        with temp_directory(change_into=True) as temp_dir:
            version_file = temp_dir / "package.json"
            version_file.write_text(
                f'{{"name": "foo", "version": "{current_version}"}}',
                encoding="utf8",
            )

            project = Project(PEP440VersioningScheme)
            self.assertEqual(project.get_current_version(), current_version)

            update = project.update_version(new_version)

            self.assertEqual(update.previous, current_version)
            self.assertEqual(update.new, new_version)

            self.assertEqual(len(update.changed_files), 1)

    def test_cmake_project_version(self):
        current_version = PEP440VersioningScheme.parse_version("1.2.3")
        new_version = PEP440VersioningScheme.parse_version("1.2.4")

        with temp_directory(change_into=True) as temp_dir:
            version_file = temp_dir / "CMakeLists.txt"
            version_file.write_text("project(VERSION 1.2.3)", encoding="utf8")

            project = Project(PEP440VersioningScheme)
            self.assertEqual(project.get_current_version(), current_version)

            update = project.update_version(new_version)

            self.assertEqual(update.previous, current_version)
            self.assertEqual(update.new, new_version)

            self.assertEqual(len(update.changed_files), 1)

    def test_all(self):
        current_version = PEP440VersioningScheme.parse_version("1.2.3")
        new_version = PEP440VersioningScheme.parse_version("1.2.4")

        content = f"__version__ = '{current_version}'"
        with temp_python_module(
            content, name="foo", change_into=True
        ) as temp_module:
            temp_dir = temp_module.parent
            pyproject_toml = temp_dir / "pyproject.toml"
            pyproject_toml.write_text(
                f'[tool.poetry]\nversion = "{current_version}"\n'
                '[tool.pontos.version]\nversion-module-file = "foo.py"',
                encoding="utf8",
            )

            go_mod_file = temp_dir / "go.mod"
            go_mod_file.touch()
            go_version_file = temp_dir / "version.go"
            go_version_file.write_text(f'var version = "{current_version}"')

            package_json = temp_dir / "package.json"
            package_json.write_text(
                f'{{"name": "foo", "version": "{current_version}"}}',
                encoding="utf8",
            )

            cmake_lists_txt = temp_dir / "CMakeLists.txt"
            cmake_lists_txt.write_text(
                "project(VERSION 1.2.3)", encoding="utf8"
            )

            project = Project(PEP440VersioningScheme)
            self.assertEqual(project.get_current_version(), current_version)

            update = project.update_version(new_version)

            self.assertEqual(update.previous, current_version)
            self.assertEqual(update.new, new_version)

            self.assertEqual(len(update.changed_files), 5)