Files
gitea/models/actions/status_test.go
T
silverwind 8abda62312 test: consolidate Go tests (#39962)
Consolidate all Go tests. Coverage is identical to before. Go tests are
around 5% faster while being 7% smaller. No non-test code is touched.
2026-10-24 13:48:19 +00:00

92 lines
2.6 KiB
Go

// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package actions
import (
"testing"
runnerv1 "gitea.dev/actionslib/runner/v1"
"github.com/stretchr/testify/assert"
)
func TestStatusResultConversions(t *testing.T) {
cases := []struct {
status Status
result runnerv1.Result
fromResult bool
}{
{StatusUnknown, runnerv1.Result_RESULT_UNSPECIFIED, true},
{StatusWaiting, runnerv1.Result_RESULT_UNSPECIFIED, false},
{StatusRunning, runnerv1.Result_RESULT_UNSPECIFIED, false},
{StatusBlocked, runnerv1.Result_RESULT_UNSPECIFIED, false},
{StatusSuccess, runnerv1.Result_RESULT_SUCCESS, true},
{StatusFailure, runnerv1.Result_RESULT_FAILURE, true},
{StatusCancelled, runnerv1.Result_RESULT_CANCELLED, true},
{StatusCancelling, runnerv1.Result_RESULT_CANCELLED, false},
{StatusSkipped, runnerv1.Result_RESULT_SKIPPED, true},
}
for _, tt := range cases {
assert.Equal(t, tt.result, tt.status.AsResult(), "status=%s", tt.status)
if tt.fromResult {
assert.Equal(t, tt.status, StatusFromResult(tt.result), "result=%s", tt.result)
}
}
}
func newJob(status Status, continueOnError bool) *ActionRunJob {
return &ActionRunJob{Status: status, ContinueOnError: continueOnError}
}
func TestAggregateJobStatusContinueOnError(t *testing.T) {
cases := []struct {
name string
jobs []*ActionRunJob
want Status
}{
{
name: "all success",
jobs: []*ActionRunJob{newJob(StatusSuccess, false), newJob(StatusSuccess, false)},
want: StatusSuccess,
},
{
name: "one failure without continue-on-error",
jobs: []*ActionRunJob{newJob(StatusSuccess, false), newJob(StatusFailure, false)},
want: StatusFailure,
},
{
name: "one failure with continue-on-error",
jobs: []*ActionRunJob{newJob(StatusSuccess, false), newJob(StatusFailure, true)},
want: StatusSuccess,
},
{
name: "only continued-failure",
jobs: []*ActionRunJob{newJob(StatusFailure, true)},
want: StatusSuccess,
},
{
name: "continued-failure plus real failure",
jobs: []*ActionRunJob{newJob(StatusFailure, true), newJob(StatusFailure, false)},
want: StatusFailure,
},
{
name: "all skipped",
jobs: []*ActionRunJob{newJob(StatusSkipped, false), newJob(StatusSkipped, false)},
want: StatusSkipped,
},
{
name: "continued-failure plus skipped counts as success",
jobs: []*ActionRunJob{newJob(StatusFailure, true), newJob(StatusSkipped, false)},
want: StatusSuccess,
},
}
for _, tt := range cases {
t.Run(tt.name, func(t *testing.T) {
assert.Equal(t, tt.want, AggregateJobStatus(tt.jobs))
})
}
}