mod common;
use assert_cmd::Command;
use predicates::prelude::*;
use std::fs;
#[test]
fn test_help_flag() {
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg("--help")
.assert()
.success()
.stdout(predicate::str::contains("Check for outdated Python dependencies"))
.stdout(predicate::str::contains("--update"))
.stdout(predicate::str::contains("--minor"))
.stdout(predicate::str::contains("--force"))
.stdout(predicate::str::contains("--pre-release"));
}
#[test]
fn test_help_short_flag() {
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg("-h")
.assert()
.success()
.stdout(predicate::str::contains("Check for outdated Python dependencies"));
}
#[test]
fn test_version_flag() {
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg("--version")
.assert()
.success()
.stdout(predicate::str::contains("pcu"));
}
#[test]
fn test_version_short_flag() {
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg("-V")
.assert()
.success()
.stdout(predicate::str::contains("pcu"));
}
#[test]
fn test_detect_requirements_txt() {
let project = common::create_temp_project_with_requirements();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.assert()
.success();
}
#[test]
fn test_detect_pep621_pyproject() {
let project = common::create_temp_project_with_pep621();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.assert()
.success();
}
#[test]
fn test_detect_poetry_pyproject() {
let project = common::create_temp_project_with_poetry();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.assert()
.success();
}
#[test]
fn test_detect_pdm_pyproject() {
let project = common::create_temp_project_with_pdm();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.assert()
.success();
}
#[test]
fn test_detect_conda_environment() {
let project = common::create_temp_project_with_conda();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.assert()
.success();
}
#[test]
fn test_detect_multiple_files() {
let project = common::create_temp_project_with_multiple_files();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.assert()
.success();
}
#[test]
fn test_empty_project() {
let project = common::TempProject::new();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path()).assert().success();
}
#[test]
fn test_update_flag() {
let project = common::create_temp_project_with_requirements();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.arg("--update")
.assert()
.success();
}
#[test]
fn test_minor_flag() {
let project = common::create_temp_project_with_requirements();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.arg("--minor")
.assert()
.success();
}
#[test]
fn test_force_flag() {
let project = common::create_temp_project_with_requirements();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.arg("--force")
.assert()
.success();
}
#[test]
fn test_pre_release_flag() {
let project = common::create_temp_project_with_requirements();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.arg("--pre-release")
.assert()
.success();
}
#[test]
fn test_combined_flags() {
let project = common::create_temp_project_with_requirements();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path())
.arg("--update")
.arg("--minor")
.arg("--pre-release")
.assert()
.success();
}
#[test]
fn test_no_modification_without_update() {
let project = common::create_temp_project_with_requirements();
let req_path = project.file_path("requirements.txt");
let original_content = fs::read_to_string(&req_path).unwrap();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg(project.path()).assert().success();
let current_content = fs::read_to_string(&req_path).unwrap();
assert_eq!(original_content, current_content);
}
#[test]
fn test_nonexistent_directory() {
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.arg("/nonexistent/path/to/project")
.assert()
.failure();
}
#[test]
fn test_default_to_current_directory() {
let project = common::create_temp_project_with_requirements();
let mut cmd = Command::cargo_bin("pcu").unwrap();
cmd.current_dir(project.path())
.assert()
.success();
}