use crate::core::manifest::PlatformType;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum PlatformCapability {
CreatePr,
MergePr,
FindPrByBranch,
GetReviews,
StatusChecks,
MergeMethods,
PrDiff,
UpdateBranch,
AutoMerge,
CreateRepo,
DeleteRepo,
CreateRelease,
}
pub fn platform_capabilities(platform: PlatformType) -> Vec<PlatformCapability> {
use PlatformCapability::*;
let mut caps = vec![
CreatePr,
MergePr,
FindPrByBranch,
GetReviews,
StatusChecks,
MergeMethods,
PrDiff,
];
match platform {
PlatformType::GitHub => {
caps.extend([
UpdateBranch,
AutoMerge,
CreateRepo,
DeleteRepo,
CreateRelease,
]);
}
PlatformType::GitLab => {
caps.extend([CreateRepo, DeleteRepo]);
}
PlatformType::AzureDevOps => {
caps.extend([CreateRepo, DeleteRepo]);
}
PlatformType::Bitbucket => {
}
}
caps
}
pub fn platform_supports(platform: PlatformType, capability: PlatformCapability) -> bool {
platform_capabilities(platform).contains(&capability)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_github_has_all_capabilities() {
let caps = platform_capabilities(PlatformType::GitHub);
assert!(caps.contains(&PlatformCapability::CreatePr));
assert!(caps.contains(&PlatformCapability::AutoMerge));
assert!(caps.contains(&PlatformCapability::UpdateBranch));
assert!(caps.contains(&PlatformCapability::CreateRepo));
assert!(caps.contains(&PlatformCapability::DeleteRepo));
assert!(caps.contains(&PlatformCapability::CreateRelease));
}
#[test]
fn test_gitlab_has_repo_management() {
let caps = platform_capabilities(PlatformType::GitLab);
assert!(caps.contains(&PlatformCapability::CreatePr));
assert!(caps.contains(&PlatformCapability::CreateRepo));
assert!(caps.contains(&PlatformCapability::DeleteRepo));
assert!(!caps.contains(&PlatformCapability::AutoMerge));
assert!(!caps.contains(&PlatformCapability::CreateRelease));
}
#[test]
fn test_azure_has_repo_management() {
let caps = platform_capabilities(PlatformType::AzureDevOps);
assert!(caps.contains(&PlatformCapability::CreatePr));
assert!(caps.contains(&PlatformCapability::CreateRepo));
assert!(!caps.contains(&PlatformCapability::AutoMerge));
}
#[test]
fn test_bitbucket_core_only() {
let caps = platform_capabilities(PlatformType::Bitbucket);
assert!(caps.contains(&PlatformCapability::CreatePr));
assert!(caps.contains(&PlatformCapability::MergePr));
assert!(!caps.contains(&PlatformCapability::CreateRepo));
assert!(!caps.contains(&PlatformCapability::AutoMerge));
assert!(!caps.contains(&PlatformCapability::CreateRelease));
}
#[test]
fn test_platform_supports() {
assert!(platform_supports(
PlatformType::GitHub,
PlatformCapability::AutoMerge
));
assert!(!platform_supports(
PlatformType::Bitbucket,
PlatformCapability::AutoMerge
));
}
}