releasaurus-core 0.16.0

A comprehensive release automation tool that streamlines the software release process across multiple programming languages and forge platforms
Documentation
use std::path::Path;

use crate::updater::{manager::ManifestTarget, traits::ManifestTargets};

pub struct GoManifests {}

impl ManifestTargets for GoManifests {
    fn manifest_targets(
        _pkg_name: &str,
        _workspace_path: &Path,
        pkg_path: &Path,
    ) -> Vec<ManifestTarget> {
        vec![
            ManifestTarget {
                path: pkg_path.join("version.go"),
                basename: "version.go".into(),
            },
            ManifestTarget {
                path: pkg_path.join("version/version.go"),
                basename: "version.go".into(),
            },
            ManifestTarget {
                path: pkg_path.join("internal/version.go"),
                basename: "version.go".into(),
            },
            ManifestTarget {
                path: pkg_path.join("internal/version/version.go"),
                basename: "version.go".into(),
            },
        ]
    }
}

#[cfg(test)]
mod tests {
    use std::path::Path;

    use super::*;

    #[test]
    fn returns_all_golang_manifest_targets() {
        let pkg_name = "gopher";
        let workspace_path = Path::new("").to_path_buf();
        let pkg_path = workspace_path.clone();

        let targets =
            GoManifests::manifest_targets(pkg_name, &workspace_path, &pkg_path);

        assert_eq!(targets.len(), 4);

        let basenames: Vec<_> = targets.iter().map(|t| &t.basename).collect();
        assert_eq!(basenames.iter().filter(|b| **b == "version.go").count(), 4);

        let paths: Vec<_> =
            targets.iter().map(|t| t.path.to_str().unwrap()).collect();

        assert!(paths.contains(&"version.go"));
        assert!(paths.contains(&"version/version.go"));
        assert!(paths.contains(&"internal/version.go"));
        assert!(paths.contains(&"internal/version/version.go"));
    }

    #[test]
    fn generates_correct_paths_for_nested_package() {
        let pkg_name = "gopher";
        let workspace_path = Path::new("").to_path_buf();
        let pkg_path = Path::new("pkg").to_path_buf();

        let targets =
            GoManifests::manifest_targets(pkg_name, &workspace_path, &pkg_path);

        let basenames: Vec<_> = targets.iter().map(|t| &t.basename).collect();
        assert_eq!(basenames.iter().filter(|b| **b == "version.go").count(), 4);

        let paths: Vec<_> =
            targets.iter().map(|t| t.path.to_str().unwrap()).collect();

        assert!(paths.contains(&"pkg/version.go"));
        assert!(paths.contains(&"pkg/version/version.go"));
        assert!(paths.contains(&"pkg/internal/version.go"));
        assert!(paths.contains(&"pkg/internal/version/version.go"));
    }
}