aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/util/config_validator_test.rs
blob: 4f255353b8f3d96c901203f222c96f685cdba050 (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
//! ref: composer/tests/Composer/Test/Util/ConfigValidatorTest.php

use std::cell::RefCell;
use std::rc::Rc;

use shirabe::io::io_interface::IOInterface;
use shirabe::io::null_io::NullIO;
use shirabe::package::loader::validating_array_loader::ValidatingArrayLoader;
use shirabe::util::config_validator::ConfigValidator;

fn fixture(name: &str) -> String {
    format!(
        "{}/../../composer/tests/Composer/Test/Util/Fixtures/{}",
        env!("CARGO_MANIFEST_DIR"),
        name
    )
}

fn validate(file: &str) -> Vec<String> {
    let io: Rc<RefCell<dyn IOInterface>> = Rc::new(RefCell::new(NullIO::new()));
    let config_validator = ConfigValidator::new(io);
    let (_, _, warnings) = config_validator.validate(
        file,
        ValidatingArrayLoader::CHECK_ALL,
        ConfigValidator::CHECK_VERSION,
    );
    warnings
}

/// Test ConfigValidator warns on commit reference
#[test]
fn test_config_validator_commit_ref_warning() {
    let warnings = validate(&fixture("composer_commit-ref.json"));

    assert!(warnings.contains(
        &"The package \"some/package\" is pointing to a commit-ref, this is bad practice and can cause unforeseen issues.".to_string()
    ));
}

#[test]
fn test_config_validator_warns_on_script_description_for_nonexistent_script() {
    let warnings = validate(&fixture("composer_scripts-descriptions.json"));

    assert!(
        warnings.contains(
            &"Description for non-existent script \"phpcsxxx\" found in \"scripts-descriptions\""
                .to_string()
        )
    );
}

#[test]
fn test_config_validator_warns_on_script_alias_for_nonexistent_script() {
    let warnings = validate(&fixture("composer_scripts-aliases.json"));

    assert!(warnings.contains(
        &"Aliases for non-existent script \"phpcsxxx\" found in \"scripts-aliases\"".to_string()
    ));
}

#[test]
#[ignore]
fn test_config_validator_warns_on_unnecessary_provide_replace() {
    let warnings = validate(&fixture("composer_provide-replace-requirements.json"));

    assert!(warnings.contains(
        &"The package a/a in require is also listed in provide which satisfies the requirement. Remove it from provide if you wish to install it.".to_string()
    ));
    assert!(warnings.contains(
        &"The package b/b in require is also listed in replace which satisfies the requirement. Remove it from replace if you wish to install it.".to_string()
    ));
    assert!(warnings.contains(
        &"The package c/c in require-dev is also listed in provide which satisfies the requirement. Remove it from provide if you wish to install it.".to_string()
    ));
}