mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
6.0 KiB
201 lines
6.0 KiB
// Copyright 2025 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package commitstatus |
|
|
|
import "testing" |
|
|
|
func TestCombine(t *testing.T) { |
|
tests := []struct { |
|
name string |
|
states CommitStatusStates |
|
expected CommitStatusState |
|
}{ |
|
// 0 states |
|
{ |
|
name: "empty", |
|
states: CommitStatusStates{}, |
|
expected: CommitStatusPending, |
|
}, |
|
// 1 state |
|
{ |
|
name: "pending", |
|
states: CommitStatusStates{CommitStatusPending}, |
|
expected: CommitStatusPending, |
|
}, |
|
{ |
|
name: "success", |
|
states: CommitStatusStates{CommitStatusSuccess}, |
|
expected: CommitStatusSuccess, |
|
}, |
|
{ |
|
name: "error", |
|
states: CommitStatusStates{CommitStatusError}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "failure", |
|
states: CommitStatusStates{CommitStatusFailure}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "warning", |
|
states: CommitStatusStates{CommitStatusWarning}, |
|
expected: CommitStatusSuccess, |
|
}, |
|
// 2 states |
|
{ |
|
name: "pending and success", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess}, |
|
expected: CommitStatusPending, |
|
}, |
|
{ |
|
name: "pending and error", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusError}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "pending and failure", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusFailure}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "pending and warning", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusWarning}, |
|
expected: CommitStatusPending, |
|
}, |
|
{ |
|
name: "success and error", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusError}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "success and failure", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusFailure}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "success and warning", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusWarning}, |
|
expected: CommitStatusSuccess, |
|
}, |
|
{ |
|
name: "error and failure", |
|
states: CommitStatusStates{CommitStatusError, CommitStatusFailure}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "error and warning", |
|
states: CommitStatusStates{CommitStatusError, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "failure and warning", |
|
states: CommitStatusStates{CommitStatusFailure, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
// 3 states |
|
{ |
|
name: "pending, success and warning", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusWarning}, |
|
expected: CommitStatusPending, |
|
}, |
|
{ |
|
name: "pending, success and error", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusError}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "pending, success and failure", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusFailure}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "pending, error and failure", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusError, CommitStatusFailure}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "success, error and warning", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusError, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "success, failure and warning", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusFailure, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "error, failure and warning", |
|
states: CommitStatusStates{CommitStatusError, CommitStatusFailure, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "success, warning and skipped", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusWarning, CommitStatusSkipped}, |
|
expected: CommitStatusSuccess, |
|
}, |
|
// All success |
|
{ |
|
name: "all success", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusSuccess, CommitStatusSuccess}, |
|
expected: CommitStatusSuccess, |
|
}, |
|
// All pending |
|
{ |
|
name: "all pending", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusPending, CommitStatusPending}, |
|
expected: CommitStatusPending, |
|
}, |
|
{ |
|
name: "all skipped", |
|
states: CommitStatusStates{CommitStatusSkipped, CommitStatusSkipped, CommitStatusSkipped}, |
|
expected: CommitStatusSuccess, |
|
}, |
|
// 4 states |
|
{ |
|
name: "pending, success, error and warning", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusError, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "pending, success, failure and warning", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusFailure, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "pending, error, failure and warning", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusError, CommitStatusFailure, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "success, error, failure and warning", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusError, CommitStatusFailure, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "mixed states", |
|
states: CommitStatusStates{CommitStatusPending, CommitStatusSuccess, CommitStatusError, CommitStatusWarning}, |
|
expected: CommitStatusFailure, |
|
}, |
|
{ |
|
name: "mixed states with all success", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusSuccess, CommitStatusPending, CommitStatusWarning}, |
|
expected: CommitStatusPending, |
|
}, |
|
{ |
|
name: "all success with warning", |
|
states: CommitStatusStates{CommitStatusSuccess, CommitStatusSuccess, CommitStatusSuccess, CommitStatusWarning}, |
|
expected: CommitStatusSuccess, |
|
}, |
|
} |
|
|
|
for _, tt := range tests { |
|
t.Run(tt.name, func(t *testing.T) { |
|
result := tt.states.Combine() |
|
if result != tt.expected { |
|
t.Errorf("expected %v, got %v", tt.expected, result) |
|
} |
|
}) |
|
} |
|
}
|
|
|