OpenMiInk/third_party/ci-notary-service/tests/test_projects.py
Hellings b8c8ff98e2 Hi
2026-10-16 09:05:56 -04:00

207 lines
7.8 KiB
Python

# SPDX-License-Identifier: BSD-2-Clause
# SPDX-FileCopyrightText: 2023 KDE e.V.
# SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
import pytest
from sftpnotary import projects
class TestProjects:
def test_load_branch_settings(self):
settings = """
namespace/project:
branches:
branchname:
keyA: valueA
keyB: valueB
"""
projects.readProjectSettings(settings)
assert projects.settings is not None
assert "namespace/project" in projects.settings._projects
p = projects.settings._projects["namespace/project"]
assert "branchname" in p
b = p["branchname"]
assert len(b) == 2
assert b.get("keyA") == "valueA"
assert b.get("keyB") == "valueB"
def test_load_project_and_branch_settings(self):
settings = """
namespace/project:
keyA: valueAP
keyC: valueC
branches:
branchA:
keyA: valueA
keyB: valueB
branchB:
"""
projects.readProjectSettings(settings)
assert projects.settings is not None
assert "namespace/project" in projects.settings._projects
p = projects.settings._projects["namespace/project"]
assert len(p) == 2
branchA = p["branchA"]
assert len(branchA) == 3
assert branchA.get("keyA") == "valueA"
assert branchA.get("keyB") == "valueB"
assert branchA.get("keyC") == "valueC"
branchB = p["branchB"]
assert len(branchB) == 2
assert branchB.get("keyA") == "valueAP"
assert branchB.get("keyC") == "valueC"
def test_load_default_settings(self):
settings = """
defaults:
keyA: defaultA
keyC: defaultC
branches:
- branchname
namespace/project:
"""
projects.readProjectSettings(settings)
assert projects.settings is not None
assert "namespace/project" in projects.settings._projects
p = projects.settings._projects["namespace/project"]
assert "branchname" in p
b = p["branchname"]
assert len(b) == 2
assert b.get("keyA") == "defaultA"
assert b.get("keyC") == "defaultC"
def test_load_settings(self):
settings = """
defaults:
keyA: defaultA
keyC: defaultC
keyD: defaultD
branches:
- defaultBranch
namespace/project:
keyA: projectA
keyB: projectB
branches:
branchA:
keyA: valueA
defaultBranch:
keyC: valueC
"""
projects.readProjectSettings(settings)
assert projects.settings is not None
assert "namespace/project" in projects.settings._projects
p = projects.settings._projects["namespace/project"]
assert len(p) == 2
assert "branchA" in p
branchA = p["branchA"]
assert len(branchA) == 4
assert branchA.get("keyA") == "valueA"
assert branchA.get("keyB") == "projectB"
assert branchA.get("keyC") == "defaultC"
assert branchA.get("keyD") == "defaultD"
assert "defaultBranch" in p
defaultBranch = p["defaultBranch"]
assert len(defaultBranch) == 4
assert defaultBranch.get("keyA") == "projectA"
assert defaultBranch.get("keyB") == "projectB"
assert defaultBranch.get("keyC") == "valueC"
assert defaultBranch.get("keyD") == "defaultD"
def test_branches_looking_like_int_float_bool_etc(self):
settings = """
namespace/projectA:
branches:
42:
2.0:
true:
"""
projects.readProjectSettings(settings)
assert projects.settings is not None
assert "namespace/projectA" in projects.settings._projects
p = projects.settings._projects["namespace/projectA"]
assert len(p) == 3
assert "42" in p
assert "2.0" in p
assert "true" in p
def test_exists(self):
settings = """
defaults:
branches:
- defaultBranch
namespace/project:
branches:
branchA:
"""
projects.readProjectSettings(settings)
assert projects.settings.exists("namespace/project")
assert not projects.settings.exists("namespace/other-project")
assert projects.settings.exists("namespace/project", "branchA")
assert projects.settings.exists("namespace/project", "defaultBranch")
assert not projects.settings.exists("namespace/project", "otherBranch")
def test_get(self):
settings = """
defaults:
keyA: defaultA
keyC: defaultC
branches:
- defaultBranch
namespace/project:
keyA: projectA
keyB: projectB
branches:
branchA:
keyA: valueA
"""
projects.readProjectSettings(settings)
assert projects.settings.get("namespace/project", "branchA", "keyA") == "valueA"
assert projects.settings.get("namespace/project", "branchA", "keyB") == "projectB"
assert projects.settings.get("namespace/project", "branchA", "keyC") == "defaultC"
assert projects.settings.get("namespace/project", "defaultBranch", "keyA") == "projectA"
assert projects.settings.get("namespace/project", "defaultBranch", "keyB") == "projectB"
assert projects.settings.get("namespace/project", "defaultBranch", "keyC") == "defaultC"
with pytest.raises(projects.Error, match=r"Unknown project .*"):
projects.settings.get("namespace/other-project", "defaultBranch", "keyA")
with pytest.raises(projects.Error, match=r"Unknown branch .*"):
projects.settings.get("namespace/project", "otherBranch", "keyA")
assert projects.settings.get("namespace/project", "branchA", "unknownKey") is None
assert projects.settings.get("namespace/project", "branchA", "unknownKey", ["foo"]) == ["foo"]
def test_getBool(self):
settings = """
namespace/project:
branches:
branchA:
boolTrue: tRuE
bool1: 1
boolYes: YeS
boolOn: oN
boolFalse: fAlsE
bool0: 0
boolNo: nO
boolOff: oFF
boolInvalid: invalid
"""
projects.readProjectSettings(settings)
assert projects.settings.getBool("namespace/project", "branchA", "boolTrue", False) is True
assert projects.settings.getBool("namespace/project", "branchA", "bool1", False) is True
assert projects.settings.getBool("namespace/project", "branchA", "boolYes", False) is True
assert projects.settings.getBool("namespace/project", "branchA", "boolOn", False) is True
assert projects.settings.getBool("namespace/project", "branchA", "boolFalse", True) is False
assert projects.settings.getBool("namespace/project", "branchA", "bool0", True) is False
assert projects.settings.getBool("namespace/project", "branchA", "boolNo", True) is False
assert projects.settings.getBool("namespace/project", "branchA", "boolOff", True) is False
assert projects.settings.getBool("namespace/project", "branchA", "boolNoSet", True) is True
assert projects.settings.getBool("namespace/project", "branchA", "boolNoSet", False) is False
with pytest.raises(ValueError, match=r"Not a boolean: .*"):
projects.settings.getBool("namespace/project", "branchA", "boolInvalid", True)