aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/command/audit_command_test.rs
blob: bccc7c28373c1983411dc079d6b0d5be7a0ed712 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//! ref: composer/tests/Composer/Test/Command/AuditCommandTest.php

use crate::test_case::{
    RunOptions, create_composer_lock, create_installed_json, get_application_tester, get_package,
    init_temp_composer,
};
use serial_test::serial;
use shirabe::package::handle::PackageInterfaceHandle;
use shirabe_php_shim::PhpMixed;

#[test]
#[serial]
#[ignore = "todo!() at crates/shirabe/src/command/audit_command.rs:285 (AuditCommand::get_packages non-locked branch: installed-repo conversion unported)"]
fn test_successful_response_code_when_no_packages_are_required() {
    let tear_down = init_temp_composer(None, None, None, true);

    let mut app_tester = get_application_tester();
    app_tester
        .run(
            vec![(PhpMixed::from("command"), PhpMixed::from("audit"))],
            RunOptions::default(),
        )
        .unwrap();

    assert_eq!(0, app_tester.get_status_code());
    assert_eq!(
        "No packages - skipping audit.",
        app_tester.get_display().trim()
    );

    drop(tear_down);
}

#[test]
#[serial]
fn test_error_auditing_lock_file_when_it_is_missing() {
    let tear_down = init_temp_composer(None, None, None, true);
    let packages: Vec<PackageInterfaceHandle> = vec![get_package("dummy/pkg", "1.0.0")];
    create_installed_json(&packages, &[], true);

    let mut app_tester = get_application_tester();
    let err = app_tester
        .run(
            vec![
                (PhpMixed::from("command"), PhpMixed::from("audit")),
                (PhpMixed::from("--locked"), PhpMixed::from(true)),
            ],
            RunOptions::default(),
        )
        .expect_err("expected UnexpectedValueException");
    assert!(
        err.to_string().contains(
            "Valid composer.json and composer.lock files are required to run this command with --locked"
        ),
        "unexpected error: {err}"
    );

    drop(tear_down);
}

#[test]
#[serial]
#[ignore = "'RefCell already mutably borrowed' panic at crates/shirabe/src/io/io_interface.rs:215 (write_error3) in the locked-audit advisory-fetch path; not in target file"]
fn test_audit_package_with_no_security_vulnerabilities() {
    let tear_down = init_temp_composer(None, None, None, true);
    let packages: Vec<PackageInterfaceHandle> = vec![get_package("dummy/pkg", "1.0.0")];
    create_installed_json(&packages, &[], true);
    create_composer_lock(&packages, &[]);

    let mut app_tester = get_application_tester();
    app_tester
        .run(
            vec![
                (PhpMixed::from("command"), PhpMixed::from("audit")),
                (PhpMixed::from("--locked"), PhpMixed::from(true)),
            ],
            RunOptions::default(),
        )
        .unwrap();

    assert!(
        app_tester
            .get_display()
            .trim()
            .contains("No security vulnerability advisories found."),
        "unexpected display: {}",
        app_tester.get_display()
    );

    drop(tear_down);
}

#[test]
#[serial]
#[ignore = "todo!() at crates/shirabe/src/command/audit_command.rs:285 (AuditCommand::get_packages non-locked branch: installed-repo conversion unported)"]
fn test_audit_package_with_no_dev_option_passed() {
    let tear_down = init_temp_composer(None, None, None, true);
    let dev_package: Vec<PackageInterfaceHandle> = vec![get_package("dummy/pkg", "1.0.0")];
    create_installed_json(&[], &dev_package, true);
    create_composer_lock(&[], &dev_package);

    let mut app_tester = get_application_tester();
    app_tester
        .run(
            vec![
                (PhpMixed::from("command"), PhpMixed::from("audit")),
                (PhpMixed::from("--no-dev"), PhpMixed::from(true)),
            ],
            RunOptions::default(),
        )
        .unwrap();

    assert!(
        app_tester
            .get_display()
            .trim()
            .contains("No packages - skipping audit."),
        "unexpected display: {}",
        app_tester.get_display()
    );

    drop(tear_down);
}