mirror of
				https://github.com/woodpecker-ci/woodpecker.git
				synced 2025-11-04 10:41:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package pipeline
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"context"
 | 
						|
	"io"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
	"github.com/urfave/cli/v3"
 | 
						|
 | 
						|
	"go.woodpecker-ci.org/woodpecker/v2/cli/common"
 | 
						|
	"go.woodpecker-ci.org/woodpecker/v2/woodpecker-go/woodpecker"
 | 
						|
)
 | 
						|
 | 
						|
func TestPipelineOutput(t *testing.T) {
 | 
						|
	tests := []struct {
 | 
						|
		name     string
 | 
						|
		args     []string
 | 
						|
		expected string
 | 
						|
		wantErr  bool
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name:     "table output with default columns",
 | 
						|
			args:     []string{},
 | 
						|
			expected: "NUMBER  STATUS   EVENT  BRANCH  MESSAGE  AUTHOR\n1       success  push   main    message  John Doe\n",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:     "table output with custom columns",
 | 
						|
			args:     []string{"output", "--output", "table=Number,Status,Branch"},
 | 
						|
			expected: "NUMBER  STATUS   BRANCH\n1       success  main\n",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:     "table output with no header",
 | 
						|
			args:     []string{"output", "--output-no-headers"},
 | 
						|
			expected: "1  success  push  main  message  John Doe\n",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:     "go-template output",
 | 
						|
			args:     []string{"output", "--output", "go-template={{range . }}{{.Number}} {{.Status}} {{.Branch}}{{end}}"},
 | 
						|
			expected: "1 success main\n",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:    "invalid go-template",
 | 
						|
			args:    []string{"output", "--output", "go-template={{.InvalidField}}"},
 | 
						|
			wantErr: true,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	pipelines := []woodpecker.Pipeline{
 | 
						|
		{
 | 
						|
			Number:  1,
 | 
						|
			Status:  "success",
 | 
						|
			Event:   "push",
 | 
						|
			Branch:  "main",
 | 
						|
			Message: "message",
 | 
						|
			Author:  "John Doe",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			command := &cli.Command{
 | 
						|
				Writer: io.Discard,
 | 
						|
				Name:   "output",
 | 
						|
				Flags:  common.OutputFlags("table"),
 | 
						|
				Action: func(_ context.Context, c *cli.Command) error {
 | 
						|
					var buf bytes.Buffer
 | 
						|
					err := pipelineOutput(c, pipelines, &buf)
 | 
						|
 | 
						|
					if tt.wantErr {
 | 
						|
						assert.Error(t, err)
 | 
						|
						return nil
 | 
						|
					}
 | 
						|
 | 
						|
					assert.NoError(t, err)
 | 
						|
					assert.Equal(t, tt.expected, buf.String())
 | 
						|
 | 
						|
					return nil
 | 
						|
				},
 | 
						|
			}
 | 
						|
 | 
						|
			_ = command.Run(context.Background(), tt.args)
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |