mod common;
use breezyshim::testing::TestEnv;
use breezyshim::workingtree::WorkingTree;
use common::*;
use debian_analyzer::lintian::latest_standards_version;
use debianize::debianize;
use serial_test::serial;
use std::path::Path;
use tempfile::TempDir;
use upstream_ontologist::UpstreamMetadata;
#[test]
#[serial]
fn test_debianize_simple_python_package() {
let image_cached = match DebianImageCached::new() {
Ok(cached) => cached,
Err(e) => {
eprintln!("Failed to cache Debian image: {:?}", e);
return;
}
};
let test_env = TestEnv::new();
let temp_dir = TempDir::new().unwrap();
let (repo_path, wt) = create_test_python_repo(&temp_dir, "hello-world");
create_simple_python_package(&wt, "hello-world", "0.1.0", &["requests>=2.25.0"]);
let preferences = default_test_preferences();
let metadata = UpstreamMetadata::new();
let result = debianize(
&wt,
Path::new(""),
Some(&wt.branch()),
Some(Path::new("")),
&preferences,
Some("0.1.0"),
&metadata,
);
assert!(result.is_ok(), "Debianize failed: {:?}", result.err());
assert_debian_files_exist(&wt);
let control_content = read_cleaned_control(&repo_path);
let expected_control = format!(
"Source: python-hello-world\n\
Maintainer: Test Packager <packager@example.com>\n\
Build-Depends: debhelper-compat (= 13), dh-sequence-python3, python3-all, python3-setuptools\n\
Standards-Version: {}\n\
Rules-Requires-Root: no\n\
Testsuite: autopkgtest-pkg-python\n\
\n\
Package: python3-hello-world\n\
Architecture: all\n\
Depends: ${{python3:Depends}}\n",
latest_standards_version()
);
assert_eq!(control_content, expected_control);
let rules_path = repo_path.join("debian/rules");
let rules_content = std::fs::read_to_string(&rules_path).unwrap();
let expected_rules = "#!/usr/bin/make -f\n%:\n\tdh $@ --buildsystem=pybuild\n";
assert_eq!(rules_content, expected_rules);
let format_path = repo_path.join("debian/source/format");
let format_content = std::fs::read_to_string(&format_path).unwrap();
assert_eq!(format_content, "3.0 (quilt)\n");
std::mem::drop(image_cached);
std::mem::drop(test_env);
}
#[test]
#[serial]
fn test_debianize_with_custom_maintainer() {
let image_cached = match DebianImageCached::new() {
Ok(cached) => cached,
Err(e) => {
eprintln!("Failed to cache Debian image: {:?}", e);
return;
}
};
let test_env = TestEnv::new();
let temp_dir = TempDir::new().unwrap();
let (repo_path, wt) = create_test_python_repo(&temp_dir, "test-pkg");
create_simple_python_package(&wt, "test-pkg", "1.0.0", &[]);
let mut preferences = default_test_preferences();
preferences.author = Some("John Doe <john@example.com>".to_string());
let metadata = UpstreamMetadata::new();
let result = debianize(
&wt,
Path::new(""),
Some(&wt.branch()),
Some(Path::new("")),
&preferences,
Some("1.0.0"),
&metadata,
);
assert!(result.is_ok(), "Debianize failed: {:?}", result.err());
let control_content = read_cleaned_control(&repo_path);
assert!(control_content.contains("Maintainer: John Doe <john@example.com>"));
std::mem::drop(test_env);
std::mem::drop(image_cached);
}