Files
keyhunter/pkg/providers/schema_test.go
salvacybersec 499f5d5025 test(05-01): add failing tests for extended VerifySpec
- New canonical fields: SuccessCodes, FailureCodes, RateLimitCodes, MetadataPaths, Body
- EffectiveSuccessCodes/FailureCodes/RateLimitCodes fallback logic
- Legacy ValidStatus/InvalidStatus still parse
2026-04-05 15:39:35 +03:00

80 lines
2.3 KiB
Go

package providers
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/yaml.v3"
)
type verifyWrapper struct {
Verify VerifySpec `yaml:"verify"`
}
func TestVerifySpec_NewFieldsParse(t *testing.T) {
y := `
verify:
method: POST
url: https://api.example.com/v1/models
headers:
Authorization: "Bearer {{KEY}}"
body: '{"api_key":"{{KEY}}"}'
success_codes: [200, 201]
failure_codes: [401, 403]
rate_limit_codes: [429, 529]
metadata_paths:
org: organization.name
tier: rate_limit.tier
`
var w verifyWrapper
require.NoError(t, yaml.Unmarshal([]byte(y), &w))
assert.Equal(t, "POST", w.Verify.Method)
assert.Equal(t, `{"api_key":"{{KEY}}"}`, w.Verify.Body)
assert.Equal(t, []int{200, 201}, w.Verify.SuccessCodes)
assert.Equal(t, []int{401, 403}, w.Verify.FailureCodes)
assert.Equal(t, []int{429, 529}, w.Verify.RateLimitCodes)
assert.Equal(t, "organization.name", w.Verify.MetadataPaths["org"])
assert.Equal(t, "rate_limit.tier", w.Verify.MetadataPaths["tier"])
}
func TestVerifySpec_LegacyFieldsStillWork(t *testing.T) {
y := `
verify:
method: GET
url: https://api.example.com/v1/models
valid_status: [200, 204]
invalid_status: [401, 403, 404]
`
var w verifyWrapper
require.NoError(t, yaml.Unmarshal([]byte(y), &w))
assert.Equal(t, []int{200, 204}, w.Verify.ValidStatus)
assert.Equal(t, []int{401, 403, 404}, w.Verify.InvalidStatus)
// Effective* should fall back to legacy when canonical fields are empty
assert.Equal(t, []int{200, 204}, w.Verify.EffectiveSuccessCodes())
assert.Equal(t, []int{401, 403, 404}, w.Verify.EffectiveFailureCodes())
assert.Equal(t, []int{429}, w.Verify.EffectiveRateLimitCodes())
}
func TestVerifySpec_Defaults(t *testing.T) {
var v VerifySpec
assert.Equal(t, []int{200}, v.EffectiveSuccessCodes())
assert.Equal(t, []int{401, 403}, v.EffectiveFailureCodes())
assert.Equal(t, []int{429}, v.EffectiveRateLimitCodes())
}
func TestVerifySpec_CanonicalFieldsPreferred(t *testing.T) {
v := VerifySpec{
SuccessCodes: []int{201},
FailureCodes: []int{400},
RateLimitCodes: []int{503},
ValidStatus: []int{200},
InvalidStatus: []int{401},
}
assert.Equal(t, []int{201}, v.EffectiveSuccessCodes())
assert.Equal(t, []int{400}, v.EffectiveFailureCodes())
assert.Equal(t, []int{503}, v.EffectiveRateLimitCodes())
}