aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/dependency_resolver/rule_test.rs
blob: 9806820805fcf4f87a61eb9e9dccb6a1151a8a7c (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
//! ref: composer/tests/Composer/Test/DependencyResolver/RuleTest.php

use shirabe::dependency_resolver::{GenericRule, RULE_ROOT_REQUIRE, ReasonData, Rule, RuleSet};
use shirabe_semver::constraint::MatchAllConstraint;

fn root_require_reason() -> ReasonData {
    ReasonData::RootRequire {
        package_name: String::new(),
        constraint: MatchAllConstraint::new(None).into(),
    }
}

fn generic_rule(literals: Vec<i64>) -> Rule {
    Rule::Generic(GenericRule::new(
        literals,
        RULE_ROOT_REQUIRE,
        root_require_reason(),
    ))
}

#[test]
#[ignore = "Rule::get_hash reaches shirabe_php_shim::hash_raw, which is todo!()"]
fn test_get_hash() {
    todo!()
}

#[test]
fn test_equals_for_rules_with_different_hashes() {
    let rule = generic_rule(vec![1, 2]);
    let rule2 = generic_rule(vec![1, 3]);

    assert!(!rule.equals(&rule2));
}

#[test]
fn test_equals_for_rules_with_differ_literals_quantity() {
    let rule = generic_rule(vec![1, 12]);
    let rule2 = generic_rule(vec![1]);

    assert!(!rule.equals(&rule2));
}

#[test]
fn test_equals_for_rules_with_same_literals() {
    let rule = generic_rule(vec![1, 12]);
    let rule2 = generic_rule(vec![1, 12]);

    assert!(rule.equals(&rule2));
}

#[test]
fn test_set_and_get_type() {
    let mut rule = generic_rule(vec![]);
    rule.set_type(RuleSet::TYPE_REQUEST);

    assert_eq!(RuleSet::TYPE_REQUEST, rule.get_type());
}

#[test]
fn test_enable() {
    let mut rule = generic_rule(vec![]);
    rule.disable().unwrap();
    rule.enable();

    assert!(rule.is_enabled());
    assert!(!rule.is_disabled());
}

#[test]
fn test_disable() {
    let mut rule = generic_rule(vec![]);
    rule.enable();
    rule.disable().unwrap();

    assert!(rule.is_disabled());
    assert!(!rule.is_enabled());
}

#[test]
fn test_is_assertions() {
    let rule = generic_rule(vec![1, 12]);
    let rule2 = generic_rule(vec![1]);

    assert!(!rule.is_assertion());
    assert!(rule2.is_assertion());
}

// In PHP this mocks RepositorySet and Request and passes a Link reason to build the
// pretty string. The mocked collaborators cannot be reproduced here.
#[test]
#[ignore = "getPrettyString needs mocked RepositorySet and Request; mocking is not available"]
fn test_pretty_string() {
    todo!()
}