add database tests and solve like 5 bugs
This commit is contained in:
parent
91b98ed6e5
commit
72b586d04d
189
src/database.rs
189
src/database.rs
|
@ -51,7 +51,7 @@ pub trait Database {
|
|||
match (start, end) {
|
||||
(Some(start), Some(end)) => {
|
||||
self.entry_query(
|
||||
"select * from entries where sheet=?1 and start >= ?2 and end <= ?2 order by start asc",
|
||||
"select * from entries where sheet=?1 and start >= ?2 and start <= ?3 order by start asc",
|
||||
&[&sheet, &start, &end]
|
||||
)
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ pub trait Database {
|
|||
}
|
||||
(None, Some(end)) => {
|
||||
self.entry_query(
|
||||
"select * from entries where sheet=?1 and end <= ?2 order by start asc",
|
||||
"select * from entries where sheet=?1 and start <= ?2 order by start asc",
|
||||
&[&sheet, &end]
|
||||
)
|
||||
}
|
||||
|
@ -80,19 +80,19 @@ pub trait Database {
|
|||
match (start, end) {
|
||||
(Some(start), Some(end)) => {
|
||||
self.entry_query(
|
||||
"select * from entries where sheet not like '!_%' escape \"!\" and start >= ?2 and end <= ?2 order by start asc",
|
||||
"select * from entries where sheet not like '!_%' escape \"!\" and start >= ?1 and start <= ?2 order by start asc",
|
||||
&[&start, &end]
|
||||
)
|
||||
}
|
||||
(Some(start), None) => {
|
||||
self.entry_query(
|
||||
"select * from entries where sheet not like '!_%' escape \"!\" and start >= ?2 order by start asc",
|
||||
"select * from entries where sheet not like '!_%' escape \"!\" and start >= ?1 order by start asc",
|
||||
&[&start]
|
||||
)
|
||||
}
|
||||
(None, Some(end)) => {
|
||||
self.entry_query(
|
||||
"select * from entries where sheet not like '!_%' escape \"!\" and end <= ?2 order by start asc",
|
||||
"select * from entries where sheet not like '!_%' escape \"!\" and start <= ?1 order by start asc",
|
||||
&[&end]
|
||||
)
|
||||
}
|
||||
|
@ -109,25 +109,25 @@ pub trait Database {
|
|||
match (start, end) {
|
||||
(Some(start), Some(end)) => {
|
||||
self.entry_query(
|
||||
"select * from entries where start >= ?2 and end <= ?2 order by start asc",
|
||||
"select * from entries where start >= ?1 and start <= ?2 order by start asc",
|
||||
&[&start, &end]
|
||||
)
|
||||
}
|
||||
(Some(start), None) => {
|
||||
self.entry_query(
|
||||
"select * from entries where start >= ?2 order by start asc",
|
||||
"select * from entries where start >= ?1 order by start asc",
|
||||
&[&start]
|
||||
)
|
||||
}
|
||||
(None, Some(end)) => {
|
||||
self.entry_query(
|
||||
"select * from entries where end <= ?2 order by start asc",
|
||||
"select * from entries where start <= ?1 order by start asc",
|
||||
&[&end]
|
||||
)
|
||||
}
|
||||
(None, None) => {
|
||||
self.entry_query(
|
||||
"select * from entries where sheet=?1 order by start asc",
|
||||
"select * from entries order by start asc",
|
||||
&[]
|
||||
)
|
||||
}
|
||||
|
@ -228,3 +228,174 @@ impl Database for SqliteDatabase {
|
|||
Ok(results)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use chrono::TimeZone;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_entries_by_sheet() {
|
||||
let mut db = SqliteDatabase::from_memory().unwrap();
|
||||
db.init().unwrap();
|
||||
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(1, 0, 0), None, None, "XXX".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(1, 0, 0), None, None, "OOO".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(2, 0, 0), None, None, "XXX".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(2, 0, 0), None, None, "OOO".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(3, 0, 0), None, None, "XXX".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(3, 0, 0), None, None, "OOO".into()).unwrap();
|
||||
|
||||
let start = Utc.ymd(2021, 7, 7).and_hms(1, 30, 0);
|
||||
let end = Utc.ymd(2021, 7, 7).and_hms(2, 30, 0);
|
||||
|
||||
// filter by start and end
|
||||
assert_eq!(
|
||||
db.entries_by_sheet("XXX", Some(start), Some(end)).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
]
|
||||
);
|
||||
|
||||
// filter only by start
|
||||
assert_eq!(
|
||||
db.entries_by_sheet("XXX", Some(start), None).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(3, 0, 0),
|
||||
]
|
||||
);
|
||||
|
||||
// filter only by end
|
||||
assert_eq!(
|
||||
db.entries_by_sheet("XXX", None, Some(end)).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(1, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
]
|
||||
);
|
||||
|
||||
// no filter
|
||||
assert_eq!(
|
||||
db.entries_by_sheet("XXX", None, None).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(1, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(3, 0, 0),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_entries_all() {
|
||||
let mut db = SqliteDatabase::from_memory().unwrap();
|
||||
db.init().unwrap();
|
||||
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(1, 0, 0), None, None, "XXX".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(1, 0, 0), None, None, "_OO".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(2, 0, 0), None, None, "XXX".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(2, 0, 0), None, None, "_OO".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(3, 0, 0), None, None, "XXX".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(3, 0, 0), None, None, "_OO".into()).unwrap();
|
||||
|
||||
let start = Utc.ymd(2021, 7, 7).and_hms(1, 30, 0);
|
||||
let end = Utc.ymd(2021, 7, 7).and_hms(2, 30, 0);
|
||||
|
||||
// filter by start and end
|
||||
assert_eq!(
|
||||
db.entries_all_visible(Some(start), Some(end)).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
]
|
||||
);
|
||||
|
||||
// filter only by start
|
||||
assert_eq!(
|
||||
db.entries_all_visible(Some(start), None).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(3, 0, 0),
|
||||
]
|
||||
);
|
||||
|
||||
// filter only by end
|
||||
assert_eq!(
|
||||
db.entries_all_visible(None, Some(end)).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(1, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
]
|
||||
);
|
||||
|
||||
// no filter
|
||||
assert_eq!(
|
||||
db.entries_all_visible(None, None).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(1, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(3, 0, 0),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_entries_full() {
|
||||
let mut db = SqliteDatabase::from_memory().unwrap();
|
||||
db.init().unwrap();
|
||||
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(1, 0, 0), None, None, "XXX".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(1, 0, 0), None, None, "_OO".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(2, 0, 0), None, None, "XXX".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(2, 0, 0), None, None, "_OO".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(3, 0, 0), None, None, "XXX".into()).unwrap();
|
||||
db.entry_insert(Utc.ymd(2021, 7, 7).and_hms(3, 0, 0), None, None, "_OO".into()).unwrap();
|
||||
|
||||
let start = Utc.ymd(2021, 7, 7).and_hms(1, 30, 0);
|
||||
let end = Utc.ymd(2021, 7, 7).and_hms(2, 30, 0);
|
||||
|
||||
// filter by start and end
|
||||
assert_eq!(
|
||||
db.entries_full(Some(start), Some(end)).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
]
|
||||
);
|
||||
|
||||
// filter only by start
|
||||
assert_eq!(
|
||||
db.entries_full(Some(start), None).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(3, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(3, 0, 0),
|
||||
]
|
||||
);
|
||||
|
||||
// filter only by end
|
||||
assert_eq!(
|
||||
db.entries_full(None, Some(end)).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(1, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(1, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
]
|
||||
);
|
||||
|
||||
// no filter
|
||||
assert_eq!(
|
||||
db.entries_full(None, None).unwrap().into_iter().map(|e| e.start).collect::<Vec<_>>(),
|
||||
vec![
|
||||
Utc.ymd(2021, 7, 7).and_hms(1, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(1, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(2, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(3, 0, 0),
|
||||
Utc.ymd(2021, 7, 7).and_hms(3, 0, 0),
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue