Skip to content

Commit

Permalink
chore(tests): Added test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
shahen94 committed Feb 5, 2024
1 parent 54950b0 commit 7672cdf
Show file tree
Hide file tree
Showing 8 changed files with 276 additions and 15 deletions.
16 changes: 15 additions & 1 deletion src/command/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ use clap::Parser;
/// # Example
///
/// ```
/// use clap::Parser;
/// use craft::command::Command;
///
/// let data = Command::parse();
/// println!("{:?}", data);
/// ```
Expand All @@ -19,8 +22,11 @@ pub struct Command {
///
/// # Example
/// ```
/// use clap::Parser;
/// use craft::command::{Command, SubCommand};
///
/// let data = Command::parse();
/// let command = data.command.unwrap();
/// let command = data.command;
/// println!("{:?}", command);
/// ```
#[derive(Debug, Parser, Clone)]
Expand All @@ -38,7 +44,15 @@ pub enum SubCommand {
///
/// # Example
/// ```
/// use clap::Parser;
/// use craft::command::{Command, SubCommand, Install};
///
/// let data = Command::parse();
///
/// if data.command.is_none() {
/// println!("Reading package.json");
/// return;
/// }
/// let command = data.command.unwrap();
/// let install = match command {
/// SubCommand::Install(install) => install,
Expand Down
11 changes: 0 additions & 11 deletions src/package/npm_package.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,6 @@ use serde::{Deserialize, Serialize};
/// This struct represents a package from the registry.
///
/// It is used to deserialize the JSON response from the registry.
///
/// # Example
/// ```
/// let package: RemotePackage = response.json().await?;
/// ```
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct NpmPackage {
pub name: String,
Expand All @@ -35,12 +30,6 @@ impl PartialEq for NpmPackage {
/// This struct represents the distribution of a package.
///
/// It is used to deserialize the JSON response from the registry.
///
/// # Example
/// ```
/// let package: RemotePackage = response.json().await?;
/// package.dist.integrity;
/// ```
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Distribution {
pub integrity: Option<String>,
Expand Down
16 changes: 16 additions & 0 deletions src/package/version/connector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,20 @@ impl FromStr for Connector {
_ => Ok(Connector::And),
}
}
}

// ─── Tests ───────────────────────────────────────────────────────────────────

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_connector_from_str() {
assert_eq!(",".parse::<Connector>().unwrap(), Connector::And);
assert_eq!("|".parse::<Connector>().unwrap(), Connector::Or);
assert_eq!(" ".parse::<Connector>().unwrap(), Connector::And);
assert_eq!("||".parse::<Connector>().unwrap(), Connector::Or);
assert_eq!("".parse::<Connector>().unwrap(), Connector::And);
}
}
2 changes: 1 addition & 1 deletion src/package/version/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ pub const SEMVER_REGEX: &str = r"^(?P<operator>\^|~|=)?\s?(?P<major>\d+|x|\*)(?:
pub const RANGE_REGEX: &str = r"^(\s+)?(?P<start_operator>~?[<>]=?|~|\^)?\s?(?P<start_major>\d+|x|\*)(?:\.(?P<start_minor>\d+|x|\*))?(?:\.(?P<start_patch>\d+|x|\*))?(?:(?P<connector>,|\|\|)?\s*(?P<end_operator>[<>]=?|~|\^)?\s*(?P<end_major>\d+|x|\*)(?:\.(?P<end_minor>\d+|x|\*))?(?:\.(?P<end_patch>\d+|x|\*))?)?$";

// To match 1.50.5 - 2.0.0 like version strings
pub const LINEAR_RANGE_REGEX: &str = r"^(?P<operator>\^|~|)?(?P<start_major>(\d)+|x|\*)\.?(?P<start_minor>(\d)+|x|\*)?\.?(?P<start_patch>(\d)+|x|\*)?\s?-(\^|~|)?(?P<end_major>(\d)+|x|\*)\.?(?P<end_minor>(\d)+|x|\*)?\.?(?P<end_patch>(\d)+|x|\*)?";
pub const LINEAR_RANGE_REGEX: &str = r"^(?P<operator>\^|~|)?(?P<start_major>(\d)+|x|\*)\.?(?P<start_minor>(\d)+|x|\*)?\.?(?P<start_patch>(\d)+|x|\*)?\s?-(\^|~|)?(\s+)?(?P<end_major>(\d)+|x|\*)\.?(?P<end_minor>(\d)+|x|\*)?\.?(?P<end_patch>(\d)+|x|\*)?";
101 changes: 101 additions & 0 deletions src/package/version/constraint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,104 @@ impl ToString for VersionConstraint {
version
}
}

// ─── Tests ───────────────────────────────────────────────────────────────────

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_version_constraint_parse() {
let version = VersionConstraint::parse("1.0.0");
assert_eq!(version.major, VersionField::Exact(1));
assert_eq!(version.minor, VersionField::Exact(0));
assert_eq!(version.patch, VersionField::Exact(0));
assert_eq!(version.operator, Operator::Equal);
assert_eq!(version.pre_release, None);
assert_eq!(version.build, None);

let version = VersionConstraint::parse("=1.0.0");
assert_eq!(version.major, VersionField::Exact(1));
assert_eq!(version.minor, VersionField::Exact(0));
assert_eq!(version.patch, VersionField::Exact(0));
assert_eq!(version.operator, Operator::Equal);
assert_eq!(version.pre_release, None);
assert_eq!(version.build, None);

let version = VersionConstraint::parse("^1.0.0-alpha");
assert_eq!(version.major, VersionField::Exact(1));
assert_eq!(version.minor, VersionField::Exact(0));
assert_eq!(version.patch, VersionField::Exact(0));
assert_eq!(version.operator, Operator::Caret);
assert_eq!(version.pre_release, Some("alpha".to_string()));
assert_eq!(version.build, None);

let version = VersionConstraint::parse("~1.0.0+build");
assert_eq!(version.major, VersionField::Exact(1));
assert_eq!(version.minor, VersionField::Exact(0));
assert_eq!(version.patch, VersionField::Exact(0));
assert_eq!(version.operator, Operator::Tilde);
assert_eq!(version.pre_release, None);
assert_eq!(version.build, Some("build".to_string()));

let version = VersionConstraint::parse("1.0.0-alpha+build");
assert_eq!(version.major, VersionField::Exact(1));
assert_eq!(version.minor, VersionField::Exact(0));
assert_eq!(version.patch, VersionField::Exact(0));
assert_eq!(version.operator, Operator::Equal);
assert_eq!(version.pre_release, Some("alpha".to_string()));
assert_eq!(version.build, Some("build".to_string()));

let version = VersionConstraint::parse("=1.0.0");
assert_eq!(version.major, VersionField::Exact(1));
assert_eq!(version.minor, VersionField::Exact(0));
assert_eq!(version.patch, VersionField::Exact(0));
assert_eq!(version.operator, Operator::Equal);
assert_eq!(version.pre_release, None);
assert_eq!(version.build, None);
}

#[test]
fn test_version_constraint_to_string() {
let version = VersionConstraint {
major: VersionField::Exact(1),
minor: VersionField::Exact(0),
patch: VersionField::Exact(0),
operator: Operator::Equal,
pre_release: None,
build: None,
};
assert_eq!(version.to_string(), "1.0.0");

let version = VersionConstraint {
major: VersionField::Exact(1),
minor: VersionField::Exact(0),
patch: VersionField::Exact(0),
operator: Operator::GreaterThan,
pre_release: None,
build: None,
};
assert_eq!(version.to_string(), ">1.0.0");

let version = VersionConstraint {
major: VersionField::Exact(1),
minor: VersionField::Exact(0),
patch: VersionField::Exact(0),
operator: Operator::GreaterThan,
pre_release: Some("alpha".to_string()),
build: None,
};
assert_eq!(version.to_string(), ">1.0.0-alpha");

let version = VersionConstraint {
major: VersionField::Exact(1),
minor: VersionField::Exact(0),
patch: VersionField::Exact(0),
operator: Operator::GreaterThan,
pre_release: Some("alpha".to_string()),
build: Some("build".to_string()),
};
assert_eq!(version.to_string(), ">1.0.0-alpha+build");
}
}
28 changes: 28 additions & 0 deletions src/package/version/group.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,32 @@ impl ToString for VersionGroup {

constraints
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_version_group_to_string() {
let group = VersionGroup::new(
vec![
VersionConstraint::parse("1.0.0"),
VersionConstraint::parse("2.0.0"),
],
Connector::And,
);

assert_eq!(group.to_string(), "1.0.0 2.0.0");

let group = VersionGroup::new(
vec![
VersionConstraint::parse("1.0.0"),
VersionConstraint::parse("2.0.0"),
],
Connector::Or,
);

assert_eq!(group.to_string(), "(1.0.0 2.0.0)");
}
}
30 changes: 30 additions & 0 deletions src/package/version/operator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,33 @@ impl ToString for Operator {
}
}
}

// ─── Tests ───────────────────────────────────────────────────────────────────

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_operator_from_str() {
assert_eq!("~".parse::<Operator>().unwrap(), Operator::Tilde);
assert_eq!("^".parse::<Operator>().unwrap(), Operator::Caret);
assert_eq!(">".parse::<Operator>().unwrap(), Operator::GreaterThan);
assert_eq!(">=".parse::<Operator>().unwrap(), Operator::GreaterThanOrEqual);
assert_eq!("<".parse::<Operator>().unwrap(), Operator::LessThan);
assert_eq!("<=".parse::<Operator>().unwrap(), Operator::LessThanOrEqual);
assert_eq!("=".parse::<Operator>().unwrap(), Operator::Equal);
assert_eq!("".parse::<Operator>().is_err(), true);
}

#[test]
fn test_operator_to_string() {
assert_eq!(Operator::Tilde.to_string(), "~");
assert_eq!(Operator::Caret.to_string(), "^");
assert_eq!(Operator::GreaterThan.to_string(), ">");
assert_eq!(Operator::GreaterThanOrEqual.to_string(), ">=");
assert_eq!(Operator::LessThan.to_string(), "<");
assert_eq!(Operator::LessThanOrEqual.to_string(), "<=");
assert_eq!(Operator::Equal.to_string(), "=");
}
}
87 changes: 85 additions & 2 deletions src/package/version/version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ impl VersionImpl {
}

constraints.push(VersionConstraint {
operator: Operator::LessThanOrEqual,
operator: Operator::GreaterThanOrEqual,
major: start_major,
minor: start_minor,
patch: start_patch,
Expand All @@ -122,7 +122,7 @@ impl VersionImpl {
});

constraints.push(VersionConstraint {
operator: Operator::GreaterThanOrEqual,
operator: Operator::LessThanOrEqual,
major: end_major,
minor: end_minor,
patch: end_patch,
Expand Down Expand Up @@ -295,3 +295,86 @@ impl Satisfies for VersionImpl {
true
}
}

// ─── Tests ───────────────────────────────────────────────────────────────────

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_version_new() {
let version = VersionImpl::new("1.0.0");
assert_eq!(version.inner.len(), 1);
assert_eq!(version.inner[0].constraints.len(), 1);
assert_eq!(version.inner[0].constraints[0].operator, Operator::Equal);
assert_eq!(version.inner[0].constraints[0].major, VersionField::Exact(1));
assert_eq!(version.inner[0].constraints[0].minor, VersionField::Exact(0));
assert_eq!(version.inner[0].constraints[0].patch, VersionField::Exact(0));

let version = VersionImpl::new("1.0.0 || 2.0.0");
assert_eq!(version.inner.len(), 2);
assert_eq!(version.inner[0].constraints.len(), 1);
assert_eq!(version.inner[0].constraints[0].operator, Operator::Equal);
assert_eq!(version.inner[0].constraints[0].major, VersionField::Exact(1));
assert_eq!(version.inner[0].constraints[0].minor, VersionField::Exact(0));
assert_eq!(version.inner[0].constraints[0].patch, VersionField::Exact(0));
assert_eq!(version.inner[1].constraints.len(), 1);
assert_eq!(version.inner[1].constraints[0].operator, Operator::Equal);
assert_eq!(version.inner[1].constraints[0].major, VersionField::Exact(2));
assert_eq!(version.inner[1].constraints[0].minor, VersionField::Exact(0));
assert_eq!(version.inner[1].constraints[0].patch, VersionField::Exact(0));

let version = VersionImpl::new(">=1.0.0 <2.0.0");
assert_eq!(version.inner.len(), 1);
assert_eq!(version.inner[0].constraints.len(), 2);
assert_eq!(version.inner[0].constraints[0].operator, Operator::GreaterThanOrEqual);
assert_eq!(version.inner[0].constraints[0].major, VersionField::Exact(1));
assert_eq!(version.inner[0].constraints[0].minor, VersionField::Exact(0));
assert_eq!(version.inner[0].constraints[0].patch, VersionField::Exact(0));
assert_eq!(version.inner[0].constraints[1].operator, Operator::LessThan);
assert_eq!(version.inner[0].constraints[1].major, VersionField::Exact(2));
assert_eq!(version.inner[0].constraints[1].minor, VersionField::Exact(0));
assert_eq!(version.inner[0].constraints[1].patch, VersionField::Exact(0));

let version = VersionImpl::new("1.0.0 - 2.0.0");
assert_eq!(version.inner.len(), 1);
assert_eq!(version.inner[0].constraints.len(), 2);
assert_eq!(version.inner[0].constraints[0].operator, Operator::GreaterThanOrEqual);
assert_eq!(version.inner[0].constraints[0].major, VersionField::Exact(1));
assert_eq!(version.inner[0].constraints[0].minor, VersionField::Exact(0));
assert_eq!(version.inner[0].constraints[0].patch, VersionField::Exact(0));
assert_eq!(version.inner[0].constraints[1].operator, Operator::LessThanOrEqual);
assert_eq!(version.inner[0].constraints[1].major, VersionField::Exact(2));
assert_eq!(version.inner[0].constraints[1].minor, VersionField::Exact(0));
assert_eq!(version.inner[0].constraints[1].patch, VersionField::Exact(0));
}

#[test]
fn test_version_is_exact() {
let version = VersionImpl::new("1.0.0");
assert_eq!(version.is_exact(), true);

let version = VersionImpl::new("1.0.0 || 2.0.0");
assert_eq!(version.is_exact(), false);

let version = VersionImpl::new(">=1.0.0 <2.0.0");
assert_eq!(version.is_exact(), false);

let version = VersionImpl::new("1.0.0 - 2.0.0");
assert_eq!(version.is_exact(), false);

let version = VersionImpl::new("1.*.*");
assert_eq!(version.is_exact(), false);
}

#[test]
fn test_version_satisfies() {

}

#[test]
fn test_version_satisfies_range() {

}
}

0 comments on commit 7672cdf

Please sign in to comment.