MCPcopy Index your code
hub / github.com/coder/coder / TestWebhookDispatch

Function TestWebhookDispatch

coderd/notifications/notifications_test.go:193–265  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

191}
192
193func TestWebhookDispatch(t *testing.T) {
194 t.Parallel()
195
196 // SETUP
197
198 ctx := dbauthz.AsNotifier(testutil.Context(t, testutil.WaitSuperLong))
199 store, pubsub := dbtestutil.NewDB(t)
200 logger := testutil.Logger(t)
201
202 sent := make(chan dispatch.WebhookPayload, 1)
203 // Mock server to simulate webhook endpoint.
204 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
205 var payload dispatch.WebhookPayload
206 err := json.NewDecoder(r.Body).Decode(&payload)
207 assert.NoError(t, err)
208 assert.Equal(t, "application/json", r.Header.Get("Content-Type"))
209
210 w.WriteHeader(http.StatusOK)
211 _, err = w.Write([]byte("noted."))
212 assert.NoError(t, err)
213 sent <- payload
214 }))
215 defer server.Close()
216
217 endpoint, err := url.Parse(server.URL)
218 require.NoError(t, err)
219
220 // GIVEN: a webhook setup referencing a mock HTTP server to receive the webhook
221 cfg := defaultNotificationsConfig(database.NotificationMethodWebhook)
222 cfg.Webhook = codersdk.NotificationsWebhookConfig{
223 Endpoint: *serpent.URLOf(endpoint),
224 }
225 mgr, err := notifications.NewManager(cfg, store, pubsub, defaultHelpers(), createMetrics(), logger.Named("manager"))
226 require.NoError(t, err)
227 t.Cleanup(func() {
228 assert.NoError(t, mgr.Stop(ctx))
229 })
230 enq, err := notifications.NewStoreEnqueuer(cfg, store, defaultHelpers(), logger.Named("enqueuer"), quartz.NewReal())
231 require.NoError(t, err)
232
233 const (
234 email = "bob@coder.com"
235 name = "Robert McBobbington"
236 username = "bob"
237 )
238 user := dbgen.User(t, store, database.User{
239 Email: email,
240 Username: username,
241 Name: name,
242 })
243
244 // WHEN: a notification is enqueued (including arbitrary labels)
245 input := map[string]string{
246 "a": "b",
247 "c": "d",
248 }
249 msgID, err := enq.Enqueue(ctx, user.ID, notifications.TemplateWorkspaceDeleted, input, "test")
250 require.NoError(t, err)

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
StopMethod · 0.95
EnqueueMethod · 0.95
RunMethod · 0.95
AsNotifierFunction · 0.92
ContextFunction · 0.92
NewDBFunction · 0.92
LoggerFunction · 0.92
NewManagerFunction · 0.92
NewStoreEnqueuerFunction · 0.92
UserFunction · 0.92
TryReceiveFunction · 0.92

Tested by

no test coverage detected