aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/util/http_downloader_test.rs
blob: 59807a9635f95e67ba291873a2a3f35c963e13cf (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
//! ref: composer/tests/Composer/Test/Util/HttpDownloaderTest.php

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

use indexmap::IndexMap;
use shirabe::io::IOInterface;
use shirabe::io::buffer_io::BufferIO;
use shirabe::util::http_downloader::HttpDownloader;
use shirabe_external_packages::symfony::console::output::output_interface::VERBOSITY_NORMAL;
use shirabe_php_shim::{PHP_EOL, PhpMixed};

#[test]
#[ignore = "asserts IOInterface mock ->expects()->method('setAuthentication')->with(...) and performs a live HTTP get; no mock infrastructure exists"]
fn test_capture_authentication_params_from_url() {
    todo!()
}

#[test]
fn test_output_warnings() {
    let io: Rc<RefCell<BufferIO>> = Rc::new(RefCell::new(
        BufferIO::new(String::new(), VERBOSITY_NORMAL, None).unwrap(),
    ));
    let io_dyn: Rc<RefCell<dyn IOInterface>> = io.clone();

    HttpDownloader::output_warnings(io_dyn.clone(), "$URL", &IndexMap::new()).unwrap();
    assert_eq!("", io.borrow().get_output());

    let mut data: IndexMap<String, PhpMixed> = IndexMap::new();
    data.insert(
        "warning".to_string(),
        PhpMixed::String("old warning msg".to_string()),
    );
    data.insert(
        "warning-versions".to_string(),
        PhpMixed::String(">=2.0".to_string()),
    );
    data.insert(
        "info".to_string(),
        PhpMixed::String("old info msg".to_string()),
    );
    data.insert(
        "info-versions".to_string(),
        PhpMixed::String(">=2.0".to_string()),
    );

    let mut warning_should_not = IndexMap::new();
    warning_should_not.insert(
        "message".to_string(),
        PhpMixed::String("should not appear".to_string()),
    );
    warning_should_not.insert("versions".to_string(), PhpMixed::String("<2.2".to_string()));
    let mut warning_visible = IndexMap::new();
    warning_visible.insert(
        "message".to_string(),
        PhpMixed::String("visible warning".to_string()),
    );
    warning_visible.insert(
        "versions".to_string(),
        PhpMixed::String(">=2.2-dev".to_string()),
    );
    data.insert(
        "warnings".to_string(),
        PhpMixed::List(vec![
            PhpMixed::Array(warning_should_not),
            PhpMixed::Array(warning_visible),
        ]),
    );

    let mut info_should_not = IndexMap::new();
    info_should_not.insert(
        "message".to_string(),
        PhpMixed::String("should not appear".to_string()),
    );
    info_should_not.insert("versions".to_string(), PhpMixed::String("<2.2".to_string()));
    let mut info_visible = IndexMap::new();
    info_visible.insert(
        "message".to_string(),
        PhpMixed::String("visible info".to_string()),
    );
    info_visible.insert(
        "versions".to_string(),
        PhpMixed::String(">=2.2-dev".to_string()),
    );
    data.insert(
        "infos".to_string(),
        PhpMixed::List(vec![
            PhpMixed::Array(info_should_not),
            PhpMixed::Array(info_visible),
        ]),
    );

    HttpDownloader::output_warnings(io_dyn.clone(), "$URL", &data).unwrap();

    // the <info> tag are consumed by the OutputFormatter, but not <warning> as that is not a default output format
    assert_eq!(
        format!(
            "<warning>Warning from $URL: old warning msg</warning>{eol}\
             Info from $URL: old info msg{eol}\
             <warning>Warning from $URL: visible warning</warning>{eol}\
             Info from $URL: visible info{eol}",
            eol = PHP_EOL
        ),
        io.borrow().get_output()
    );
}