from pybuilder.core import Project from src.main.python.ddadevops.domain import Validateable, DnsRecord, C4kBuild, Devops from src.main.python.ddadevops.c4k_mixin import add_c4k_mixin_config class TestValidateable(Validateable): def __init__(self, value): self.field = value def validate(self): return self.__validate_is_not_empty__("field") def test_should_validate_non_empty_strings(): sut = TestValidateable("content") assert sut.is_valid() sut = TestValidateable(None) assert not sut.is_valid() sut = TestValidateable("") assert not sut.is_valid() def test_should_validate_non_empty_others(): sut = TestValidateable(1) assert sut.is_valid() sut = TestValidateable(1.0) assert sut.is_valid() sut = TestValidateable(True) assert sut.is_valid() sut = TestValidateable(None) assert not sut.is_valid() def test_validate_with_reason(): sut = TestValidateable(None) assert sut.validate()[0] == "Field 'field' may not be empty." def test_should_validate_DnsRecord(): sut = DnsRecord(None) assert not sut.is_valid() sut = DnsRecord('name') assert not sut.is_valid() sut = DnsRecord('name', ipv4='1.2.3.4') assert sut.is_valid() sut = DnsRecord('name', ipv6='1::') assert sut.is_valid() def test_c4k_build_should_update_fqdn(tmp_path): project = Project(str(tmp_path), name="name") project_config = { "stage": "test", "name": "name", "project_root_path": str(tmp_path), "module": "module", "build_dir_name": "target", } config = {"issuer": "staging"} auth = { "jvb-auth-password": "pw1", "jicofo-auth-password": "pw2", "jicofo-component-secret": "pw3", } add_c4k_mixin_config( project_config, config, auth, grafana_cloud_user="user", grafana_cloud_password="password", ) build = Devops(project_config) sut = C4kBuild(project_config) sut.update_runtime_config(DnsRecord("test.de", ipv6="1::")) assert { "issuer": "staging", "fqdn": "test.de", "mon-cfg": { "cluster-name": "module", "cluster-stage": "test", "grafana-cloud-url": "https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push", }, } == sut.config() assert { "jicofo-auth-password": "pw2", "jicofo-component-secret": "pw3", "jvb-auth-password": "pw1", "mon-auth": { "grafana-cloud-password": "password", "grafana-cloud-user": "user", }, } == sut.c4k_mixin_auth def test_c4k_build_should_calculate_command(tmp_path): project = Project(str(tmp_path), name="name") project_config = { "stage": "test", "name": "name", "project_root_path": "", "module": "module", "build_dir_name": "target", } add_c4k_mixin_config( project_config, {}, {}, grafana_cloud_user="user", grafana_cloud_password="password", ) build = Devops(project_config) sut = C4kBuild(project_config) assert ( "c4k-module-standalone.jar " + "/target/name/module/out_c4k_config.yaml " + "/target/name/module/out_c4k_auth.yaml > " + "/target/name/module/out_module.yaml" == sut.command(build) ) project_config = { "stage": "test", "name": "name", "project_root_path": "", "module": "module", "build_dir_name": "target", } add_c4k_mixin_config( project_config, {}, {}, executabel_name = "executabel_name", grafana_cloud_user="user", grafana_cloud_password="password", ) build = Devops(project_config) sut = C4kBuild(project_config) assert ( "c4k-executabel_name-standalone.jar " + "/target/name/module/out_c4k_config.yaml " + "/target/name/module/out_c4k_auth.yaml > " + "/target/name/module/out_module.yaml" == sut.command(build) )