yao/sui/test/types.go
Max a1e745ec90 chore(tests): update model versions in Anthropic tests and add Test command to SUI
- Updated testConnectorID comment and model version in TestAnthropicStreamRetry to reflect the latest model (Claude Haiku 4.5).
- Added Test command to the SUI command set with associated flags for improved testing capabilities.
2026-04-24 08:45:19 +08:00

110 lines
3.2 KiB
Go

package test
import (
"time"
jsoniter "github.com/json-iterator/go"
"github.com/yaoapp/gou/application"
"github.com/yaoapp/yao/sui/core"
)
// Options holds configuration for a SUI backend test run
type Options struct {
SUIID string `json:"sui_id"`
Template string `json:"template"`
Page string `json:"page,omitempty"`
Run string `json:"run,omitempty"`
Data string `json:"data,omitempty"`
Verbose bool `json:"verbose,omitempty"`
JSON bool `json:"json,omitempty"`
FailFast bool `json:"fail_fast,omitempty"`
Timeout time.Duration `json:"timeout,omitempty"`
}
// PageTestInfo describes a page that has backend tests
type PageTestInfo struct {
Route string `json:"route"`
Name string `json:"name"`
BackendFile string `json:"backend_file"`
TestFile string `json:"test_file"`
PageConfigFile string `json:"page_config_file,omitempty"`
Prefix string `json:"prefix"`
}
// TestCase represents a single test function discovered in a backend_test.ts file
type TestCase struct {
Name string `json:"name"`
Function string `json:"function"`
}
// TestResult represents the outcome of a single test function
type TestResult struct {
Name string `json:"name"`
Status string `json:"status"`
DurationMs int64 `json:"duration_ms"`
Error string `json:"error,omitempty"`
Assertion *AssertionInfo `json:"assertion,omitempty"`
Logs []string `json:"logs,omitempty"`
}
// AssertionInfo contains details about an assertion failure
type AssertionInfo struct {
Type string `json:"type"`
Expected interface{} `json:"expected,omitempty"`
Actual interface{} `json:"actual,omitempty"`
Message string `json:"message,omitempty"`
}
// TestSummary contains aggregated statistics
type TestSummary struct {
Total int `json:"total"`
Passed int `json:"passed"`
Failed int `json:"failed"`
Skipped int `json:"skipped"`
DurationMs int64 `json:"duration_ms"`
}
// Report represents the complete test report for yao sui test
type Report struct {
Type string `json:"type"`
SUIID string `json:"sui_id"`
Template string `json:"template"`
Summary *TestSummary `json:"summary"`
Pages []*PageReport `json:"pages"`
Metadata *TestMetadata `json:"metadata"`
}
// PageReport contains results for a single page
type PageReport struct {
Route string `json:"route"`
Results []*TestResult `json:"results"`
}
// TestMetadata contains metadata about the test run
type TestMetadata struct {
StartedAt time.Time `json:"started_at"`
CompletedAt time.Time `json:"completed_at"`
}
// HasFailures returns true if any tests failed
func (r *Report) HasFailures() bool {
return r.Summary.Failed > 0
}
// LoadPageConfig reads and parses a .cfg file for a SUI page
func LoadPageConfig(file string) (*core.PageConfig, error) {
if exist, _ := application.App.Exists(file); !exist {
return nil, nil
}
source, err := application.App.Read(file)
if err != nil {
return nil, err
}
cfg := core.PageConfig{}
if err := jsoniter.Unmarshal(source, &cfg); err != nil {
return nil, err
}
return &cfg, nil
}