display a nicer message when no entries are running with t now

This commit is contained in:
Abraham Toriz 2022-11-09 14:19:11 -06:00
parent 57ec60226d
commit 9b07bedf55
No known key found for this signature in database
GPG Key ID: D5B4A746DB5DD42A
1 changed files with 52 additions and 34 deletions

View File

@ -40,42 +40,46 @@ impl<'a> Command<'a> for NowCommand {
let (entries, needs_warning) = entries_or_warning(entries, &streams.db)?; let (entries, needs_warning) = entries_or_warning(entries, &streams.db)?;
let current = streams.db.current_sheet()?; if entries.is_empty() {
let last = streams.db.last_sheet()?; streams.out.write_all(b"No running entries\n")?;
} else {
let current = streams.db.current_sheet()?;
let last = streams.db.last_sheet()?;
let mut tabs = Tabulate::with_columns(vec![ let mut tabs = Tabulate::with_columns(vec![
// indicator of current or prev sheet // indicator of current or prev sheet
Col::new().min_width(1).and_alignment(Right), Col::new().min_width(1).and_alignment(Right),
// sheet name // sheet name
Col::new().min_width(9).and_alignment(Left), Col::new().min_width(9).and_alignment(Left),
// running time // running time
Col::new().min_width(9).and_alignment(Right), Col::new().min_width(9).and_alignment(Right),
// activity // activity
Col::new().min_width(0).and_alignment(Left), Col::new().min_width(0).and_alignment(Left),
]);
tabs.feed(vec!["", "Timesheet", "Running", "Activity"]);
tabs.separator(' ');
for entry in entries {
tabs.feed(vec![
if current == entry.sheet {
"*"
} else if last.as_ref() == Some(&entry.sheet) {
"-"
} else {
""
}.to_string(),
entry.sheet,
format_duration(facts.now - entry.start),
entry.note.unwrap_or_default(),
]); ]);
}
streams.out.write_all(tabs.print(facts.env.stdout_is_tty).as_bytes())?; tabs.feed(vec!["", "Timesheet", "Running", "Activity"]);
tabs.separator(' ');
for entry in entries {
tabs.feed(vec![
if current == entry.sheet {
"*"
} else if last.as_ref() == Some(&entry.sheet) {
"-"
} else {
""
}.to_string(),
entry.sheet,
format_duration(facts.now - entry.start),
entry.note.unwrap_or_default(),
]);
}
streams.out.write_all(tabs.print(facts.env.stdout_is_tty).as_bytes())?;
}
warn_if_needed(&mut streams.err, needs_warning, &facts.env)?; warn_if_needed(&mut streams.err, needs_warning, &facts.env)?;
@ -86,7 +90,7 @@ impl<'a> Command<'a> for NowCommand {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use chrono::{Utc, TimeZone, Local}; use chrono::{Utc, TimeZone, Local};
use pretty_assertions::assert_eq; use pretty_assertions::assert_str_eq;
use crate::database::{SqliteDatabase, Database}; use crate::database::{SqliteDatabase, Database};
@ -111,7 +115,7 @@ mod tests {
NowCommand::handle(Default::default(), &mut streams, &facts).unwrap(); NowCommand::handle(Default::default(), &mut streams, &facts).unwrap();
assert_eq!(&String::from_utf8_lossy(&streams.out), " Timesheet Running Activity assert_str_eq!(&String::from_utf8_lossy(&streams.out), " Timesheet Running Activity
- sheet4 1:52:45 some - sheet4 1:52:45 some
"); ");
@ -128,14 +132,28 @@ mod tests {
NowCommand::handle(Default::default(), &mut streams, &facts).unwrap(); NowCommand::handle(Default::default(), &mut streams, &facts).unwrap();
assert_eq!(&String::from_utf8_lossy(&streams.out), " Timesheet Running Activity assert_str_eq!(&String::from_utf8_lossy(&streams.out), " Timesheet Running Activity
* default 0:10:24 que * default 0:10:24 que
"); ");
assert_eq!( assert_str_eq!(
String::from_utf8_lossy(&streams.err), String::from_utf8_lossy(&streams.err),
"[WARNING] You are using the old timetrap format, it is advised that you update your database using t migrate. To supress this warning set TIEMPO_SUPRESS_TIMETRAP_WARNING=1\n" "[WARNING] You are using the old timetrap format, it is advised that you update your database using t migrate. To supress this warning set TIEMPO_SUPRESS_TIMETRAP_WARNING=1\n"
); );
} }
#[test]
fn with_no_running_entries_display_nicer_message() {
std::env::set_var("TZ", "CST+6");
let mut streams = Streams::fake(b"");
let now = Utc.ymd(2021, 1, 1).and_hms(13, 52, 45);
let facts = Facts::new().with_now(now);
NowCommand::handle(Default::default(), &mut streams, &facts).unwrap();
assert_str_eq!(&String::from_utf8_lossy(&streams.out), "No running entries
");
}
} }