implement t sheet

This commit is contained in:
Abraham Toriz 2021-07-23 20:37:21 -05:00
parent 325f53e6d4
commit e948f87af8
No known key found for this signature in database
GPG Key ID: D5B4A746DB5DD42A
3 changed files with 91 additions and 10 deletions

View File

@ -158,12 +158,6 @@ mod tests {
);
}
#[test]
fn correctly_use_utc_if_new_version() {
assert!(false, "start with a newly created database");
assert!(false, "correctly display times in local timezone");
}
#[test]
fn filter_by_start() {
let args = Args {

View File

@ -36,9 +36,35 @@ impl<'a> Command<'a> for SheetCommand {
O: Write,
E: Write,
{
if let Some(_sheet) = args.sheet {
if let Some(sheet) = args.sheet {
let current_sheet = db.current_sheet()?.unwrap_or("default".into());
// sheet given, switch to it
unimplemented!()
if sheet == "-" {
if let Some(move_to) = db.last_sheet()? {
db.set_last_sheet(&current_sheet)?;
db.set_current_sheet(&move_to)?;
writeln!(out, "Switching to sheet '{}'", move_to)?;
Ok(())
} else {
writeln!(out, "No previous sheet to move to. Staying on '{}'.\nHint: remember that giving - (a dash) as argument to t sheet switches to the last active sheet", current_sheet)?;
Ok(())
}
} else {
if sheet == current_sheet {
writeln!(out, "Already on sheet '{}'", sheet)?;
} else {
db.set_last_sheet(&current_sheet)?;
db.set_current_sheet(&sheet)?;
writeln!(out, "Switching to sheet '{}'", sheet)?;
}
Ok(())
}
} else {
// call list
ListCommand::handle(Default::default(), db, out, err, config, now)
@ -48,13 +74,71 @@ impl<'a> Command<'a> for SheetCommand {
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
use crate::database::SqliteDatabase;
use crate::test_utils::PrettyString;
use super::*;
#[test]
fn switch_to_sheet() {
assert!(false);
let args = Args {
sheet: Some("new_sheet".into()),
};
let mut db = SqliteDatabase::from_memory().unwrap();
let mut out = Vec::new();
let mut err = Vec::new();
let now = Utc::now();
db.init().unwrap();
SheetCommand::handle(args, &mut db, &mut out, &mut err, &Default::default(), now).unwrap();
assert_eq!(db.current_sheet().unwrap().unwrap(), "new_sheet");
assert_eq!(PrettyString(&String::from_utf8_lossy(&out)), PrettyString("Switching to sheet 'new_sheet'\n"));
assert_eq!(PrettyString(&String::from_utf8_lossy(&err)), PrettyString(""));
}
#[test]
fn switch_to_sheet_already_in() {
assert!(false);
let args = Args {
sheet: Some("foo".into()),
};
let mut db = SqliteDatabase::from_memory().unwrap();
let mut out = Vec::new();
let mut err = Vec::new();
let now = Utc::now();
db.init().unwrap();
db.set_current_sheet("foo").unwrap();
SheetCommand::handle(args, &mut db, &mut out, &mut err, &Default::default(), now).unwrap();
assert_eq!(db.current_sheet().unwrap().unwrap(), "foo");
assert_eq!(PrettyString(&String::from_utf8_lossy(&out)), PrettyString("Already on sheet 'foo'\n"));
assert_eq!(PrettyString(&String::from_utf8_lossy(&err)), PrettyString(""));
}
#[test]
fn switch_to_last_sheet() {
let args = Args {
sheet: Some("-".into()),
};
let mut db = SqliteDatabase::from_memory().unwrap();
let mut out = Vec::new();
let mut err = Vec::new();
let now = Utc::now();
db.init().unwrap();
db.set_current_sheet("foo").unwrap();
db.set_last_sheet("var").unwrap();
SheetCommand::handle(args, &mut db, &mut out, &mut err, &Default::default(), now).unwrap();
assert_eq!(db.current_sheet().unwrap().unwrap(), "var");
assert_eq!(db.last_sheet().unwrap().unwrap(), "foo");
assert_eq!(PrettyString(&String::from_utf8_lossy(&out)), PrettyString("Switching to sheet 'var'\n"));
assert_eq!(PrettyString(&String::from_utf8_lossy(&err)), PrettyString(""));
}
}

View File

@ -50,6 +50,7 @@ pub trait Database {
`value` varchar(255)
)
", &[])?;
self.execute("INSERT INTO meta (key, value) VALUES ('current_sheet', 'default')", &[])?;
Ok(())
}
@ -174,12 +175,14 @@ pub trait Database {
}
fn set_current_sheet(&mut self, sheet: &str) -> Result<()> {
self.execute("DELETE FROM meta WHERE key='current_sheet'", &[])?;
self.execute("INSERT INTO meta (key, value) VALUES ('current_sheet', ?1)", &[&sheet])?;
Ok(())
}
fn set_last_sheet(&mut self, sheet: &str) -> Result<()> {
self.execute("DELETE FROM meta WHERE key='last_sheet'", &[])?;
self.execute("INSERT INTO meta (key, value) VALUES ('last_sheet', ?1)", &[&sheet])?;
Ok(())