use super::common::*;
use crate::{
analyzer::release::Tag,
config::package::PackageConfigBuilder,
forge::{request::Commit, traits::MockForge},
};
#[tokio::test]
async fn start_next_release_creates_commits_for_tagged_packages() {
let mut mock_forge = MockForge::new();
mock_forge
.expect_get_latest_tags_for_prefix()
.returning(|_, _| {
Ok(vec![Tag {
semver: Version::parse("1.0.0").unwrap(),
..Default::default()
}])
});
mock_forge.expect_get_commits().returning(|_, _| Ok(vec![]));
mock_forge
.expect_create_commit()
.times(1)
.withf(|req| req.message.contains("chore(main): bump patch version"))
.returning(|_| {
Ok(Commit {
sha: "new-sha".to_string(),
})
});
let orchestrator = create_test_orchestrator(mock_forge);
orchestrator.start_next_release(None).await.unwrap();
}
#[tokio::test]
async fn start_next_release_filters_by_target_packages() {
let mut mock_forge = MockForge::new();
mock_forge
.expect_get_latest_tags_for_prefix()
.times(2)
.returning(|prefix, _branch| {
if prefix.contains("pkg-a") {
Ok(vec![Tag {
semver: Version::parse("1.0.0").unwrap(),
..Default::default()
}])
} else {
Ok(vec![Tag {
semver: Version::parse("2.0.0").unwrap(),
..Default::default()
}])
}
});
mock_forge.expect_get_commits().returning(|_, _| Ok(vec![]));
mock_forge.expect_create_commit().times(1).returning(|_| {
Ok(Commit {
sha: "new-sha".to_string(),
})
});
let orchestrator = create_test_orchestrator_with_config(
mock_forge,
vec![
PackageConfigBuilder::default()
.name("pkg-a")
.path("packages/pkg-a")
.build()
.unwrap(),
PackageConfigBuilder::default()
.name("pkg-b")
.path("packages/pkg-b")
.build()
.unwrap(),
],
None,
);
orchestrator
.start_next_release(Some(vec!["pkg-a".to_string()]))
.await
.unwrap();
}
#[tokio::test]
async fn start_next_release_skips_untagged_packages() {
let mut mock_forge = MockForge::new();
mock_forge
.expect_get_latest_tags_for_prefix()
.returning(|_, _| Ok(vec![]));
mock_forge.expect_create_commit().times(0);
let orchestrator = create_test_orchestrator(mock_forge);
orchestrator.start_next_release(None).await.unwrap();
}