Files
gitea-tea/modules/print/actions_test.go
T
bircni c5f674111a revert: tea 1.0 rewrite (#1122–#1126) (#1146)
Reverts #1126, #1125, #1124, #1123 and #1122.

`go.mod` keeps the Go 1.26 line with toolchain `go1.26.9` (instead of the original `go1.26.6`) so the security fix from #1131 isn't lost.

reopens #69
reopens #141
reopens #162
reopens #172
reopens #197
reopens #232
reopens #240
reopens #246
reopens #323
reopens #325
reopens #326
reopens #328
reopens #344
reopens #351
reopens #373
reopens #403
reopens #406
reopens #417
reopens #430
reopens #457
reopens #480
reopens #482
reopens #489
reopens #490
reopens #498
reopens #500
reopens #504
reopens #510
reopens #516
reopens #523
reopens #556
reopens #560
reopens #569
reopens #571
reopens #602
reopens #632
reopens #633
reopens #643
reopens #666
reopens #670
reopens #672
reopens #677
reopens #683
reopens #697
reopens #726
reopens #737
reopens #770
reopens #779
reopens #804
reopens #817
reopens #831
reopens #833
reopens #834
reopens #908
reopens #966
reopens #1023
reopens #1029
reopens #1032
reopens #1050
reopens #1052
reopens #1069
reopens #1073
reopens #1087
reopens #1091
reopens #1094
reopens #1110
reopens #1115
reopens #1116
reopens #1118

Reviewed-on: https://gitea.com/gitea/tea/pulls/1146
Reviewed-by: TheFox0x7 <95654+thefox0x7@noreply.gitea.com>
2026-10-18 20:56:33 +00:00

216 lines
5.2 KiB
Go

// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package print
import (
"bytes"
"strconv"
"strings"
"testing"
"time"
"gitea.dev/sdk"
"github.com/stretchr/testify/require"
)
func TestActionSecretsListEmpty(t *testing.T) {
// Test with empty secrets - should not panic
defer func() {
if r := recover(); r != nil {
t.Errorf("ActionSecretsList panicked with empty list: %v", r)
}
}()
require.NoError(t, ActionSecretsList([]*gitea.Secret{}, ""))
}
func TestActionSecretsListWithData(t *testing.T) {
secrets := []*gitea.Secret{
{
Name: "TEST_SECRET_1",
Created: time.Now().Add(-24 * time.Hour),
},
{
Name: "TEST_SECRET_2",
Created: time.Now().Add(-48 * time.Hour),
},
}
// Test that it doesn't panic with real data
defer func() {
if r := recover(); r != nil {
t.Errorf("ActionSecretsList panicked with data: %v", r)
}
}()
require.NoError(t, ActionSecretsList(secrets, ""))
// Test JSON output format to verify structure
var buf bytes.Buffer
testTable := table{
headers: []string{"Name", "Created"},
}
for _, secret := range secrets {
testTable.addRow(secret.Name, FormatTime(secret.Created, true))
}
require.NoError(t, testTable.fprint(&buf, "json"))
output := buf.String()
if !strings.Contains(output, "TEST_SECRET_1") {
t.Error("Expected TEST_SECRET_1 in JSON output")
}
if !strings.Contains(output, "TEST_SECRET_2") {
t.Error("Expected TEST_SECRET_2 in JSON output")
}
}
func TestActionVariableDetails(t *testing.T) {
variable := &gitea.RepoActionVariable{
Name: "TEST_VARIABLE",
Value: "test_value",
RepoID: 123,
OwnerID: 456,
}
// Test that it doesn't panic
defer func() {
if r := recover(); r != nil {
t.Errorf("ActionVariableDetails panicked: %v", r)
}
}()
ActionVariableDetails(variable)
}
func TestActionVariablesListEmpty(t *testing.T) {
// Test with empty variables - should not panic
defer func() {
if r := recover(); r != nil {
t.Errorf("ActionVariablesList panicked with empty list: %v", r)
}
}()
require.NoError(t, ActionVariablesList([]*gitea.RepoActionVariable{}, ""))
}
func TestActionVariablesListWithData(t *testing.T) {
variables := []*gitea.RepoActionVariable{
{
Name: "TEST_VARIABLE_1",
Value: "short_value",
RepoID: 123,
OwnerID: 456,
},
{
Name: "TEST_VARIABLE_2",
Value: strings.Repeat("a", 60), // Long value to test truncation
RepoID: 124,
OwnerID: 457,
},
}
// Test that it doesn't panic with real data
defer func() {
if r := recover(); r != nil {
t.Errorf("ActionVariablesList panicked with data: %v", r)
}
}()
require.NoError(t, ActionVariablesList(variables, ""))
// Test JSON output format to verify structure and truncation
var buf bytes.Buffer
testTable := table{
headers: []string{"Name", "Value", "Repository ID"},
}
for _, variable := range variables {
value := variable.Value
if len(value) > 50 {
value = value[:47] + "..."
}
testTable.addRow(variable.Name, value, strconv.Itoa(int(variable.RepoID)))
}
require.NoError(t, testTable.fprint(&buf, "json"))
output := buf.String()
if !strings.Contains(output, "TEST_VARIABLE_1") {
t.Error("Expected TEST_VARIABLE_1 in JSON output")
}
if !strings.Contains(output, "TEST_VARIABLE_2") {
t.Error("Expected TEST_VARIABLE_2 in JSON output")
}
// Check that long value is truncated in our test table
if strings.Contains(output, strings.Repeat("a", 60)) {
t.Error("Long value should be truncated in table output")
}
}
func TestActionVariablesListValueTruncation(t *testing.T) {
variable := &gitea.RepoActionVariable{
Name: "LONG_VALUE_VARIABLE",
Value: strings.Repeat("abcdefghij", 10), // 100 characters
RepoID: 123,
OwnerID: 456,
}
// Test that it doesn't panic
defer func() {
if r := recover(); r != nil {
t.Errorf("ActionVariablesList panicked with long value: %v", r)
}
}()
require.NoError(t, ActionVariablesList([]*gitea.RepoActionVariable{variable}, ""))
// Test the truncation logic directly
value := variable.Value
if len(value) > 50 {
value = value[:47] + "..."
}
if len(value) != 50 { // 47 chars + "..." = 50
t.Errorf("Truncated value should be 50 characters, got %d", len(value))
}
if !strings.HasSuffix(value, "...") {
t.Error("Truncated value should end with '...'")
}
}
func TestTableSorting(t *testing.T) {
// Test that the table sorting works correctly
secrets := []*gitea.Secret{
{Name: "Z_SECRET", Created: time.Now()},
{Name: "A_SECRET", Created: time.Now()},
{Name: "M_SECRET", Created: time.Now()},
}
// Test the table sorting logic
table := table{
headers: []string{"Name", "Created"},
}
for _, secret := range secrets {
table.addRow(secret.Name, FormatTime(secret.Created, true))
}
// Sort by first column (Name) in ascending order (false = ascending)
table.sort(0, false)
// Check that the first row is A_SECRET after ascending sorting
if table.values[0][0] != "A_SECRET" {
t.Errorf("Expected first sorted value to be 'A_SECRET', got '%s'", table.values[0][0])
}
// Check that the last row is Z_SECRET after ascending sorting
if table.values[2][0] != "Z_SECRET" {
t.Errorf("Expected last sorted value to be 'Z_SECRET', got '%s'", table.values[2][0])
}
}