Talon/tests/fixtures/mod.rs
2023-04-02 18:19:34 +02:00

308 lines
8.9 KiB
Rust

use std::{collections::BTreeMap, fs::File, ops::Deref};
use hex_literal::hex;
use path_macro::path;
use rstest::fixture;
use temp_testdir::TempDir;
use time::macros::datetime;
use talon::{
db::{
model::{Version, Website},
Db,
},
Talon,
};
pub const SUBDOMAIN_1: &str = "-";
pub const SUBDOMAIN_2: &str = "spotify-gender-ex";
pub const SUBDOMAIN_3: &str = "rustypipe";
pub const SUBDOMAIN_4: &str = "spa";
pub const HASH_1_1_INDEX: [u8; 32] =
hex!("3b5f6bad5376897435def176d0fe77e5b9b4f0deafc7491fc27262650744ad68");
pub const HASH_1_1_STYLE: [u8; 32] =
hex!("356f131c825fbf604797c7e9c85352549d81db8af91fee834016d075110af026");
pub const HASH_1_2_INDEX: [u8; 32] =
hex!("a44816e6c3b650bdf88e6532659ba07ef187c2113ae311da9709e056aec8eadb");
pub const HASH_1_2_STYLE: [u8; 32] =
hex!("356f131c825fbf604797c7e9c85352549d81db8af91fee834016d075110af026");
pub const HASH_2_1_INDEX: [u8; 32] =
hex!("6c5d37546616519e8973be51515b8a90898b4675f7b6d01f2d891edb686408a2");
pub const HASH_2_1_STYLE: [u8; 32] =
hex!("fc825b409a49724af8f5b3c4ad15e175e68095ea746237a7b46152d3f383f541");
pub const HASH_3_1_INDEX: [u8; 32] =
hex!("cc31423924cf1f124750825861ab1ccc675e755921fc2fa111c0a98e8c346a5e");
pub const HASH_3_1_STYLE: [u8; 32] =
hex!("ee4fc4911a56e627c047a29ba3085131939d8d487759b9149d42aaab89ce8993");
pub const HASH_3_1_PAGE2: [u8; 32] =
hex!("be4f409ca0adcb21cdc7130cde63031718406726f889ef97ac8870c90b330a75");
pub const HASH_SPA_INDEX: [u8; 32] =
hex!("90d454dd999b52486902e845f748ce7510a1fc8404421c8f44dadccc5b4b8e1d");
pub const HASH_SPA_FALLBACK: [u8; 32] =
hex!("4ee0d3f7522f620a2a69b39b7443f8fe65029e1324cefaf797b8cad2b223cf7b");
pub const API_KEY_ROOT: &str = "c32ff286c8ac1c3102625badf38ffd251ae0c4a56079d8ba490f320af63f1f47";
pub const API_KEY_2: &str = "21bdac19ffd22870d561b1d55b35eddd9029497107edb7b926aa3e7856bb409b";
// pub const API_KEY_3: &str = "04e99561e3824f387a217d141d2a3b46375de6864afbedf9c9a2cc102bc946a4";
pub const API_KEY_RO: &str = "48691ad9f42bb12e61e259b5e90dc941a293cfae11af18c9e6557f92557f0086";
pub struct DbTest {
db: Db,
_temp: TempDir,
}
impl Deref for DbTest {
type Target = Db;
fn deref(&self) -> &Self::Target {
&self.db
}
}
#[fixture]
pub fn db_empty() -> DbTest {
let temp = temp_testdir::TempDir::default();
let db = Db::new(&temp).unwrap();
DbTest { db, _temp: temp }
}
fn insert_websites(db: &Db) {
db.insert_website(
SUBDOMAIN_1,
&Website {
name: "ThetaDev".to_owned(),
created_at: datetime!(2023-02-18 16:30 +0),
updated_at: datetime!(2023-02-18 16:30 +0),
latest_version: Some(2),
color: Some(2068974),
visibility: talon::model::Visibility::Featured,
..Default::default()
},
)
.unwrap();
db.insert_website(
SUBDOMAIN_2,
&Website {
name: "Spotify-Gender-Ex".to_owned(),
created_at: datetime!(2023-02-18 16:30 +0),
updated_at: datetime!(2023-02-18 16:30 +0),
latest_version: Some(1),
color: Some(1947988),
visibility: talon::model::Visibility::Featured,
source_url: Some("https://github.com/Theta-Dev/Spotify-Gender-Ex".to_owned()),
source_icon: Some(talon::model::SourceIcon::Github),
..Default::default()
},
)
.unwrap();
db.insert_website(
SUBDOMAIN_3,
&Website {
name: "RustyPipe".to_owned(),
created_at: datetime!(2023-02-20 18:30 +0),
updated_at: datetime!(2023-02-20 18:30 +0),
latest_version: Some(1),
color: Some(7943647),
visibility: talon::model::Visibility::Featured,
source_url: Some("https://code.thetadev.de/ThetaDev/rustypipe".to_owned()),
source_icon: Some(talon::model::SourceIcon::Gitea),
..Default::default()
},
)
.unwrap();
db.insert_website(
SUBDOMAIN_4,
&Website {
name: "SvelteKit SPA".to_owned(),
created_at: datetime!(2023-03-03 22:00 +0),
updated_at: datetime!(2023-03-03 22:00 +0),
latest_version: Some(1),
color: Some(16727552),
visibility: talon::model::Visibility::Hidden,
..Default::default()
},
)
.unwrap();
let mut v1_data = BTreeMap::new();
v1_data.insert("Version".to_owned(), "v0.1.0".to_owned());
v1_data.insert(
"Deployed by".to_owned(),
"https://github.com/Theta-Dev/Talon/actions/runs/1352014628".to_owned(),
);
assert_eq!(
db.insert_version(
SUBDOMAIN_1,
&Version {
created_at: datetime!(2023-02-18 16:30 +0),
data: v1_data,
..Default::default()
},
)
.unwrap(),
1
);
let mut v2_data = BTreeMap::new();
v2_data.insert("Version".to_owned(), "v0.1.1".to_owned());
v2_data.insert(
"Deployed by".to_owned(),
"https://github.com/Theta-Dev/Talon/actions/runs/1354755231".to_owned(),
);
assert_eq!(
db.insert_version(
SUBDOMAIN_1,
&Version {
created_at: datetime!(2023-02-18 16:52 +0),
data: v2_data,
..Default::default()
},
)
.unwrap(),
2
);
assert_eq!(
db.insert_version(
SUBDOMAIN_2,
&Version {
created_at: datetime!(2023-02-18 16:30 +0),
..Default::default()
},
)
.unwrap(),
1
);
assert_eq!(
db.insert_version(
SUBDOMAIN_3,
&Version {
created_at: datetime!(2023-02-20 18:30 +0),
..Default::default()
},
)
.unwrap(),
1
);
assert_eq!(
db.insert_version(
SUBDOMAIN_4,
&Version {
created_at: datetime!(2023-03-03 22:00 +0),
fallback: Some("200.html".to_owned()),
spa: true,
..Default::default()
},
)
.unwrap(),
1
);
}
#[fixture]
pub fn db() -> DbTest {
let temp = temp_testdir::TempDir::default();
let db = Db::new(&temp).unwrap();
insert_websites(&db);
db.insert_file(SUBDOMAIN_1, 1, "index.html", &HASH_1_1_INDEX)
.unwrap();
db.insert_file(SUBDOMAIN_1, 1, "style.css", &HASH_1_1_STYLE)
.unwrap();
db.insert_file(SUBDOMAIN_1, 2, "index.html", &HASH_1_2_INDEX)
.unwrap();
db.insert_file(SUBDOMAIN_1, 2, "assets/style.css", &HASH_1_2_STYLE)
.unwrap();
db.insert_file(
SUBDOMAIN_1,
2,
"assets/image.jpg",
&hex!("901d291a47a8a9b55c06f84e5e5f82fd2dcee65cac1406d6e878b805d45c1e93"),
)
.unwrap();
db.insert_file(
SUBDOMAIN_1,
2,
"assets/test.js",
&hex!("b6ed35f5ae339a35a8babb11a91ff90c1a62ef250d30fa98e59500e8dbb896fa"),
)
.unwrap();
db.insert_file(
SUBDOMAIN_1,
2,
"data/example.txt",
&hex!("bae6bdae8097c24f9a99028e04bfc8d5e0a0c318955316db0e7b955def9c1dbb"),
)
.unwrap();
db.insert_file(SUBDOMAIN_2, 1, "index.html", &HASH_2_1_INDEX)
.unwrap();
db.insert_file(SUBDOMAIN_2, 1, "gex_style.css", &HASH_2_1_STYLE)
.unwrap();
db.insert_file(SUBDOMAIN_3, 1, "index.html", &HASH_3_1_INDEX)
.unwrap();
db.insert_file(SUBDOMAIN_3, 1, "rp_style.css", &HASH_3_1_STYLE)
.unwrap();
db.insert_file(SUBDOMAIN_3, 1, "page2/index.html", &HASH_3_1_PAGE2)
.unwrap();
DbTest { db, _temp: temp }
}
pub struct TalonTest {
talon: Talon,
pub temp: TempDir,
}
impl Deref for TalonTest {
type Target = Talon;
fn deref(&self) -> &Self::Target {
&self.talon
}
}
#[fixture]
pub fn tln() -> TalonTest {
let temp = temp_testdir::TempDir::default();
std::fs::copy(
path!("tests" / "testfiles" / "config" / "config_test.toml"),
path!(temp / "config.toml"),
)
.unwrap();
let talon = Talon::new(&temp).unwrap();
insert_websites(&talon.db);
talon
.storage
.insert_dir(path!("tests" / "testfiles" / "ThetaDev0"), SUBDOMAIN_1, 1)
.unwrap();
talon
.storage
.insert_dir(path!("tests" / "testfiles" / "ThetaDev1"), SUBDOMAIN_1, 2)
.unwrap();
talon
.storage
.insert_dir(path!("tests" / "testfiles" / "GenderEx"), SUBDOMAIN_2, 1)
.unwrap();
talon
.storage
.insert_dir(path!("tests" / "testfiles" / "RustyPipe"), SUBDOMAIN_3, 1)
.unwrap();
talon
.storage
.insert_tgz_archive(
File::open(path!("tests" / "testfiles" / "archive" / "spa.tar.gz")).unwrap(),
SUBDOMAIN_4,
1,
)
.unwrap();
TalonTest { talon, temp }
}