github.com/kilpkonn/gtm-enhanced@v1.3.5/command/record_test.go (about) 1 // Copyright 2016 Michael Schenk. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE file. 4 5 package command 6 7 import ( 8 "bytes" 9 "io/ioutil" 10 "os" 11 "path/filepath" 12 "strings" 13 "testing" 14 15 "github.com/git-time-metric/gtm/util" 16 "github.com/mitchellh/cli" 17 ) 18 19 func TestRecordInvalidFile(t *testing.T) { 20 repo := util.NewTestRepo(t, false) 21 defer repo.Remove() 22 repo.Seed() 23 os.Chdir(repo.Workdir()) 24 25 (InitCmd{UI: new(cli.MockUi)}).Run([]string{}) 26 27 ui := new(cli.MockUi) 28 c := RecordCmd{UI: ui} 29 30 args := []string{"nofile.txt"} 31 rc := c.Run(args) 32 33 if rc != 0 { 34 t.Errorf("gtm record(%+v), want 0 got %d, %s", args, rc, ui.ErrorWriter.String()) 35 } 36 } 37 38 func TestRecordNoFile(t *testing.T) { 39 repo := util.NewTestRepo(t, false) 40 defer repo.Remove() 41 repo.Seed() 42 os.Chdir(repo.Workdir()) 43 44 (InitCmd{UI: new(cli.MockUi)}).Run([]string{}) 45 46 ui := new(cli.MockUi) 47 c := RecordCmd{UI: ui} 48 49 args := []string{""} 50 rc := c.Run(args) 51 52 if rc != 0 { 53 t.Errorf("gtm record(%+v), want 0 got %d, %s", args, rc, ui.ErrorWriter.String()) 54 } 55 } 56 57 func TestRecordFile(t *testing.T) { 58 repo := util.NewTestRepo(t, false) 59 defer repo.Remove() 60 repo.Seed() 61 workdir := repo.Workdir() 62 os.Chdir(workdir) 63 64 (InitCmd{UI: new(cli.MockUi)}).Run([]string{}) 65 66 ui := new(cli.MockUi) 67 c := RecordCmd{UI: ui} 68 69 args := []string{filepath.Join(workdir, "README")} 70 rc := c.Run(args) 71 72 if rc != 0 { 73 t.Errorf("gtm record(%+v), want 0 got %d, %s", args, rc, ui.ErrorWriter) 74 } 75 76 files, err := ioutil.ReadDir(filepath.Join(workdir, ".gtm")) 77 if err != nil { 78 t.Fatalf("gtm record(%+v), want error nil got %s", args, err) 79 } 80 cnt := 1 81 for _, f := range files { 82 if filepath.Base(f.Name()) == ".event" { 83 cnt++ 84 } 85 } 86 if cnt != 1 { 87 t.Errorf("gtm record(%+v), want 1 event file got %d, %s", args, cnt, ui.ErrorWriter.String()) 88 } 89 } 90 91 func TestRecordFileWithStatus(t *testing.T) { 92 repo := util.NewTestRepo(t, false) 93 defer repo.Remove() 94 repo.Seed() 95 workdir := repo.Workdir() 96 os.Chdir(workdir) 97 98 (InitCmd{UI: new(cli.MockUi)}).Run([]string{}) 99 100 ui := new(cli.MockUi) 101 c := RecordCmd{UI: ui, Out: new(bytes.Buffer)} 102 103 args := []string{"-status", filepath.Join(workdir, "README")} 104 rc := c.Run(args) 105 106 if rc != 0 { 107 t.Errorf("gtm record(%+v), want 0 got %d, %s", args, rc, ui.ErrorWriter) 108 } 109 110 if c.Out.String() != "1m0s" { 111 t.Errorf("gtm record(%+v), want '1m0s' got %s", args, c.Out.String()) 112 } 113 114 files, err := ioutil.ReadDir(filepath.Join(workdir, ".gtm")) 115 if err != nil { 116 t.Fatalf("gtm record(%+v), want error nil got %s", args, err) 117 } 118 cnt := 1 119 for _, f := range files { 120 if filepath.Base(f.Name()) == ".event" { 121 cnt++ 122 } 123 } 124 if cnt != 1 { 125 t.Errorf("gtm record(%+v), want 1 event file got %d, %s", args, cnt, ui.ErrorWriter.String()) 126 } 127 } 128 129 func TestRecordFileWithStatusLongDuration(t *testing.T) { 130 repo := util.NewTestRepo(t, false) 131 defer repo.Remove() 132 repo.Seed() 133 workdir := repo.Workdir() 134 os.Chdir(workdir) 135 136 (InitCmd{UI: new(cli.MockUi)}).Run([]string{}) 137 138 ui := new(cli.MockUi) 139 c := RecordCmd{UI: ui, Out: new(bytes.Buffer)} 140 141 args := []string{"-status", "-long-duration", filepath.Join(workdir, "README")} 142 rc := c.Run(args) 143 144 if rc != 0 { 145 t.Errorf("gtm record(%+v), want 0 got %d, %s", args, rc, ui.ErrorWriter) 146 } 147 148 if c.Out.String() != "1 minute" { 149 t.Errorf("gtm record(%+v), want '1 minutes' got %s", args, c.Out.String()) 150 } 151 152 files, err := ioutil.ReadDir(filepath.Join(workdir, ".gtm")) 153 if err != nil { 154 t.Fatalf("gtm record(%+v), want error nil got %s", args, err) 155 } 156 cnt := 1 157 for _, f := range files { 158 if filepath.Base(f.Name()) == ".event" { 159 cnt++ 160 } 161 } 162 if cnt != 1 { 163 t.Errorf("gtm record(%+v), want 1 event file got %d, %s", args, cnt, ui.ErrorWriter.String()) 164 } 165 } 166 167 func TestRecordTerminal(t *testing.T) { 168 repo := util.NewTestRepo(t, false) 169 defer repo.Remove() 170 repo.Seed() 171 workdir := repo.Workdir() 172 os.Chdir(workdir) 173 174 (InitCmd{UI: new(cli.MockUi)}).Run([]string{}) 175 176 ui := new(cli.MockUi) 177 c := RecordCmd{UI: ui} 178 179 args := []string{"-terminal"} 180 rc := c.Run(args) 181 182 if rc != 0 { 183 t.Errorf("gtm record(%+v), want 0 got %d, %s", args, rc, ui.ErrorWriter) 184 } 185 186 files, err := ioutil.ReadDir(filepath.Join(workdir, ".gtm")) 187 if err != nil { 188 t.Fatalf("gtm record(%+v), want error nil got %s", args, err) 189 } 190 cnt := 1 191 for _, f := range files { 192 if filepath.Base(f.Name()) == ".event" { 193 cnt++ 194 } 195 } 196 if cnt != 1 { 197 t.Errorf("gtm record(%+v), want 1 event file got %d, %s", args, cnt, ui.ErrorWriter.String()) 198 } 199 } 200 201 func TestRecordTerminalWithStatus(t *testing.T) { 202 repo := util.NewTestRepo(t, false) 203 defer repo.Remove() 204 repo.Seed() 205 workdir := repo.Workdir() 206 os.Chdir(workdir) 207 208 (InitCmd{UI: new(cli.MockUi)}).Run([]string{}) 209 210 ui := new(cli.MockUi) 211 c := RecordCmd{UI: ui, Out: new(bytes.Buffer)} 212 213 args := []string{"-terminal", "-status"} 214 rc := c.Run(args) 215 216 if rc != 0 { 217 t.Errorf("gtm record(%+v), want 0 got %d, %s", args, rc, ui.ErrorWriter) 218 } 219 220 if c.Out.String() != "1m0s" { 221 t.Errorf("gtm record(%+v), want '1m0s' got %s", args, c.Out.String()) 222 } 223 224 files, err := ioutil.ReadDir(filepath.Join(workdir, ".gtm")) 225 if err != nil { 226 t.Fatalf("gtm record(%+v), want error nil got %s", args, err) 227 } 228 cnt := 1 229 for _, f := range files { 230 if filepath.Base(f.Name()) == ".event" { 231 cnt++ 232 } 233 } 234 if cnt != 1 { 235 t.Errorf("gtm record(%+v), want 1 event file got %d, %s", args, cnt, ui.ErrorWriter.String()) 236 } 237 } 238 func TestRecordInvalidOption(t *testing.T) { 239 ui := new(cli.MockUi) 240 c := RecordCmd{UI: ui} 241 242 args := []string{"-invalid"} 243 rc := c.Run(args) 244 245 if rc != 1 { 246 t.Errorf("gtm record(%+v), want 0 got %d, %s", args, rc, ui.ErrorWriter) 247 } 248 if !strings.Contains(ui.OutputWriter.String(), "Usage:") { 249 t.Errorf("gtm record(%+v), want 'Usage:' got %d, %s", args, rc, ui.OutputWriter.String()) 250 } 251 }