use cargo_semantic_release::test_util::repo_init;
pub use cargo_semantic_release::test_util::RepositoryTestExtensions;
use cargo_semantic_release::{Changes, SemanticVersionAction};
#[test]
fn empty_repo_raises_error() {
let (_temp_dir, repository) = repo_init(None);
let result = Changes::from_repo(&repository);
assert!(result.is_err(), "Expected Error, but got Ok");
}
#[test]
fn major_change_increments_major_semantic_version() {
let commit_messages = vec![
"💥 introduce breaking changes",
":sparkles: introduce new feature",
":green_heart: fix CI build",
":memo: add or update documentation",
];
let (_temp_dir, repository) = repo_init(Some(commit_messages));
let result = Changes::from_repo(&repository)
.unwrap()
.define_action_for_semantic_version();
assert_eq!(result, SemanticVersionAction::IncrementMajor);
}
#[test]
fn minor_change_increments_minor_semantic_version() {
let commit_messages = vec![
":sparkles: introduce new feature",
":green_heart: fix CI build",
":memo: add or update documentation",
];
let (_temp_dir, repository) = repo_init(Some(commit_messages));
let result = Changes::from_repo(&repository)
.unwrap()
.define_action_for_semantic_version();
assert_eq!(result, SemanticVersionAction::IncrementMinor);
}
#[test]
fn patch_change_increments_patch_semantic_version() {
let commit_messages = vec![
":green_heart: fix CI build",
":memo: add or update documentation",
];
let (_temp_dir, repository) = repo_init(Some(commit_messages));
let result = Changes::from_repo(&repository)
.unwrap()
.define_action_for_semantic_version();
assert_eq!(result, SemanticVersionAction::IncrementPatch);
}
#[test]
fn other_change_keeps_semantic_version() {
let commit_messages = vec![":memo: add or update documentation"];
let (_temp_dir, repository) = repo_init(Some(commit_messages));
let result = Changes::from_repo(&repository)
.unwrap()
.define_action_for_semantic_version();
assert_eq!(result, SemanticVersionAction::Keep);
}