Add a unit test to test unit testing

This commit is contained in:
Lennart
2024-02-27 17:35:30 +01:00
parent f8ba0c3600
commit 128e8c5531
3 changed files with 257 additions and 0 deletions

64
Cargo.lock generated
View File

@@ -817,6 +817,21 @@ dependencies = [
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "futures"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
dependencies = [
"futures-channel",
"futures-core",
"futures-executor",
"futures-io",
"futures-sink",
"futures-task",
"futures-util",
]
[[package]] [[package]]
name = "futures-channel" name = "futures-channel"
version = "0.3.30" version = "0.3.30"
@@ -884,12 +899,19 @@ version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
[[package]]
name = "futures-timer"
version = "3.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24"
[[package]] [[package]]
name = "futures-util" name = "futures-util"
version = "0.3.30" version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
dependencies = [ dependencies = [
"futures-channel",
"futures-core", "futures-core",
"futures-io", "futures-io",
"futures-macro", "futures-macro",
@@ -930,6 +952,12 @@ version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
[[package]]
name = "glob"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]] [[package]]
name = "h2" name = "h2"
version = "0.3.24" version = "0.3.24"
@@ -1561,6 +1589,12 @@ version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "relative-path"
version = "1.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e898588f33fdd5b9420719948f9f2a32c922a246964576f71ba7f24f80610fbc"
[[package]] [[package]]
name = "roxmltree" name = "roxmltree"
version = "0.19.0" version = "0.19.0"
@@ -1587,6 +1621,35 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "rstest"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199"
dependencies = [
"futures",
"futures-timer",
"rstest_macros",
"rustc_version",
]
[[package]]
name = "rstest_macros"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605"
dependencies = [
"cfg-if",
"glob",
"proc-macro2",
"quote",
"regex",
"relative-path",
"rustc_version",
"syn 2.0.50",
"unicode-ident",
]
[[package]] [[package]]
name = "rustc-demangle" name = "rustc-demangle"
version = "0.1.23" version = "0.1.23"
@@ -1691,6 +1754,7 @@ dependencies = [
"ical", "ical",
"lazy_static", "lazy_static",
"regex", "regex",
"rstest",
"serde", "serde",
"sha2", "sha2",
"sqlx", "sqlx",

View File

@@ -27,3 +27,4 @@ ical = { version = "0.10", features = ["generator", "serde"] }
chrono = "0.4" chrono = "0.4"
regex = "1.10" regex = "1.10"
lazy_static = "1.4" lazy_static = "1.4"
rstest = "0.18.2"

View File

@@ -0,0 +1,192 @@
use rstest::rstest;
use rustical_store::calendar::CalendarStore;
use rustical_store::sqlite_store::create_test_store;
use rustical_store::toml_store::TomlCalendarStore;
const TIMEZONE: &str = "BEGIN:VCALENDAR\r
BEGIN:VTIMEZONE\r
TZID:Europe/Berlin\r
LAST-MODIFIED:20230104T023643Z\r
TZURL:https://www.tzurl.org/zoneinfo/Europe/Berlin\r
X-LIC-LOCATION:Europe/Berlin\r
X-PROLEPTIC-TZNAME:LMT\r
BEGIN:STANDARD\r
TZNAME:CET\r
TZOFFSETFROM:+005328\r
TZOFFSETTO:+0100\r
DTSTART:18930401T000632\r
END:STANDARD\r
BEGIN:DAYLIGHT\r
TZNAME:CEST\r
TZOFFSETFROM:+0100\r
TZOFFSETTO:+0200\r
DTSTART:19160430T230000\r
RDATE:19400401T020000\r
RDATE:19430329T020000\r
RDATE:19460414T020000\r
RDATE:19470406T030000\r
RDATE:19480418T020000\r
RDATE:19490410T020000\r
RDATE:19800406T020000\r
END:DAYLIGHT\r
BEGIN:STANDARD\r
TZNAME:CET\r
TZOFFSETFROM:+0200\r
TZOFFSETTO:+0100\r
DTSTART:19161001T010000\r
RDATE:19421102T030000\r
RDATE:19431004T030000\r
RDATE:19441002T030000\r
RDATE:19451118T030000\r
RDATE:19461007T030000\r
END:STANDARD\r
BEGIN:DAYLIGHT\r
TZNAME:CEST\r
TZOFFSETFROM:+0100\r
TZOFFSETTO:+0200\r
DTSTART:19170416T020000\r
RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYMONTH=4;BYDAY=3MO\r
END:DAYLIGHT\r
BEGIN:STANDARD\r
TZNAME:CET\r
TZOFFSETFROM:+0200\r
TZOFFSETTO:+0100\r
DTSTART:19170917T030000\r
RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYMONTH=9;BYDAY=3MO\r
END:STANDARD\r
BEGIN:DAYLIGHT\r
TZNAME:CEST\r
TZOFFSETFROM:+0100\r
TZOFFSETTO:+0200\r
DTSTART:19440403T020000\r
RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYMONTH=4;BYDAY=1MO\r
END:DAYLIGHT\r
BEGIN:DAYLIGHT\r
TZNAME:CEMT\r
TZOFFSETFROM:+0200\r
TZOFFSETTO:+0300\r
DTSTART:19450524T010000\r
RDATE:19470511T020000\r
END:DAYLIGHT\r
BEGIN:DAYLIGHT\r
TZNAME:CEST\r
TZOFFSETFROM:+0300\r
TZOFFSETTO:+0200\r
DTSTART:19450924T030000\r
RDATE:19470629T030000\r
END:DAYLIGHT\r
BEGIN:STANDARD\r
TZNAME:CET\r
TZOFFSETFROM:+0100\r
TZOFFSETTO:+0100\r
DTSTART:19460101T000000\r
RDATE:19800101T000000\r
END:STANDARD\r
BEGIN:STANDARD\r
TZNAME:CET\r
TZOFFSETFROM:+0200\r
TZOFFSETTO:+0100\r
DTSTART:19471005T030000\r
RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYMONTH=10;BYDAY=1SU\r
END:STANDARD\r
BEGIN:STANDARD\r
TZNAME:CET\r
TZOFFSETFROM:+0200\r
TZOFFSETTO:+0100\r
DTSTART:19800928T030000\r
RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYMONTH=9;BYDAY=-1SU\r
END:STANDARD\r
BEGIN:DAYLIGHT\r
TZNAME:CEST\r
TZOFFSETFROM:+0100\r
TZOFFSETTO:+0200\r
DTSTART:19810329T020000\r
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r
END:DAYLIGHT\r
BEGIN:STANDARD\r
TZNAME:CET\r
TZOFFSETFROM:+0200\r
TZOFFSETTO:+0100\r
DTSTART:19961027T030000\r
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r
END:STANDARD\r
END:VTIMEZONE\r
END:VCALENDAR\r
";
const EVENT: &str = "BEGIN:VCALENDAR\r
CALSCALE:GREGORIAN\r
PRODID:-//Ximian//NONSGML Evolution Calendar//EN\r
VERSION:2.0\r
BEGIN:VTIMEZONE\r
TZID:Europe/Berlin\r
X-LIC-LOCATION:Europe/Berlin\r
BEGIN:DAYLIGHT\r
TZNAME:CEST\r
TZOFFSETFROM:+0100\r
TZOFFSETTO:+0200\r
DTSTART:19810329T020000\r
RRULE:FREQ=YEARLY;UNTIL=20370329T010000Z;BYDAY=-1SU;BYMONTH=3\r
END:DAYLIGHT\r
BEGIN:STANDARD\r
TZNAME:CET\r
TZOFFSETFROM:+0200\r
TZOFFSETTO:+0100\r
DTSTART:19961027T030000\r
RRULE:FREQ=YEARLY;UNTIL=20361026T010000Z;BYDAY=-1SU;BYMONTH=10\r
END:STANDARD\r
END:VTIMEZONE\r
BEGIN:VEVENT\r
UID:67d830c3e681950b6a12f7c287b316269a19fcf7\r
DTSTAMP:20230831T102923Z\r
DTSTART;TZID=Europe/Berlin:20230829T043000\r
DTEND;TZID=Europe/Berlin:20230829T045500\r
SEQUENCE:2\r
SUMMARY:asdjlk\r
TRANSP:OPAQUE\r
CLASS:PUBLIC\r
CREATED:20230831T103040Z\r
LAST-MODIFIED:20230831T103040Z\r
END:VEVENT\r
END:VCALENDAR\r
";
#[tokio::test]
async fn test_init_sqlite() {
let store = create_test_store().await.unwrap();
store.get_events("asd").await.unwrap();
}
#[rstest]
#[case::toml(async {TomlCalendarStore::test()})]
#[case::sqlite(async {create_test_store().await.unwrap() })]
#[tokio::test]
async fn test_create_event<CS: CalendarStore>(
#[future]
#[case]
store: CS,
) {
let mut store = store.await;
store
.insert_calendar(
"test".to_owned(),
rustical_store::calendar::Calendar {
id: "test".to_owned(),
name: Some("Test Calendar".to_owned()),
owner: "Test User".to_owned(),
timezone: Some(TIMEZONE.to_owned()),
..Default::default() // timezone: TIMEZONE.to_owned(),
},
)
.await
.unwrap();
store
.upsert_event("test".to_owned(), "asd".to_owned(), EVENT.to_owned())
.await
.unwrap();
let event = store.get_event("test", "asd").await.unwrap();
assert_eq!(event.get_ics(), EVENT);
assert_eq!(event.get_uid(), "asd");
}