Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
Go
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495package db
import ( "context" "fmt" "path/filepath" "testing"
"github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/spindle/models")
func TestWebhookSmoke(t *testing.T) { d, err := Make(context.Background(), filepath.Join(t.TempDir(), "test.db")) if err != nil { t.Fatalf("make db: %v", err) }
repoDid := syntax.DID("did:plc:repo123") if err := d.AddRepo(Repo{ Knot: "knot.example", Owner: "did:plc:owner", Rkey: "r1", RepoDid: repoDid, Name: "myrepo", CreatedAt: "2024-01-01T00:00:00Z", }); err != nil { t.Fatalf("add repo: %v", err) } got, err := d.GetRepoByDid(repoDid) if err != nil || got.Name != "myrepo" { t.Fatalf("get repo: %+v err=%v", got, err) }
wh := &models.Webhook{RepoDid: repoDid, Url: "https://example.com/hook", Active: true, Events: []string{"push", "pull_request:created"}} created, err := d.AddWebhook(context.Background(), wh, 0, 0) if err != nil || !created || wh.Id == 0 { t.Fatalf("add webhook: created=%v id=%d err=%v", created, wh.Id, err) }
if created, err := d.AddWebhook(context.Background(), &models.Webhook{ RepoDid: repoDid, Url: "https://example.com/second", Active: true, Events: []string{"push"}, }, 1, 0); err != nil || created { t.Fatalf("expected repo limit to refuse the second webhook: created=%v err=%v", created, err) } if created, err := d.AddWebhook(context.Background(), &models.Webhook{ RepoDid: repoDid, Url: "https://example.com/third", Active: true, Events: []string{"push"}, }, 0, 1); err != nil || created { t.Fatalf("expected owner limit to refuse the second webhook: created=%v err=%v", created, err) } active, err := d.GetActiveWebhooksForRepo(repoDid) if err != nil || len(active) != 1 || !active[0].HasEvent(models.WebhookEventPush) { t.Fatalf("active webhooks: %+v err=%v", active, err) }
dv := &models.WebhookDelivery{WebhookId: wh.Id, Event: "push", DeliveryId: "uuid-1", Url: wh.Url, RequestBody: "{}", Success: true, ResponseCode: 200} if err := d.AddWebhookDelivery(dv); err != nil { t.Fatalf("add delivery: %v", err) } list, err := d.GetWebhookDeliveriesForWebhooks(repoDid, []int64{wh.Id}, 10) if err != nil || len(list) != 1 { t.Fatalf("deliveries: %d err=%v", len(list), err) }
for i := range 3 { if err := d.AddWebhookDelivery(&models.WebhookDelivery{ WebhookId: wh.Id, Event: "push", DeliveryId: fmt.Sprintf("uuid-%d", i+2), Url: wh.Url, RequestBody: "{}", Success: true, ResponseCode: 200, }); err != nil { t.Fatalf("add delivery %d: %v", i, err) } } forHooks, err := d.GetWebhookDeliveriesForWebhooks(repoDid, []int64{wh.Id}, 2) if err != nil { t.Fatalf("bulk deliveries: %v", err) } if len(forHooks) != 2 { t.Fatalf("expected 2 newest deliveries, got %d", len(forHooks)) } if forHooks[0].DeliveryId != "uuid-4" || forHooks[0].WebhookId != wh.Id { t.Fatalf("unexpected newest delivery: %+v", forHooks[0]) } if got, err := d.GetWebhookDeliveriesForWebhooks(repoDid, []int64{wh.Id + 999}, 2); err != nil || len(got) != 0 { t.Fatalf("expected no deliveries for an unknown webhook: got=%d err=%v", len(got), err) } byId, err := d.GetWebhookDelivery("uuid-1") if err != nil || !byId.Success || byId.ResponseCode != 200 { t.Fatalf("delivery by id: %+v err=%v", byId, err) }
// cascade: deleting the webhook removes its deliveries if err := d.DeleteWebhook(wh.Id); err != nil { t.Fatalf("delete webhook: %v", err) } if left, _ := d.GetWebhookDeliveriesForWebhooks(repoDid, []int64{wh.Id}, 10); len(left) != 0 { t.Fatalf("expected deliveries cascade-deleted, got %d", len(left)) }}