diff --git a/files/append_test.go b/files/append_test.go index 1d6d16f..4fe2d76 100644 --- a/files/append_test.go +++ b/files/append_test.go @@ -8,32 +8,42 @@ import ( "codeberg.org/danjones000/my-log/config" "codeberg.org/danjones000/my-log/models" - "github.com/stretchr/testify/suite" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) -func TestAppend(t *testing.T) { - suite.Run(t, new(AppendTestSuite)) +func TestAppend(tt *testing.T) { + tt.Run("success", func(t *testing.T) { + t.Run("single", appendTestSingle) + t.Run("two", appendTestTwoEntries) + t.Run("new_line", appendTestAddNewLine) + t.Run("no-new-line", appendTestDontAddNewLine) + t.Run("dot-folder", appendTestDotFolder) + t.Run("no-dot-folder", appendTestDotFolderNo) + t.Run("no-ext", appendTestNoExt) + }) + tt.Run("failure", func(t *testing.T) { + t.Run("badEntry", appendTestBadEntry) + t.Run("load-err", appendTestConfLoadErr) + t.Run("mkdir-err", appendTestMkdirErr) + t.Run("append-log-err", appendTestOpenErr) + }) } -type AppendTestSuite struct { - suite.Suite - dir string -} - -func (s *AppendTestSuite) SetupSuite() { - s.dir, _ = os.MkdirTemp("", "append-test") - config.Overrides["input.path"] = s.dir +func setupAppendTest(t *testing.T) string { + t.Helper() + dir := t.ArtifactDir() + config.Overrides["input.path"] = dir config.Overrides["input.ext"] = "log" + t.Cleanup(func() { + delete(config.Overrides, "input.path") + delete(config.Overrides, "input.ext") + }) + return dir } -func (s *AppendTestSuite) TearDownSuite() { - os.RemoveAll(s.dir) - delete(config.Overrides, "input.path") - delete(config.Overrides, "input.ext") -} - -func (s *AppendTestSuite) TestSuccess() { - defer os.Remove(s.dir + "/test.log") +func appendTestSingle(t *testing.T) { + dir := setupAppendTest(t) when := time.Now().Local() e := models.Entry{ Title: "Jimmy", @@ -48,18 +58,18 @@ func (s *AppendTestSuite) TestSuccess() { Entries: []models.Entry{e}, } err := Append(l) - s.Require().NoError(err) - s.Require().FileExists(s.dir + "/test.log") - by, err := os.ReadFile(s.dir + "/test.log") + require.NoError(t, err) + require.FileExists(t, dir+"/test.log") + by, err := os.ReadFile(dir + "/test.log") st := string(by) - s.Require().NoError(err) - s.Assert().Contains(st, "Jimmy\n") - s.Assert().Contains(st, "\n@foo 42") - s.Assert().Contains(st, "\n@bar true") + require.NoError(t, err) + assert.Contains(t, st, "Jimmy\n") + assert.Contains(t, st, "\n@foo 42") + assert.Contains(t, st, "\n@bar true") } -func (s *AppendTestSuite) TestTwoEntries() { - defer os.Remove(s.dir + "/test.log") +func appendTestTwoEntries(t *testing.T) { + dir := setupAppendTest(t) when := time.Now().Local() whens := when.Format(models.DateFormat) e := []models.Entry{ @@ -71,17 +81,17 @@ func (s *AppendTestSuite) TestTwoEntries() { Entries: e, } err := Append(l) - s.Assert().NoError(err) - s.Require().FileExists(s.dir + "/test.log") - by, _ := os.ReadFile(s.dir + "/test.log") + assert.NoError(t, err) + require.FileExists(t, dir+"/test.log") + by, _ := os.ReadFile(dir + "/test.log") st := string(by) - s.Assert().Contains(st, fmt.Sprintf("@begin %s - one", whens)) - s.Assert().Contains(st, fmt.Sprintf("@begin %s - two", whens)) + assert.Contains(t, st, fmt.Sprintf("@begin %s - one", whens)) + assert.Contains(t, st, fmt.Sprintf("@begin %s - two", whens)) } -func (s *AppendTestSuite) TestAddNewLine() { - defer os.Remove(s.dir + "/test.log") - os.WriteFile(s.dir+"/test.log", []byte("foo"), 0644) +func appendTestAddNewLine(t *testing.T) { + dir := setupAppendTest(t) + os.WriteFile(dir+"/test.log", []byte("foo"), 0644) when := time.Now().Local() whens := when.Format(models.DateFormat) e := []models.Entry{ @@ -92,16 +102,16 @@ func (s *AppendTestSuite) TestAddNewLine() { Entries: e, } err := Append(l) - s.Assert().NoError(err) - s.Require().FileExists(s.dir + "/test.log") - by, _ := os.ReadFile(s.dir + "/test.log") + assert.NoError(t, err) + require.FileExists(t, dir+"/test.log") + by, _ := os.ReadFile(dir + "/test.log") exp := fmt.Sprintf("foo\n@begin %s - one\n@id jimmy @end\n", whens) - s.Assert().Equal(exp, string(by)) + assert.Equal(t, exp, string(by)) } -func (s *AppendTestSuite) TestDontAddNewLine() { - defer os.Remove(s.dir + "/test.log") - os.WriteFile(s.dir+"/test.log", []byte("foo\n"), 0644) +func appendTestDontAddNewLine(t *testing.T) { + dir := setupAppendTest(t) + os.WriteFile(dir+"/test.log", []byte("foo\n"), 0644) when := time.Now().Local() whens := when.Format(models.DateFormat) e := []models.Entry{ @@ -112,15 +122,15 @@ func (s *AppendTestSuite) TestDontAddNewLine() { Entries: e, } err := Append(l) - s.Assert().NoError(err) - s.Require().FileExists(s.dir + "/test.log") - by, _ := os.ReadFile(s.dir + "/test.log") + assert.NoError(t, err) + require.FileExists(t, dir+"/test.log") + by, _ := os.ReadFile(dir + "/test.log") exp := fmt.Sprintf("foo\n@begin %s - one\n@id jimmy @end\n", whens) - s.Assert().Equal(exp, string(by)) + assert.Equal(t, exp, string(by)) } -func (s *AppendTestSuite) TestFailEntry() { - defer os.Remove(s.dir + "/test.log") +func appendTestBadEntry(t *testing.T) { + dir := setupAppendTest(t) e := models.Entry{ Title: "Jimmy", } @@ -129,14 +139,19 @@ func (s *AppendTestSuite) TestFailEntry() { Entries: []models.Entry{e}, } err := Append(l) - s.Assert().NoError(err) - s.Require().FileExists(s.dir + "/test.log") - by, _ := os.ReadFile(s.dir + "/test.log") - s.Assert().Equal([]byte{}, by) + assert.NoError(t, err) + require.FileExists(t, dir+"/test.log") + by, _ := os.ReadFile(dir + "/test.log") + assert.Equal(t, []byte{}, by) } -func (s *AppendTestSuite) TestDotFolder() { +func appendTestDotFolder(t *testing.T) { config.Overrides["input.dotFolder"] = "true" + t.Cleanup(func() { + delete(config.Overrides, "input.dotFolder") + }) + + dir := setupAppendTest(t) e := models.Entry{ Title: "something", Date: time.Now(), @@ -146,16 +161,21 @@ func (s *AppendTestSuite) TestDotFolder() { Entries: []models.Entry{e}, } err := Append(l) - s.Require().NoError(err) - s.Require().FileExists(s.dir + "/sub/test.log") - by, err := os.ReadFile(s.dir + "/sub/test.log") + require.NoError(t, err) + require.FileExists(t, dir+"/sub/test.log") + by, err := os.ReadFile(dir + "/sub/test.log") st := string(by) - s.Require().NoError(err) - s.Assert().Contains(st, fmt.Sprintf("@begin %s - %s", e.Date.Format(models.DateFormat), e.Title)) + require.NoError(t, err) + assert.Contains(t, st, fmt.Sprintf("@begin %s - %s", e.Date.Format(models.DateFormat), e.Title)) } -func (s *AppendTestSuite) TestDotFolderNo() { +func appendTestDotFolderNo(t *testing.T) { config.Overrides["input.dotFolder"] = "false" + t.Cleanup(func() { + delete(config.Overrides, "input.dotFolder") + }) + + dir := setupAppendTest(t) e := models.Entry{ Title: "another", Date: time.Now(), @@ -165,19 +185,21 @@ func (s *AppendTestSuite) TestDotFolderNo() { Entries: []models.Entry{e}, } err := Append(l) - s.Require().NoError(err) - s.Require().FileExists(s.dir + "/sub.test.log") - by, err := os.ReadFile(s.dir + "/sub.test.log") + require.NoError(t, err) + require.FileExists(t, dir+"/sub.test.log") + by, err := os.ReadFile(dir + "/sub.test.log") st := string(by) - s.Require().NoError(err) - s.Assert().Contains(st, fmt.Sprintf("@begin %s - %s", e.Date.Format(models.DateFormat), e.Title)) + require.NoError(t, err) + assert.Contains(t, st, fmt.Sprintf("@begin %s - %s", e.Date.Format(models.DateFormat), e.Title)) } -func (s *AppendTestSuite) TestNoExt() { +func appendTestNoExt(t *testing.T) { + dir := setupAppendTest(t) config.Overrides["input.ext"] = "" - defer func() { + t.Cleanup(func() { config.Overrides["input.ext"] = "log" - }() + }) + e := models.Entry{ Title: "baz", Date: time.Now(), @@ -187,48 +209,49 @@ func (s *AppendTestSuite) TestNoExt() { Entries: []models.Entry{e}, } err := Append(l) - s.Require().NoError(err) - s.Require().FileExists(s.dir + "/foobar") - by, err := os.ReadFile(s.dir + "/foobar") + require.NoError(t, err) + require.FileExists(t, dir+"/foobar") + by, err := os.ReadFile(dir + "/foobar") st := string(by) - s.Require().NoError(err) - s.Assert().Contains(st, fmt.Sprintf("@begin %s - %s", e.Date.Format(models.DateFormat), e.Title)) + require.NoError(t, err) + assert.Contains(t, st, fmt.Sprintf("@begin %s - %s", e.Date.Format(models.DateFormat), e.Title)) } -func (s *AppendTestSuite) TestConfLoadErr() { +func appendTestConfLoadErr(t *testing.T) { + dir := t.ArtifactDir() + currConf := config.ConfigPath - tmp, _ := os.CreateTemp("", "app-conf-*.toml") + tmp, _ := os.CreateTemp(dir, "app-conf-*.toml") fname := tmp.Name() - defer tmp.Close() - defer os.Remove(fname) + t.Cleanup(func() { tmp.Close() }) + t.Cleanup(func() { os.Remove(fname) }) fmt.Fprintln(tmp, `{"not":"toml"}`) config.ConfigPath = fname - defer func(path string) { - config.ConfigPath = path - }(currConf) + t.Cleanup(func() { config.ConfigPath = currConf }) + err := Append(models.Log{}) - s.Assert().ErrorContains(err, "toml") + assert.ErrorContains(t, err, "toml") } -func (s *AppendTestSuite) TestMkdirErr() { +func appendTestMkdirErr(t *testing.T) { // Don't run this test as root config.Overrides["input.path"] = "/var/my-logs-test" - defer func(path string) { - config.Overrides["input.path"] = path - }(s.dir) + t.Cleanup(func() { delete(config.Overrides, "input.path") }) + err := Append(models.Log{}) - s.Assert().ErrorContains(err, "permission denied") + assert.ErrorContains(t, err, "permission denied") } -func (s *AppendTestSuite) TestOpenErr() { +func appendTestOpenErr(t *testing.T) { + dir := setupAppendTest(t) l := models.Log{ Name: "test-open-err", } - fname := s.dir + "/test-open-err.log" - os.MkdirAll(s.dir, 0750) + fname := dir + "/test-open-err.log" + os.MkdirAll(dir, 0750) f, _ := os.Create(fname) f.Close() - os.Chmod(fname, 0400) // read only + os.Chmod(fname, 0400) err := Append(l) - s.Assert().ErrorContains(err, "permission denied") + assert.ErrorContains(t, err, "permission denied") } diff --git a/go.mod b/go.mod index aa282b4..1bc3408 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module codeberg.org/danjones000/my-log -go 1.21.5 +go 1.26.0 require ( github.com/BurntSushi/toml v1.3.2