use super::*;
use crate::Error;
type Result<T> = core::result::Result<T, Box<dyn std::error::Error>>;
#[test]
fn test_packer_support_validate_version_update_simple() -> Result<()> {
use std::cmp::Ordering;
assert_eq!(validate_version_update("1.0.0", "1.0.1")?, Ordering::Greater);
assert_eq!(validate_version_update("1.0.0", "1.1.0")?, Ordering::Greater);
assert_eq!(validate_version_update("1.0.0", "2.0.0")?, Ordering::Greater);
assert_eq!(validate_version_update("1.0.0", "1.0.0")?, Ordering::Equal);
assert_eq!(validate_version_update("1.0.1", "1.0.0")?, Ordering::Less);
assert_eq!(validate_version_update("v1.0.0", "1.0.1")?, Ordering::Greater);
assert_eq!(validate_version_update("1.0.0", "v1.0.1")?, Ordering::Greater);
assert_eq!(validate_version_update("a", "b")?, Ordering::Greater);
assert_eq!(validate_version_update("b", "a")?, Ordering::Less);
assert_eq!(validate_version_update("a", "a")?, Ordering::Equal);
Ok(())
}
#[test]
fn test_packer_support_validate_version_for_install_valid() -> Result<()> {
assert!(validate_version_for_install("0.1.0").is_ok());
assert!(validate_version_for_install("1.0.0").is_ok());
assert!(validate_version_for_install("0.1.1-alpha.1").is_ok());
assert!(validate_version_for_install("0.1.1-beta.123").is_ok());
assert!(validate_version_for_install("0.1.1-rc.1.2").is_ok());
assert!(validate_version_for_install("v1.0.0-alpha.1").is_ok());
Ok(())
}
#[test]
fn test_packer_support_validate_version_for_install_invalid() -> Result<()> {
let err = validate_version_for_install("0.1.1-alpha").unwrap_err();
match err {
Error::InvalidPrereleaseFormat { version } => {
assert_eq!(version, "0.1.1-alpha");
}
_ => panic!("Expected InvalidPrereleaseFormat error"),
}
let err = validate_version_for_install("0.1.1-alpha.text").unwrap_err();
match err {
Error::InvalidPrereleaseFormat { version } => {
assert_eq!(version, "0.1.1-alpha.text");
}
_ => panic!("Expected InvalidPrereleaseFormat error"),
}
let err = validate_version_for_install("0.1.1-alpha.1.some").unwrap_err();
match err {
Error::InvalidPrereleaseFormat { version } => {
assert_eq!(version, "0.1.1-alpha.1.some");
}
_ => panic!("Expected InvalidPrereleaseFormat error"),
}
Ok(())
}
#[test]
fn test_packer_support_pack_uri_parse_repo() -> Result<()> {
let uri = "pro@coder";
let pack_uri = PackUri::parse(uri);
assert!(matches!(pack_uri, PackUri::RepoPack(_)));
if let PackUri::RepoPack(identity) = &pack_uri {
assert_eq!(identity.namespace, "pro");
assert_eq!(identity.name, "coder");
}
Ok(())
}
#[test]
fn test_packer_support_pack_uri_parse_http() -> Result<()> {
let uri = "https://example.com/some-pack.aipack";
let pack_uri = PackUri::parse(uri);
assert!(matches!(pack_uri, PackUri::HttpLink(_)));
if let PackUri::HttpLink(url) = &pack_uri {
assert_eq!(url, "https://example.com/some-pack.aipack");
}
Ok(())
}
#[test]
fn test_packer_support_pack_uri_parse_local() -> Result<()> {
let uri = "./path/to/pack.aipack";
let pack_uri = PackUri::parse(uri);
assert!(matches!(pack_uri, PackUri::LocalPath(_)));
if let PackUri::LocalPath(path) = &pack_uri {
assert_eq!(path, "./path/to/pack.aipack");
}
Ok(())
}
#[test]
fn test_packer_support_pack_uri_display() -> Result<()> {
let data = [
("pro@coder", "pro@coder"),
(
"https://example.com/pack.aipack",
"URL 'https://example.com/pack.aipack'",
),
("./local.aipack", "local file './local.aipack'"),
];
for (input, expected_display) in data {
let pack_uri = PackUri::parse(input);
assert_eq!(pack_uri.to_string(), expected_display, "Input: {input}");
}
Ok(())
}