summaryrefslogtreecommitdiffstats
path: root/src/actions/get.rs
blob: 2b3b21fd53a9759d7e238132c5672e2337bc5fdc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use crate::calendars;
use crate::KhResult;
use structopt::StructOpt;

#[derive(Debug, StructOpt)]
pub struct GetArgs {
  /// Show information about this
  #[structopt(name = "query", raw(possible_values = "&GetQueryArgs::variants()"))]
  pub query: GetQueryArgs,
}

arg_enum! {
#[derive(Debug)]
  pub enum GetQueryArgs{
    calendars,
  }
}

pub fn action_get(args: &GetArgs) -> KhResult<()> {
  match args.query {
    GetQueryArgs::calendars => action_get_calendars(),
  }
}

pub fn action_get_calendars() -> KhResult<()> {
  for calendar in calendars::calendar_list() {
    khprintln!("{}", calendar);
  }

  Ok(())
}

#[cfg(test)]
mod integration {
  use super::*;

  use crate::testutils;
  use crate::utils::stdioutils;

  #[test]
  fn test_get_calendars() {
    let _testdir = testutils::prepare_testdir("testdir_two_cals");

    let args = GetArgs { query: GetQueryArgs::calendars };
    action_get(&args).unwrap();

    assert_eq!("first\nsecond\nsecond/second_sub\n", stdioutils::test_stdout_clear());
  }
}