Parent directory

repo_visibility_webhook_test.go

1773 bytes
 1package backend
 2
 3import (
 4	"context"
 5	"testing"
 6
 7	"github.com/charmbracelet/soft-serve/pkg/config"
 8	"github.com/charmbracelet/soft-serve/pkg/db"
 9	"github.com/charmbracelet/soft-serve/pkg/proto"
10	"github.com/charmbracelet/soft-serve/pkg/store"
11	"github.com/charmbracelet/soft-serve/pkg/webhook"
12	"github.com/matryer/is"
13)
14
15// TestSetPrivateWebhookOnlyOnChange verifies that the visibility change
16// webhook fires when visibility changes and not when it is set to the
17// value it already has.
18func TestSetPrivateWebhookOnlyOnChange(t *testing.T) {
19	is := is.New(t)
20	be, cfg := newTestBackend(t)
21
22	ctx := context.Background()
23	ctx = config.WithContext(ctx, cfg)
24	ctx = db.WithContext(ctx, be.db)
25	ctx = store.WithContext(ctx, be.store)
26	admin, err := be.User(ctx, "admin")
27	is.NoErr(err)
28	ctx = proto.WithUserContext(ctx, admin)
29
30	repo, err := be.CreateRepository(ctx, "repo", nil, proto.RepositoryOptions{})
31	is.NoErr(err)
32
33	// Deliveries to this address fail fast, but are still recorded.
34	var hookID int64
35	is.NoErr(be.db.TransactionContext(ctx, func(tx *db.Tx) error {
36		hookID, err = be.store.CreateWebhook(ctx, tx, repo.ID(), "http://127.0.0.1:1/", "", int(webhook.ContentTypeJSON), true)
37		if err != nil {
38			return err
39		}
40		return be.store.CreateWebhookEvents(ctx, tx, hookID, []int{int(webhook.EventRepositoryVisibilityChange)})
41	}))
42
43	deliveries := func() int {
44		ds, err := be.store.ListWebhookDeliveriesByWebhookID(ctx, be.db, hookID)
45		is.NoErr(err)
46		return len(ds)
47	}
48
49	is.NoErr(be.SetPrivate(ctx, "repo", false))
50	is.Equal(deliveries(), 0)
51
52	is.NoErr(be.SetPrivate(ctx, "repo", true))
53	is.Equal(deliveries(), 1)
54
55	is.NoErr(be.SetPrivate(ctx, "repo", true))
56	is.Equal(deliveries(), 1)
57
58	is.NoErr(be.SetPrivate(ctx, "repo", false))
59	is.Equal(deliveries(), 2)
60}