79 lines
3.4 KiB
Go
79 lines
3.4 KiB
Go
package extension_test
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
|
|
"agent-system-backend/pkg/extension"
|
|
)
|
|
|
|
// publicRegulationsProvider is a downstream provider built only from the
|
|
// public extension surface.
|
|
type publicRegulationsProvider struct{}
|
|
|
|
func (publicRegulationsProvider) SearchRegulations(context.Context, extension.RegulationsCaller, extension.RegulationsSearchRequest) (extension.RegulationsSearchResult, error) {
|
|
return extension.RegulationsSearchResult{State: extension.RegulationsStateEmpty}, nil
|
|
}
|
|
|
|
func (publicRegulationsProvider) ResolveRegulationEvidence(context.Context, extension.RegulationsCaller, extension.RegulationEvidenceRequest) (extension.RegulationEvidence, error) {
|
|
return extension.RegulationEvidence{Disclosure: extension.RegulationDisclosureMetadataOnly}, nil
|
|
}
|
|
|
|
func (publicRegulationsProvider) SearchWeb(context.Context, extension.RegulationsCaller, extension.WebSearchRequest) (extension.WebSearchResult, error) {
|
|
return extension.WebSearchResult{State: extension.WebSearchStateUnavailable}, nil
|
|
}
|
|
|
|
func (publicRegulationsProvider) CaptureWeb(context.Context, extension.RegulationsCaller, extension.WebCaptureRequest) (extension.WebCapture, error) {
|
|
return extension.WebCapture{State: extension.WebCaptureStateFailed}, nil
|
|
}
|
|
|
|
var _ extension.RegulationsProvider = publicRegulationsProvider{}
|
|
|
|
func TestRegulationsContractIsOptional(t *testing.T) {
|
|
var host extension.Host
|
|
if _, ok := host.(extension.RegulationsHost); ok {
|
|
t.Fatal("nil host must not expose regulations")
|
|
}
|
|
var registry extension.Registry
|
|
if _, ok := registry.(extension.RegulationsRegistrar); ok {
|
|
t.Fatal("nil registry must not expose regulations registration")
|
|
}
|
|
if extension.RegulationsSchemaVersion != 1 {
|
|
t.Fatalf("schema version = %d", extension.RegulationsSchemaVersion)
|
|
}
|
|
if extension.ErrRegulationsUnavailable == nil {
|
|
t.Fatal("unavailable error must be defined")
|
|
}
|
|
}
|
|
|
|
func TestRegulationsWireNames(t *testing.T) {
|
|
states := []string{extension.RegulationsStateOK, extension.RegulationsStateEmpty, extension.RegulationsStateDegraded,
|
|
extension.RegulationsStateUnavailable, extension.RegulationDisclosureFull, extension.RegulationDisclosureExcerpt,
|
|
extension.RegulationDisclosureMetadataOnly, extension.RegulationDisclosureWithheld, extension.WebSearchStateOK,
|
|
extension.WebSearchStateEmpty, extension.WebSearchStateUnavailable, extension.WebSearchStateRateLimited,
|
|
extension.WebSearchStateRejected, extension.WebSearchStateError, extension.WebCaptureStateCaptured,
|
|
extension.WebCaptureStateRejected, extension.WebCaptureStateFailed, extension.WebRetentionFull,
|
|
extension.WebRetentionExcerpt, extension.WebRetentionMetadataOnly}
|
|
want := "ok empty degraded unavailable full excerpt metadata_only withheld ok empty unavailable rate_limited " +
|
|
"rejected error captured rejected failed full excerpt metadata_only"
|
|
if got := strings.Join(states, " "); got != want {
|
|
t.Fatalf("wire states = %q", got)
|
|
}
|
|
raw, err := json.Marshal(extension.WebSearchRequest{SchemaVersion: extension.RegulationsSchemaVersion, Query: "q"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if string(raw) != `{"schemaVersion":1,"query":"q"}` {
|
|
t.Fatalf("optional fields not omitted: %s", raw)
|
|
}
|
|
raw, err = json.Marshal(extension.RegulationsCaller{PluginID: "rdm", Owner: "alice"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(strings.ToLower(string(raw)), "project") {
|
|
t.Fatalf("caller must not carry a project: %s", raw)
|
|
}
|
|
}
|