def test_good_changelog_yaml_files(yaml_filename): paths = PathsConfig.force_collection(base_dir='/') config = ChangelogConfig.default(paths, CollectionDetails(paths)) data = load_yaml(yaml_filename) result = sanitize_changes(data, config) if 'ancestor' not in data and result['ancestor'] is None: result.pop('ancestor') assert result == data
def __init__(self, base_path: pathlib.Path, namespace: str, collection: str): collection_path = base_path / 'ansible_collections' / namespace / collection collection_path.mkdir(parents=True, exist_ok=True) super().__init__(base_path, PathsConfig.force_collection(base_dir=str(collection_path))) self.namespace = namespace self.collection = collection self.collection_name = '{0}.{1}'.format(namespace, collection)
def collection(cls, collection_name: str, version: str, changelog_data: t.Optional[t.Any] = None) -> 'ChangelogData': paths = PathsConfig.force_collection('') collection_details = CollectionDetails(paths) collection_details.namespace, collection_details.name = collection_name.split('.', 1) collection_details.version = version collection_details.flatmap = False # TODO! config = ChangelogConfig.default(paths, collection_details) return cls(paths, config, ChangesData(config, '', changelog_data), flatmap=True) # TODO!
def test_bad_changelog_yaml_files(yaml_filename, json_filename): paths = PathsConfig.force_collection(base_dir='/') config = ChangelogConfig.default(paths, CollectionDetails(paths)) try: data = load_yaml(yaml_filename) if not STORE_RESULT: sanitized_data = load_yaml(yaml_filename + '-sanitized') except Exception: # We are only interested in parsable YAML return result = sanitize_changes(data, config) if STORE_RESULT: store_yaml(yaml_filename + '-sanitized', result) else: assert result == sanitized_data
def test_collection_details(tmp_path): paths = PathsConfig.force_ansible(str(tmp_path)) details = CollectionDetails(paths) with pytest.raises(Exception) as exc: details.get_namespace() assert str( exc.value ) == 'Internal error: cannot get collection details for non-collection' with pytest.raises(Exception) as exc: details.get_name() assert str( exc.value ) == 'Internal error: cannot get collection details for non-collection' with pytest.raises(Exception) as exc: details.get_version() assert str( exc.value ) == 'Internal error: cannot get collection details for non-collection' with pytest.raises(Exception) as exc: details.get_flatmap() assert str( exc.value ) == 'Internal error: cannot get collection details for non-collection' paths = PathsConfig.force_collection(str(tmp_path)) details = CollectionDetails(paths) with pytest.raises(ChangelogError) as exc: details.get_namespace() assert 'Cannot find galaxy.yml' in str(exc.value) with pytest.raises(ChangelogError) as exc: details.get_name() assert 'Cannot find galaxy.yml' in str(exc.value) with pytest.raises(ChangelogError) as exc: details.get_version() assert 'Cannot find galaxy.yml' in str(exc.value) with pytest.raises(ChangelogError) as exc: details.get_flatmap() assert 'Cannot find galaxy.yml' in str(exc.value) galaxy_path = tmp_path / 'galaxy.yml' galaxy_path.write_text('---\na: b\n') paths = PathsConfig.force_collection(str(tmp_path)) details = CollectionDetails(paths) with pytest.raises(ChangelogError) as exc: details.get_namespace() assert 'Cannot find "namespace" field in galaxy.yaml' in str(exc.value) with pytest.raises(ChangelogError) as exc: details.get_name() assert 'Cannot find "name" field in galaxy.yaml' in str(exc.value) with pytest.raises(ChangelogError) as exc: details.get_version() assert 'Cannot find "version" field in galaxy.yaml' in str(exc.value) assert details.get_flatmap() is None galaxy_path = tmp_path / 'galaxy.yml' galaxy_path.write_text('---\nnamespace: 1\nname: 2\nversion: 3\ntype: 4') paths = PathsConfig.force_collection(str(tmp_path)) details = CollectionDetails(paths) with pytest.raises(ChangelogError) as exc: details.get_namespace() assert 'Cannot find "namespace" field in galaxy.yaml' in str(exc.value) with pytest.raises(ChangelogError) as exc: details.get_name() assert 'Cannot find "name" field in galaxy.yaml' in str(exc.value) with pytest.raises(ChangelogError) as exc: details.get_version() assert 'Cannot find "version" field in galaxy.yaml' in str(exc.value) assert details.get_flatmap() is False galaxy_path = tmp_path / 'galaxy.yml' galaxy_path.write_text( '---\nnamespace: a\nname: b\nversion: c\ntype: flatmap') paths = PathsConfig.force_collection(str(tmp_path)) details = CollectionDetails(paths) assert details.get_namespace() == 'a' assert details.get_name() == 'b' assert details.get_version() == 'c' assert details.get_flatmap() is True galaxy_path = tmp_path / 'galaxy.yml' galaxy_path.write_text('---\ntype: other') paths = PathsConfig.force_collection(str(tmp_path)) details = CollectionDetails(paths) assert details.get_flatmap() is False galaxy_path = tmp_path / 'galaxy.yml' galaxy_path.write_text( '---\nnamespace: a\nname: b\nversion: c\ntype: flatmap') paths = PathsConfig.force_collection(str(tmp_path)) details = CollectionDetails(paths) details.namespace = 'test' details.name = 'asdf' details.version = '1.0.0' details.flatmap = False assert details.get_namespace() == 'test' assert details.get_name() == 'asdf' assert details.get_version() == '1.0.0' assert details.get_flatmap() is False
def test_changes_data(): paths = PathsConfig.force_collection('/') details = CollectionDetails(paths) config = ChangelogConfig.default(paths, details) data = { 'ancestor': None, 'releases': {}, } changes = ChangesData(config, os.path.join(config.paths.changelog_dir, config.changes_file), data_override=data) changes.ancestor = '0.1.0' assert not changes.has_release assert sorted(changes.releases.keys()) == [] changes.add_release('1.1.0', None, datetime.date(2020, 2, 1)) assert changes.has_release assert sorted(changes.releases.keys()) == ['1.1.0'] assert changes.latest_version == '1.1.0' changes.add_release('1.0.0', None, datetime.date(2020, 1, 1)) assert changes.has_release assert sorted(changes.releases.keys()) == ['1.0.0', '1.1.0'] assert changes.latest_version == '1.1.0' changes.add_release('1.2.0', None, datetime.date(2020, 3, 1)) assert changes.has_release assert sorted(changes.releases.keys()) == ['1.0.0', '1.1.0', '1.2.0'] assert changes.latest_version == '1.2.0' changes.add_release('1.2.1', None, datetime.date(2020, 3, 2)) changes.add_release('1.3.0-alpha', None, datetime.date(2020, 3, 3)) changes.add_release('1.3.0-beta', None, datetime.date(2020, 3, 4)) changes.add_release('1.3.0', None, datetime.date(2020, 3, 5)) changes.add_release('1.3.1-alpha', None, datetime.date(2020, 3, 6)) assert sorted(changes.releases.keys()) == [ '1.0.0', '1.1.0', '1.2.0', '1.2.1', '1.3.0', '1.3.0-alpha', '1.3.0-beta', '1.3.1-alpha', ] changes2 = ChangesData(config, os.path.join(config.paths.changelog_dir, config.changes_file), data_override=ChangesBase.empty()) changes2.ancestor = '1.3.1-alpha' changes2.add_release('1.3.2', None, datetime.date(2020, 3, 10)) changes2.add_release('1.3.3', None, datetime.date(2020, 3, 10)) assert sorted(changes2.releases.keys()) == [ '1.3.2', '1.3.3', ] changes3 = ChangesData(config, os.path.join(config.paths.changelog_dir, config.changes_file), data_override=ChangesBase.empty()) changes3.add_release('0.1.0', None, datetime.date(2019, 7, 30)) changes3.add_release('0.2.0', None, datetime.date(2019, 12, 31)) assert sorted(changes3.releases.keys()) == [ '0.1.0', '0.2.0', ] for order in [ [changes, changes2], [changes2, changes], ]: changes_concat = ChangesData.concatenate(order) assert sorted(changes_concat.releases.keys()) == [ '1.0.0', '1.1.0', '1.2.0', '1.2.1', '1.3.0', '1.3.0-alpha', '1.3.0-beta', '1.3.1-alpha', '1.3.2', '1.3.3', ] assert changes_concat.ancestor == '0.1.0' for order in [ [changes, changes2, changes3], [changes, changes3, changes2], [changes2, changes, changes3], [changes2, changes3, changes], [changes3, changes, changes2], [changes3, changes2, changes], ]: changes_concat = ChangesData.concatenate(order) assert sorted(changes_concat.releases.keys()) == [ '0.1.0', '0.2.0', '1.0.0', '1.1.0', '1.2.0', '1.2.1', '1.3.0', '1.3.0-alpha', '1.3.0-beta', '1.3.1-alpha', '1.3.2', '1.3.3', ] assert changes_concat.ancestor is None changes_concat.ancestor = '0.0.1' changes_concat.prune_versions(versions_after='0.1.0', versions_until=None) assert sorted(changes_concat.releases.keys()) == [ '0.2.0', '1.0.0', '1.1.0', '1.2.0', '1.2.1', '1.3.0', '1.3.0-alpha', '1.3.0-beta', '1.3.1-alpha', '1.3.2', '1.3.3', ] assert changes_concat.ancestor == '0.1.0' changes_concat.prune_versions(versions_after=None, versions_until='1.3.2') assert sorted(changes_concat.releases.keys()) == [ '0.2.0', '1.0.0', '1.1.0', '1.2.0', '1.2.1', '1.3.0', '1.3.0-alpha', '1.3.0-beta', '1.3.1-alpha', '1.3.2', ] assert changes_concat.ancestor == '0.1.0' changes_concat.prune_versions(versions_after='1.1.0', versions_until='1.3.0') assert sorted(changes_concat.releases.keys()) == [ '1.2.0', '1.2.1', '1.3.0', '1.3.0-alpha', '1.3.0-beta', ] assert changes_concat.ancestor == '1.1.0'
def test_is_release_version_collection_fail(version): paths = PathsConfig.force_collection('.') config = ChangelogConfig.default(paths, CollectionDetails(paths)) with pytest.raises(ChangelogError): is_release_version(config, version)
def test_is_release_version_collection(version, is_release): paths = PathsConfig.force_collection('.') config = ChangelogConfig.default(paths, CollectionDetails(paths)) assert is_release_version(config, version) == is_release