|
3 | 3 | import os |
4 | 4 | from pathlib import Path |
5 | 5 | from textwrap import dedent |
6 | | -from typing import TYPE_CHECKING, Iterator |
| 6 | +from typing import TYPE_CHECKING, Iterator, Optional |
7 | 7 |
|
8 | 8 | import pytest |
9 | 9 |
|
|
16 | 16 | NpmProvider, |
17 | 17 | Pep621Provider, |
18 | 18 | PoetryProvider, |
| 19 | + ScmProvider, |
19 | 20 | get_provider, |
20 | 21 | ) |
| 22 | +from tests.utils import create_file_and_commit, create_tag |
21 | 23 |
|
22 | 24 | if TYPE_CHECKING: |
23 | 25 | from pytest_mock import MockerFixture |
@@ -185,3 +187,62 @@ def test_composer_provider(config: BaseConfig, chdir: Path): |
185 | 187 | } |
186 | 188 | """ |
187 | 189 | ) |
| 190 | + |
| 191 | + |
| 192 | +@pytest.mark.parametrize( |
| 193 | + "tag_format,tag,version", |
| 194 | + ( |
| 195 | + (None, "0.1.0", "0.1.0"), |
| 196 | + (None, "v0.1.0", "0.1.0"), |
| 197 | + ("v$version", "v0.1.0", "0.1.0"), |
| 198 | + ("version-$version", "version-0.1.0", "0.1.0"), |
| 199 | + ("version-$version", "version-0.1", "0.1"), |
| 200 | + ("version-$version", "version-0.1.0rc1", "0.1.0rc1"), |
| 201 | + ("v$minor.$major.$patch", "v1.0.0", "0.1.0"), |
| 202 | + ("version-$major.$minor.$patch", "version-0.1.0", "0.1.0"), |
| 203 | + ("v$major.$minor$prerelease$devrelease", "v1.0rc1", "1.0rc1"), |
| 204 | + ("v$major.$minor.$patch$prerelease$devrelease", "v0.1.0", "0.1.0"), |
| 205 | + ("v$major.$minor.$patch$prerelease$devrelease", "v0.1.0rc1", "0.1.0rc1"), |
| 206 | + ("v$major.$minor.$patch$prerelease$devrelease", "v1.0.0.dev0", "1.0.0.dev0"), |
| 207 | + ), |
| 208 | +) |
| 209 | +@pytest.mark.usefixtures("tmp_git_project") |
| 210 | +def test_scm_provider( |
| 211 | + config: BaseConfig, tag_format: Optional[str], tag: str, version: str |
| 212 | +): |
| 213 | + create_file_and_commit("test: fake commit") |
| 214 | + create_tag(tag) |
| 215 | + create_file_and_commit("test: fake commit") |
| 216 | + create_tag("should-not-match") |
| 217 | + |
| 218 | + config.settings["version_provider"] = "scm" |
| 219 | + config.settings["tag_format"] = tag_format |
| 220 | + |
| 221 | + provider = get_provider(config) |
| 222 | + assert isinstance(provider, ScmProvider) |
| 223 | + assert provider.get_version() == version |
| 224 | + |
| 225 | + # Should not fail on set_version() |
| 226 | + provider.set_version("43.1") |
| 227 | + |
| 228 | + |
| 229 | +@pytest.mark.usefixtures("tmp_git_project") |
| 230 | +def test_scm_provider_default_without_matching_tag(config: BaseConfig): |
| 231 | + create_file_and_commit("test: fake commit") |
| 232 | + create_tag("should-not-match") |
| 233 | + create_file_and_commit("test: fake commit") |
| 234 | + |
| 235 | + config.settings["version_provider"] = "scm" |
| 236 | + |
| 237 | + provider = get_provider(config) |
| 238 | + assert isinstance(provider, ScmProvider) |
| 239 | + assert provider.get_version() == "0.0.0" |
| 240 | + |
| 241 | + |
| 242 | +@pytest.mark.usefixtures("tmp_git_project") |
| 243 | +def test_scm_provider_default_without_commits_and_tags(config: BaseConfig): |
| 244 | + config.settings["version_provider"] = "scm" |
| 245 | + |
| 246 | + provider = get_provider(config) |
| 247 | + assert isinstance(provider, ScmProvider) |
| 248 | + assert provider.get_version() == "0.0.0" |
0 commit comments