From dbb6c825623f100323fad0958b8918d999e0c564 Mon Sep 17 00:00:00 2001 From: Micheal Wilkinson Date: Fri, 20 Mar 2026 14:49:42 +0000 Subject: [PATCH] test(release): cover automated release preparation --- internal/releaseprep/releaseprep_test.go | 63 ++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 internal/releaseprep/releaseprep_test.go diff --git a/internal/releaseprep/releaseprep_test.go b/internal/releaseprep/releaseprep_test.go new file mode 100644 index 0000000..ca41f49 --- /dev/null +++ b/internal/releaseprep/releaseprep_test.go @@ -0,0 +1,63 @@ +package releaseprep + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" +) + +type PrepareSuite struct { + suite.Suite + rootDir string +} + +func TestPrepareSuite(t *testing.T) { + suite.Run(t, new(PrepareSuite)) +} + +func (s *PrepareSuite) SetupTest() { + s.rootDir = s.T().TempDir() + versionDir := filepath.Join(s.rootDir, "internal", "homesick", "version") + require.NoError(s.T(), os.MkdirAll(versionDir, 0o755)) + + require.NoError(s.T(), os.WriteFile( + filepath.Join(versionDir, "version.go"), + []byte("package version\n\nconst String = \"1.1.6\"\n"), + 0o644, + )) + + require.NoError(s.T(), os.WriteFile( + filepath.Join(s.rootDir, "changelog.md"), + []byte("# Changelog\n\n## [Unreleased]\n\n### Added\n\n- New thing.\n\n### Fixed\n\n- Old thing.\n\n## [1.1.6] - 2017-12-20\n\n### Fixed\n\n- Historical note.\n"), + 0o644, + )) +} + +func (s *PrepareSuite) TestPrepare_UpdatesVersionAndPromotesUnreleasedNotes() { + err := Prepare(s.rootDir, "v1.1.7", "2026-03-20") + + require.NoError(s.T(), err) + + versionBytes, err := os.ReadFile(filepath.Join(s.rootDir, "internal", "homesick", "version", "version.go")) + require.NoError(s.T(), err) + require.Equal(s.T(), "package version\n\nconst String = \"1.1.7\"\n", string(versionBytes)) + + changelogBytes, err := os.ReadFile(filepath.Join(s.rootDir, "changelog.md")) + require.NoError(s.T(), err) + require.Equal(s.T(), "# Changelog\n\n## [Unreleased]\n\n## [1.1.7] - 2026-03-20\n\n### Added\n\n- New thing.\n\n### Fixed\n\n- Old thing.\n\n## [1.1.6] - 2017-12-20\n\n### Fixed\n\n- Historical note.\n", string(changelogBytes)) +} + +func (s *PrepareSuite) TestPrepare_ReturnsErrorWhenUnreleasedSectionMissing() { + require.NoError(s.T(), os.WriteFile( + filepath.Join(s.rootDir, "changelog.md"), + []byte("# Changelog\n\n## [1.1.6] - 2017-12-20\n"), + 0o644, + )) + + err := Prepare(s.rootDir, "1.1.7", "2026-03-20") + + require.ErrorContains(s.T(), err, "unreleased section") +}