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  }