forgejo/models/actions/pre_execution_errors_test.go
Mathieu Fenniak 993da59ad4 i18n: translate Actions PreExecutionError for viewer (#10267)
Identified in code review https://codeberg.org/forgejo/forgejo/pulls/10244#issuecomment-8576643, the `PreExecutionError` field in `ActionRun` isn't well implemented as it translates the error at action runtime rather than later when the action is viewed in the UI.  This PR adds an error code and error details column that can be more correctly translated.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10267
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Co-authored-by: Mathieu Fenniak <mathieu@fenniak.net>
Co-committed-by: Mathieu Fenniak <mathieu@fenniak.net>
2025-11-30 13:16:41 +01:00

64 lines
1.8 KiB
Go

// Copyright 2025 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: GPL-3.0-or-later
package actions
import (
"testing"
"forgejo.org/modules/translation"
"github.com/stretchr/testify/assert"
)
func TestTranslatePreExecutionError(t *testing.T) {
translation.InitLocales(t.Context())
lang := translation.NewLocale("en-US")
tests := []struct {
name string
run *ActionRun
expected string
}{
{
name: "legacy",
run: &ActionRun{PreExecutionError: "legacy message"},
expected: "legacy message",
},
{
name: "no error",
run: &ActionRun{},
expected: "",
},
{
name: "ErrorCodeEventDetectionError",
run: &ActionRun{
PreExecutionErrorCode: ErrorCodeEventDetectionError,
PreExecutionErrorDetails: []any{"inner error message"},
},
expected: "Unable to parse supported events in workflow: inner error message",
},
{
name: "ErrorCodeJobParsingError",
run: &ActionRun{
PreExecutionErrorCode: ErrorCodeJobParsingError,
PreExecutionErrorDetails: []any{"inner error message"},
},
expected: "Unable to parse jobs in workflow: inner error message",
},
{
name: "ErrorCodePersistentIncompleteMatrix",
run: &ActionRun{
PreExecutionErrorCode: ErrorCodePersistentIncompleteMatrix,
PreExecutionErrorDetails: []any{"blocked_job", "needs-1, needs-2"},
},
expected: "Unable to evaluate `strategy.matrix` of job blocked_job due to a `needs` expression that was invalid. It may reference a job that is not in it's 'needs' list (needs-1, needs-2), or an output that doesn't exist on one of those jobs.",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := TranslatePreExecutionError(lang, tt.run)
assert.Equal(t, tt.expected, err)
})
}
}