use http::StatusCode;
use raspa::request::{Request, RequestBase};
use raspa::selector::{Selector, SelectorBase};

#[test]
fn plain_text_selector() {
    let html = "
<html>
  <body>
    <h1>hello world</h1>
    <p id='text'>good bye</p>
    <a>simple text</a>
  </body>
</html>
"
    .to_string();
    let sel = Selector::from_html(html);
    assert_eq!(sel.css::<Selector>("h1")[0].html(), "<h1>hello world</h1>");
    assert_eq!(sel.css::<Selector>("#text")[0].content(), "good bye");
    assert_eq!(
        sel.css_once::<Selector>("body > a").unwrap().content(),
        "simple text"
    );
}

#[test]
fn simple_request() {
    let req: Request = RequestBase::new("https://httpbin.org/").unwrap();
    let resp = req.launch();
    assert_eq!(resp.status_code, StatusCode::OK);
    assert!(resp.css::<Selector>("h2")[0].html().contains("httpbin.org"));
}

#[test]
fn complex_selectors() {
    let html = "
<html>
  <body>
    <p id='text'>good bye</p>
    <a href='http://google.com'>simple text</a>
    <ul>
        <li class='item' id='item-1'>1</li>
        <li class='item' id='item-2'>2</li>
        <li class='item' id='item-3'>3</li>
    </ul>
    <div>
        <a href='#'>non link</a>
        <a href='http://localhost'>link</a>
        <a href='#'>non link</a>
    </div>
  </body>
</html>
"
    .to_string();
    let sel = Selector::from_html(html);
    assert_eq!(
        sel.css_once::<Selector>("p").unwrap().attr("id").unwrap(),
        "text"
    );
    assert_eq!(
        sel.css::<Selector>("a")[0].attr("href").unwrap(),
        "http://google.com"
    );
    for node in sel.css::<Selector>("ul li").iter() {
        let text = node.content();
        assert_eq!(node.attr("class").unwrap(), "item");
        assert!(node.attr("id").unwrap().contains(&text));
    }

    let div = sel.css_once::<Selector>("div").unwrap();
    for node in div.css::<Selector>("a").iter() {
        if node.attr("href").unwrap() == "#" {
            assert_eq!(node.content(), "non link");
        } else {
            assert_eq!(node.content(), "link");
        }
    }
}