-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwaifu_pics.rs
80 lines (69 loc) · 2.55 KB
/
waifu_pics.rs
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
#[cfg(test)]
mod test {
use anime_grubber::{
agent::Agent,
agents::waifu_pics::{Categories, Waifu, SFW},
gen_enum, url,
};
use std::sync::LazyLock;
use tracing::info;
static TS: LazyLock<()> = LazyLock::new(|| {
use tracing::Level;
use tracing_subscriber::FmtSubscriber;
tracing::subscriber::set_global_default(
FmtSubscriber::builder()
.with_max_level(Level::DEBUG)
.pretty()
.without_time()
.finish(),
)
.expect("Fail to set global default subscriber");
});
#[tokio::test]
async fn check_solo() -> anyhow::Result<()> {
LazyLock::force(&TS);
let instanse = Waifu::new(Categories::SFW(SFW::Dance));
let image = instanse.get().await?;
info!("{image}");
Ok(())
}
#[tokio::test]
async fn check_many() -> anyhow::Result<()> {
LazyLock::force(&TS);
let instanse = Waifu::new(Categories::SFW(SFW::Dance));
let images = instanse.get_many().await?;
assert_eq!(images.len(), 30);
info!("{:#?}", images);
Ok(())
}
#[test]
fn url() -> anyhow::Result<()> {
const SOLO_URL: &str = "https://api.waifu.pics";
let url = url!(SOLO_URL, "Test", "tseT");
let expected = "https://api.waifu.pics/test/tset";
assert_eq!(&url, expected);
Ok(())
}
#[test]
fn deep_nested_enum() {
gen_enum!(Level5, [Five, Six]);
gen_enum!(Level4, [Fourth(Level5)]);
gen_enum!(Level3, [Third(Level4)]);
gen_enum!(Level2, [Second(Level3)]);
gen_enum!(Level1, [First(Level2)]);
let deep = Level1::First(Level2::Second(Level3::Third(Level4::Fourth(Level5::Five))));
// Проверяем прямое преобразование каждого уровня
assert_eq!(<&str>::from(&deep), "First");
// Проверяем получение самого глубокого значения
assert_eq!(deep.deepest_str(), "Five");
// Проверяем каждый уровень через деструктуризацию
let Level1::First(level2) = deep;
assert_eq!(<&str>::from(&level2), "Second");
let Level2::Second(level3) = level2;
assert_eq!(<&str>::from(&level3), "Third");
let Level3::Third(level4) = level3;
assert_eq!(<&str>::from(&level4), "Fourth");
let Level4::Fourth(level5) = level4;
assert_eq!(<&str>::from(&level5), "Five");
}
}