mirror of
https://github.com/syntrex-lab/gomcp.git
synced 2026-04-25 20:36:21 +02:00
- Rename Go module: sentinel-community/gomcp -> syntrex/gomcp (50+ files) - Rename npm package: sentinel-dashboard -> syntrex-dashboard - Update Cargo.toml repository URL to syntrex/syntrex - Update all doc references from DmitrL-dev/AISecurity to syntrex - Add root Makefile (build-all, test-all, lint-all, clean-all) - Add MIT LICENSE - Add .editorconfig (Go/Rust/TS/C cross-language) - Add .github/workflows/ci.yml (Go + Rust + Dashboard) - Add dashboard next.config.ts and .env.example - Clean ARCHITECTURE.md: remove brain/immune/strike/micro-swarm, fix 61->67 engines
160 lines
4.3 KiB
Go
160 lines
4.3 KiB
Go
package tools
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/syntrex/gomcp/internal/domain/memory"
|
|
"github.com/syntrex/gomcp/internal/infrastructure/sqlite"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func newTestFactService(t *testing.T) *FactService {
|
|
t.Helper()
|
|
db, err := sqlite.OpenMemory()
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() { db.Close() })
|
|
|
|
repo, err := sqlite.NewFactRepo(db)
|
|
require.NoError(t, err)
|
|
|
|
return NewFactService(repo, nil)
|
|
}
|
|
|
|
func TestFactService_AddFact(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
fact, err := svc.AddFact(ctx, AddFactParams{
|
|
Content: "Go is fast",
|
|
Level: 0,
|
|
Domain: "core",
|
|
Module: "engine",
|
|
CodeRef: "main.go:42",
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotNil(t, fact)
|
|
|
|
assert.Equal(t, "Go is fast", fact.Content)
|
|
assert.Equal(t, memory.LevelProject, fact.Level)
|
|
assert.Equal(t, "core", fact.Domain)
|
|
}
|
|
|
|
func TestFactService_AddFact_InvalidLevel(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
_, err := svc.AddFact(ctx, AddFactParams{Content: "test", Level: 99})
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestFactService_GetFact(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
fact, err := svc.AddFact(ctx, AddFactParams{Content: "test", Level: 0})
|
|
require.NoError(t, err)
|
|
|
|
got, err := svc.GetFact(ctx, fact.ID)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, fact.ID, got.ID)
|
|
}
|
|
|
|
func TestFactService_UpdateFact(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
fact, err := svc.AddFact(ctx, AddFactParams{Content: "original", Level: 0})
|
|
require.NoError(t, err)
|
|
|
|
newContent := "updated"
|
|
updated, err := svc.UpdateFact(ctx, UpdateFactParams{
|
|
ID: fact.ID,
|
|
Content: &newContent,
|
|
})
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "updated", updated.Content)
|
|
}
|
|
|
|
func TestFactService_DeleteFact(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
fact, err := svc.AddFact(ctx, AddFactParams{Content: "delete me", Level: 0})
|
|
require.NoError(t, err)
|
|
|
|
err = svc.DeleteFact(ctx, fact.ID)
|
|
require.NoError(t, err)
|
|
|
|
_, err = svc.GetFact(ctx, fact.ID)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestFactService_ListFacts_ByDomain(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "f1", Level: 0, Domain: "backend"})
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "f2", Level: 1, Domain: "backend"})
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "f3", Level: 0, Domain: "frontend"})
|
|
|
|
facts, err := svc.ListFacts(ctx, ListFactsParams{Domain: "backend"})
|
|
require.NoError(t, err)
|
|
assert.Len(t, facts, 2)
|
|
}
|
|
|
|
func TestFactService_SearchFacts(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "Go concurrency", Level: 0})
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "Python is slow", Level: 0})
|
|
|
|
results, err := svc.SearchFacts(ctx, "Go", 10)
|
|
require.NoError(t, err)
|
|
assert.Len(t, results, 1)
|
|
}
|
|
|
|
func TestFactService_GetStats(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "f1", Level: 0, Domain: "core"})
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "f2", Level: 1, Domain: "core"})
|
|
|
|
stats, err := svc.GetStats(ctx)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 2, stats.TotalFacts)
|
|
}
|
|
|
|
func TestFactService_GetL0Facts(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "L0 fact", Level: 0})
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "L1 fact", Level: 1})
|
|
|
|
facts, err := svc.GetL0Facts(ctx)
|
|
require.NoError(t, err)
|
|
assert.Len(t, facts, 1)
|
|
assert.Equal(t, "L0 fact", facts[0].Content)
|
|
}
|
|
|
|
func TestFactService_ListDomains(t *testing.T) {
|
|
svc := newTestFactService(t)
|
|
ctx := context.Background()
|
|
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "f1", Level: 0, Domain: "backend"})
|
|
_, _ = svc.AddFact(ctx, AddFactParams{Content: "f2", Level: 0, Domain: "frontend"})
|
|
|
|
domains, err := svc.ListDomains(ctx)
|
|
require.NoError(t, err)
|
|
assert.Len(t, domains, 2)
|
|
}
|
|
|
|
func TestToJSON(t *testing.T) {
|
|
result := ToJSON(map[string]string{"key": "value"})
|
|
assert.Contains(t, result, "\"key\"")
|
|
assert.Contains(t, result, "\"value\"")
|
|
}
|