Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/go-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Go Tests

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: 1.22

- name: Install dependencies
run: go mod tidy

- name: Run tests
run: go test ./test -v

1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- feat: complete help page implementation
- feat(core): add interactive main menu as root command
- feat(main): Improving description for better reading
- feat(tests): adding tests and github actions

### Fixes
- fix(changelog): filter only commits after last recorded hash
Expand Down
9 changes: 4 additions & 5 deletions internal/changelog_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func getGitLogSince(lastCommit string) ([]string, error) {
return filtered, nil
}

func changelogVersionExists(version string) bool {
func ChangelogVersionExists(version string) bool {
file, err := os.Open("CHANGELOG.md")
if err != nil {
return false
Expand All @@ -82,7 +82,7 @@ func changelogVersionExists(version string) bool {
return false
}

func printChangelogVersion(version string) (features, fixes, others []string) {
func GetChangelogVersion(version string) (features, fixes, others []string) {
file, err := os.ReadFile("CHANGELOG.md")
if err != nil {
return
Expand Down Expand Up @@ -150,7 +150,7 @@ func GenerateChangelog() {
Message: "Enter the version for this changelog (e.g., 1.0.0):",
}, &version, survey.WithValidator(survey.Required))

if changelogVersionExists(version) {
if ChangelogVersionExists(version) {
var choice string
survey.AskOne(&survey.Select{
Message: fmt.Sprintf("⚠️ Version %s already exists. What do you want to do?", version),
Expand All @@ -161,7 +161,7 @@ func GenerateChangelog() {
}, &choice)

if choice == "Add new commits to this version" {
existingFeatures, existingFixes, existingOthers := printChangelogVersion(version)
existingFeatures, existingFixes, existingOthers := GetChangelogVersion(version)
selectedFeatures = append(selectedFeatures, existingFeatures...)
selectedFixes = append(selectedFixes, existingFixes...)
selectedOthers = append(selectedOthers, existingOthers...)
Expand All @@ -179,7 +179,6 @@ func GenerateChangelog() {
Default: defaultDate,
}, &date)
} else {
// Mesmo se for edição, mantenha a data antiga
date = defaultDate
}

Expand Down
75 changes: 75 additions & 0 deletions test/changelog_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package test

import (
"os"
"testing"

"github.com/caarloshenriq/forge-cli/internal"
)

func TestPrintChangelogVersion(t *testing.T) {
content := `
# Changelog

### Version 1.0.0 - 2025-01-01

### Features
- feat: add login

### Fixes
- fix: resolve crash on load

### Other commits
- refactor: simplify config
`

err := os.WriteFile("CHANGELOG.md", []byte(content), 0644)
if err != nil {
t.Fatalf("failed to create changelog: %v", err)
}
defer os.Remove("CHANGELOG.md")

features, fixes, others := internal.GetChangelogVersion("1.0.0")

if len(features) != 1 || features[0] != "feat: add login" {
t.Errorf("expected feature not found")
}
if len(fixes) != 1 || fixes[0] != "fix: resolve crash on load" {
t.Errorf("expected fix not found")
}
if len(others) != 1 || others[0] != "refactor: simplify config" {
t.Errorf("expected other commit not found")
}
}

func TestChangelogVersionExists(t *testing.T) {
mockChangelog := `
# Changelog

### Version 1.2.0 - 2025-06-21

### Features
- feat: test feature
`

err := os.WriteFile("CHANGELOG.md", []byte(mockChangelog), 0644)
if err != nil {
t.Fatalf("failed to write changelog file: %v", err)
}
defer os.Remove("CHANGELOG.md")

tests := []struct {
version string
expected bool
}{
{"1.2.0", true},
{"1.0.0", false},
}

for _, tt := range tests {
result := internal.ChangelogVersionExists(tt.version)
if result != tt.expected {
t.Errorf("changelogVersionExists(%q) = %v; want %v", tt.version, result, tt.expected)
}
}
}
69 changes: 69 additions & 0 deletions test/readme_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package test

import (
"strings"
"testing"
"text/template"

"github.com/caarloshenriq/forge-cli/internal"
)

func TestReadmeTemplateGeneration(t *testing.T) {
data := internal.ReadmeTemplateData{
ProjectName: "Forge CLI",
Description: "CLI to generate boilerplate documentation",
Installation: "go install github.com/your/repo",
Usage: "forge-cli generate",
License: "MIT",
}

const expectedContent = `# Forge CLI

CLI to generate boilerplate documentation

## Installation

go install github.com/your/repo

## Usage

forge-cli generate

## License

MIT
`

const readmeTemplate = `# {{.ProjectName}}

{{.Description}}

## Installation

{{.Installation}}

## Usage

{{.Usage}}

## License

{{.License}}`

tmpl, err := template.New("readme").Parse(readmeTemplate)
if err != nil {
t.Fatalf("Error parsing template: %v", err)
}

var builder strings.Builder
err = tmpl.Execute(&builder, data)
if err != nil {
t.Fatalf("Error executing template: %v", err)
}

result := builder.String()

if strings.TrimSpace(result) != strings.TrimSpace(expectedContent) {
t.Errorf("Generated content doesn't match expected.\nExpected:\n%s\n\nGot:\n%s", expectedContent, result)
}
}
14 changes: 14 additions & 0 deletions test/sum_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package test

import "testing"

func sum(a, b int) int {
return a + b
}

func TestSum(t *testing.T) {
result := sum(2, 3)
if result != 5 {
t.Errorf("Espect 5, but get %d", result)
}
}