cli/pkg/cmd/agent-task/shared/log_test.go
Kynan Ware 2c68168611 Rename testdata log files for clarity
Renamed sample log input and expected output files in testdata to use a consistent 'log-*-input.txt' and 'log-*-want.txt' naming scheme. Updated references in log_test.go to match the new file names for improved clarity and maintainability.
2025-09-15 13:52:14 -06:00

72 lines
1.6 KiB
Go

package shared
import (
"os"
"slices"
"strings"
"testing"
"github.com/cli/cli/v2/pkg/iostreams"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFollow(t *testing.T) {
tests := []struct {
name string
log string
want string
}{
{
name: "sample log 1",
log: "testdata/log-1-input.txt",
want: "testdata/log-1-want.txt",
},
{
name: "sample log 2",
log: "testdata/log-2-input.txt",
want: "testdata/log-2-want.txt",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
raw, err := os.ReadFile(tt.log)
require.NoError(t, err)
// Delete all the `/r` to make the tests OS-agnostic.
raw = []byte(strings.ReplaceAll(string(raw), "\r\n", "\n"))
lines := slices.DeleteFunc(strings.Split(string(raw), "\n"), func(line string) bool {
return line == ""
})
var hits int
fetcher := func() ([]byte, error) {
hits++
if hits > len(lines) {
require.FailNow(t, "too many API calls")
}
return []byte(strings.Join(lines[0:hits], "\n\n")), nil
}
ios, _, stdout, _ := iostreams.Test()
err = NewLogRenderer().Follow(fetcher, stdout, ios)
require.NoError(t, err)
// Handy note for updating the testdata files when they change:
// ext := filepath.Ext(tt.log)
// stripped := strings.TrimSuffix(tt.log, ext)
// os.WriteFile(stripped+".want"+ext, stdout.Bytes(), 0644)
want, err := os.ReadFile(tt.want)
require.NoError(t, err)
// Delete all the `/r` to make the tests OS-agnostic.
want = []byte(strings.ReplaceAll(string(want), "\r\n", "\n"))
assert.Equal(t, string(want), stdout.String())
})
}
}