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) {
|
match (start, end) {
|
||||||
(Some(start), Some(end)) => {
|
(Some(start), Some(end)) => {
|
||||||
self.entry_query(
|
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]
|
&[&sheet, &start, &end]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ pub trait Database {
|
||||||
}
|
}
|
||||||
(None, Some(end)) => {
|
(None, Some(end)) => {
|
||||||
self.entry_query(
|
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]
|
&[&sheet, &end]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -80,19 +80,19 @@ pub trait Database {
|
||||||
match (start, end) {
|
match (start, end) {
|
||||||
(Some(start), Some(end)) => {
|
(Some(start), Some(end)) => {
|
||||||
self.entry_query(
|
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]
|
&[&start, &end]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
(Some(start), None) => {
|
(Some(start), None) => {
|
||||||
self.entry_query(
|
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]
|
&[&start]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
(None, Some(end)) => {
|
(None, Some(end)) => {
|
||||||
self.entry_query(
|
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]
|
&[&end]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -109,25 +109,25 @@ pub trait Database {
|
||||||
match (start, end) {
|
match (start, end) {
|
||||||
(Some(start), Some(end)) => {
|
(Some(start), Some(end)) => {
|
||||||
self.entry_query(
|
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]
|
&[&start, &end]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
(Some(start), None) => {
|
(Some(start), None) => {
|
||||||
self.entry_query(
|
self.entry_query(
|
||||||
"select * from entries where start >= ?2 order by start asc",
|
"select * from entries where start >= ?1 order by start asc",
|
||||||
&[&start]
|
&[&start]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
(None, Some(end)) => {
|
(None, Some(end)) => {
|
||||||
self.entry_query(
|
self.entry_query(
|
||||||
"select * from entries where end <= ?2 order by start asc",
|
"select * from entries where start <= ?1 order by start asc",
|
||||||
&[&end]
|
&[&end]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
(None, None) => {
|
(None, None) => {
|
||||||
self.entry_query(
|
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)
|
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