//! DO NOT EDIT
//!
//! Generated with `{{generated_with}}`
//! Scenarios from <{{generated_from}}>
//!
#![cfg(all(feature = "python", feature = "pypi", unix))]

use std::process::Command;

use uv_static::EnvVars;

use crate::common::{TestContext, build_vendor_links_url, packse_index_url, uv_snapshot};

/// Create a `pip install` command with options shared across all scenarios.
fn command(context: &TestContext) -> Command {
    let mut command = context.pip_install();
    command
        .arg("--index-url")
        .arg(packse_index_url())
        .arg("--find-links")
        .arg(build_vendor_links_url());
    command.env_remove(EnvVars::UV_EXCLUDE_NEWER);
    command
}

{{#scenarios}}

/// {{description}}
///
/// ```text
/// {{name}}
{{#tree}}
/// {{.}}
{{/tree}}
/// ```
{{#python_patch}}
#[cfg(feature = "python-patch")]
{{/python_patch}}
#[test]
fn {{module_name}}() {
    let context = TestContext::new("{{environment.python}}");

    // In addition to the standard filters, swap out package names for shorter messages
    let mut filters = context.filters();
    filters.push((r"{{name}}-", "package-"));

    uv_snapshot!(filters, command(&context)
        {{#resolver_options.prereleases}}
        .arg("--prerelease=allow")
        {{/resolver_options.prereleases}}
        {{#resolver_options.no_build}}
        .arg("--only-binary")
        .arg("{{.}}")
        {{/resolver_options.no_build}}
        {{#resolver_options.no_binary}}
        .arg("--no-binary")
        .arg("{{.}}")
        {{/resolver_options.no_binary}}
        {{#resolver_options.python_platform}}
        .arg("--python-platform={{.}}")
        {{/resolver_options.python_platform}}
        {{#root.requires}}
        .arg("{{requirement}}")
        {{/root.requires}}, @r#"<snapshot>
    "#);

    {{#expected.explanation}}
    // {{expected.explanation}}
    {{/expected.explanation}}
    {{#expected.satisfiable}}
    {{#expected.packages}}
    context.assert_installed("{{module_name}}", "{{version}}");
    {{/expected.packages}}
    {{/expected.satisfiable}}
    {{^expected.satisfiable}}
    {{#root.requires}}
    context.assert_not_installed("{{module_name}}");
    {{/root.requires}}
    {{/expected.satisfiable}}
}
{{/scenarios}}
