def test_bad_created(): """from_data raises if input data has created of wrong type""" with pytest.raises(InvalidDataException): Repository.from_data({ "id": "some-repo", "notes": { "created": "whoops" } })
def test_bad_created(caplog): """from_data logs and raises if input data has created of wrong type""" with pytest.raises(InvalidDataException): Repository.from_data({"id": "some-repo", "notes": {"created": "whoops"}}) # It should have logged about the bad data. We don't verify details # of the failure message since it relies too heavily on implementation # details (e.g. stringification of class) assert "An error occurred while loading Pulp data!" in caplog.text
def test_attr_created(): """from_data sets created attribute appropriately""" repo = Repository.from_data( {"id": "some-repo", "notes": {"created": "2019-06-11T12:10:00Z"}} ) expected = datetime.datetime(2019, 6, 11, 12, 10, 0, tzinfo=None) assert repo.created == expected
def test_from_data_gives_yum_repository(): """Repository.from_data maps to YumRepository subclass when needed""" repo = Repository.from_data({ "id": "my-repo", "notes": { "_repo-type": "rpm-repo" } }) assert isinstance(repo, YumRepository)
def test_is_temporary(): """from_data is_temporary is True if expected note is present""" repo = Repository.from_data({ "id": "some-repo", "notes": { "pub_temp_repo": True } }) assert repo.is_temporary
def test_from_data_gives_container_image_repository(): """Repository.from_data routes to ContainerImageRepository subclass when needed""" repo = Repository.from_data({ "id": "my-repo", "notes": { "_repo-type": "docker-repo" } }) assert isinstance(repo, ContainerImageRepository)
def test_distributors_last_publish_null(): """from_data accepts a null last_publish""" repo = Repository.from_data( { "id": "some-repo", "distributors": [ {"id": "dist1", "distributor_type_id": "type1", "last_publish": None} ], } ) assert repo.distributor("dist1").last_publish is None
def test_populate_attrs(): """test populate attributes are correctly parsed from repo notes""" repo = Repository.from_data({ "id": "my-repo", "notes": { "_repo-type": "rpm-repo", "population_sources": ["populate_repo1", "populate_repo2"], "ubi_population": True, }, "distributors": [], }) assert repo.population_sources == ["populate_repo1", "populate_repo2"] assert repo.ubi_population
def test_distributors_last_publish(): """from_data sets distributor last publish attribute appropriately""" repo = Repository.from_data({ "id": "some-repo", "distributors": [{ "id": "dist1", "distributor_type_id": "type1", "last_publish": "2019-06-17T01:23:45Z", }], }) assert repo.distributor("dist1").last_publish == datetime.datetime( 2019, 6, 17, 1, 23, 45)
def test_product_versions_unusual_attrs(): """Odd values in product_versions are tolerated.""" repo = Repository.from_data( { "id": "my-repo", "notes": { "_repo-type": "rpm-repo", "product_versions": '["1.4", 234, "1.100", "not numeric"]', }, "distributors": [], } ) assert repo.product_versions == ["1.100", "1.4", "234", "not numeric"]
def test_default_registry_id_from_distributor(config): """default registry_id is used when it's not set in distributor or set to null/empty string""" repo = Repository.from_data({ "id": "my-repo", "notes": { "_repo-type": "docker-repo" }, "distributors": [{ "id": "docker_web_distributor_name_cli", "distributor_type_id": "docker_distributor_web", "config": config, }], }) assert repo.registry_id == "my-repo"
def test_distributors_created(): """from_data sets distributors attribute appropriately""" repo = Repository.from_data( { "id": "some-repo", "distributors": [ {"id": "dist1", "distributor_type_id": "type1"}, {"id": "dist2", "distributor_type_id": "type1"}, ], } ) assert repo.distributors == ( Distributor(id="dist1", type_id="type1"), Distributor(id="dist2", type_id="type1"), )
def test_from_data_skip_rsync_repodata(): """skip_rsync_repodata is initialized from distributors when possible""" repo = Repository.from_data( { "id": "my-repo", "notes": {"_repo-type": "rpm-repo"}, "distributors": [ { "id": "cdn_distributor", "distributor_type_id": "rpm_rsync_distributor", "config": {"skip_repodata": True}, } ], } ) assert repo.skip_rsync_repodata
def test_from_data_relative_url(): """relative_url is initialized from distributors when possible""" repo = Repository.from_data( { "id": "my-repo", "notes": {"_repo-type": "rpm-repo"}, "distributors": [ { "id": "yum_distributor", "distributor_type_id": "yum_distributor", "config": {"relative_url": "some/publish/path"}, } ], } ) assert repo.relative_url == "some/publish/path"
def test_registry_id_from_distributor(): """registry_id is loaded from distributor when possible""" repo = Repository.from_data({ "id": "my-repo", "notes": { "_repo-type": "docker-repo" }, "distributors": [{ "id": "docker_web_distributor_name_cli", "distributor_type_id": "docker_distributor_web", "config": { "repo-registry-id": "some/repo" }, }], }) assert repo.registry_id == "some/repo"
def test_populate_attrs(): """test populate attributes are correctly parsed from repo notes""" repo = Repository.from_data( { "id": "my-repo", "notes": { "_repo-type": "rpm-repo", "content_set": "fake_content_set", "population_sources": ["populate_repo1", "populate_repo2"], "ubi_population": True, "ubi_config_version": "fake_ubi_config_version", }, "distributors": [], } ) assert repo.population_sources == ["populate_repo1", "populate_repo2"] assert repo.ubi_population assert repo.content_set == "fake_content_set" assert repo.ubi_config_version == "fake_ubi_config_version"
def test_productid_attrs(): """All attributes relating to productid are correctly parsed from repo notes.""" repo = Repository.from_data( { "id": "my-repo", "notes": { "_repo-type": "rpm-repo", "arch": "x86_64", "product_versions": '["1.4", "1.100", "1.2"]', "platform_full_version": "whatever", "eng_product": "123", }, "distributors": [], } ) assert repo.arch == "x86_64" assert repo.eng_product_id == 123 assert repo.platform_full_version == "whatever" # Note the version-aware sorting: 1.100 is larger than 1.4 assert repo.product_versions == ["1.2", "1.4", "1.100"]
def test_missing_props(): """from_data raises if input data misses necessary data""" with pytest.raises(InvalidDataException): Repository.from_data({"missing": "necessary props"})
def test_is_not_temporary(): """from_data is_temporary is False by default""" repo = Repository.from_data({"id": "some-repo"}) assert not repo.is_temporary
def test_default_created(): """from_data results in None created by default""" repo = Repository.from_data({"id": "some-repo"}) assert repo.created is None
def test_attr_id(): """from_data sets id attribute appropriately""" repo = Repository.from_data({"id": "some-repo"}) assert repo.id == "some-repo"
def test_bad_id(): """from_data raises if input data has id of wrong type""" with pytest.raises(InvalidDataException): Repository.from_data({"id": ["foo", "bar", "baz"]})