52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
package synthetic
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.ilapage.cn/ila/yovision/Bell/server/app/event"
|
|
"git.ilapage.cn/ila/yovision/Bell/server/internal/platform"
|
|
"git.ilapage.cn/ila/yovision/Bell/server/migrations"
|
|
)
|
|
|
|
func TestInvalidFixturesAreStable(t *testing.T) {
|
|
service := Service{}
|
|
for _, name := range []string{"invalid-fields", "missing-evidence"} {
|
|
if _, err := service.Inject(context.Background(), Input{Fixture: name}); !errors.Is(err, ErrFixture) {
|
|
t.Fatalf("fixture %s: got %v", name, err)
|
|
}
|
|
}
|
|
}
|
|
func TestFixtureUsesEventService(t *testing.T) {
|
|
url := os.Getenv("BELL_TEST_DATABASE_URL")
|
|
if url == "" {
|
|
t.Skip("BELL_TEST_DATABASE_URL is not set")
|
|
}
|
|
ctx := context.Background()
|
|
db, err := platform.OpenDatabase(ctx, url)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer db.Close()
|
|
if err := migrations.Apply(ctx, db); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
service := Service{Events: event.Service{DB: db}}
|
|
source := fmt.Sprintf("synthetic-%d", time.Now().UnixNano())
|
|
first, err := service.Inject(ctx, Input{Fixture: "danger-zone", SourceEventID: source})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
second, err := service.Inject(ctx, Input{Fixture: "danger-zone", SourceEventID: source})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if first.Event.ID != second.Event.ID || !second.Duplicate {
|
|
t.Fatalf("fixture bypassed idempotency: %#v %#v", first, second)
|
|
}
|
|
}
|