mirror of
https://gitlab.com/TECHNOFAB/nixtest.git
synced 2026-11-01 13:12:19 +01:00
feat: add new assertions test type
This commit is contained in:
parent
6c4c1bace6
commit
17d08b9975
10 changed files with 603 additions and 16 deletions
|
|
@ -5,6 +5,8 @@ import (
|
|||
"fmt"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
|
|
@ -133,6 +135,8 @@ func (r *Runner) executeTest(spec types.TestSpec) types.TestResult {
|
|||
r.handleUnitTest(&result, spec, actual)
|
||||
case types.TestTypeScript:
|
||||
r.handleScriptTest(&result, spec)
|
||||
case types.TestTypeAssertions:
|
||||
r.handleAssertionsTest(&result, spec)
|
||||
default:
|
||||
result.Status = types.StatusError
|
||||
result.ErrorMessage = fmt.Sprintf("Invalid test type: %s", spec.Type)
|
||||
|
|
@ -193,6 +197,62 @@ func (r *Runner) handleScriptTest(result *types.TestResult, spec types.TestSpec)
|
|||
}
|
||||
}
|
||||
|
||||
// handleAssertionsTest processes assertions type tests
|
||||
func (r *Runner) handleAssertionsTest(result *types.TestResult, spec types.TestSpec) {
|
||||
if len(spec.Assertions) == 0 {
|
||||
result.Status = types.StatusError
|
||||
result.ErrorMessage = "No assertions defined for test"
|
||||
return
|
||||
}
|
||||
|
||||
total := len(spec.Assertions)
|
||||
failed := 0
|
||||
errored := 0
|
||||
|
||||
names := make([]string, 0, total)
|
||||
for name := range spec.Assertions {
|
||||
names = append(names, name)
|
||||
}
|
||||
sort.Strings(names)
|
||||
|
||||
var sb strings.Builder
|
||||
for _, name := range names {
|
||||
assertRes := spec.Assertions[name]
|
||||
if assertRes.Ok {
|
||||
continue
|
||||
}
|
||||
if assertRes.Error {
|
||||
errored++
|
||||
} else {
|
||||
failed++
|
||||
}
|
||||
|
||||
if sb.Len() > 0 {
|
||||
sb.WriteString("\n\n")
|
||||
}
|
||||
fmt.Fprintf(&sb, "❌ \"%s\"", name)
|
||||
if assertRes.Message != "" {
|
||||
fmt.Fprintf(&sb, "\n %s", assertRes.Message)
|
||||
}
|
||||
if assertRes.Expected != "" {
|
||||
fmt.Fprintf(&sb, "\n Expected: %s", assertRes.Expected)
|
||||
}
|
||||
if assertRes.Actual != "" {
|
||||
fmt.Fprintf(&sb, "\n Actual: %s", assertRes.Actual)
|
||||
}
|
||||
}
|
||||
|
||||
if errored > 0 {
|
||||
result.Status = types.StatusError
|
||||
result.ErrorMessage = sb.String()
|
||||
} else if failed > 0 {
|
||||
result.Status = types.StatusFailure
|
||||
result.ErrorMessage = sb.String()
|
||||
} else {
|
||||
result.Status = types.StatusSuccess
|
||||
}
|
||||
}
|
||||
|
||||
// compareActualExpected performs the deep equality check and formats diffs
|
||||
func (r *Runner) compareActualExpected(result *types.TestResult, actual, expected any) {
|
||||
if reflect.DeepEqual(actual, expected) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue