MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestWebhookWinningRevChangedEvent

Function TestWebhookWinningRevChangedEvent

rest/changes_test.go:167–256  ·  view source on GitHub ↗

TestWebhookWinningRevChangedEvent ensures the winning_rev_changed event is only fired for a winning revision change, and checks that document_changed is always fired.

(t *testing.T)

Source from the content-addressed store, hash-verified

165
166// TestWebhookWinningRevChangedEvent ensures the winning_rev_changed event is only fired for a winning revision change, and checks that document_changed is always fired.
167func TestWebhookWinningRevChangedEvent(t *testing.T) {
168
169 base.SetUpTestLogging(t, base.LevelDebug, base.KeyHTTP, base.KeyEvents)
170
171 wg := sync.WaitGroup{}
172
173 var WinningRevChangedCount uint32
174 var DocumentChangedCount uint32
175
176 handler := func(w http.ResponseWriter, r *http.Request) {
177 var body db.Body
178 d := base.JSONDecoder(r.Body)
179 require.NoError(t, d.Decode(&body))
180 require.Contains(t, body, db.BodyId)
181 require.Contains(t, body, db.BodyRev)
182
183 event := r.URL.Query().Get("event")
184 switch event {
185 case "WinningRevChanged":
186 atomic.AddUint32(&WinningRevChangedCount, 1)
187 case "DocumentChanged":
188 atomic.AddUint32(&DocumentChangedCount, 1)
189 default:
190 t.Fatalf("unknown event type: %s", event)
191 }
192
193 wg.Done()
194 }
195
196 s := httptest.NewServer(http.HandlerFunc(handler))
197 defer s.Close()
198
199 rtConfig := &RestTesterConfig{
200 DatabaseConfig: &DatabaseConfig{DbConfig: DbConfig{
201 EventHandlers: &EventHandlerConfig{
202 DocumentChanged: []*EventConfig{
203 {Url: s.URL + "?event=DocumentChanged", Filter: "function(doc){return true;}", HandlerType: "webhook"},
204 {Url: s.URL + "?event=WinningRevChanged", Filter: "function(doc){return true;}", HandlerType: "webhook",
205 Options: map[string]interface{}{db.EventOptionDocumentChangedWinningRevOnly: true},
206 },
207 },
208 },
209 },
210 }}
211 rt := NewRestTester(t, rtConfig)
212 defer rt.Close()
213
214 rt.GetDatabase().EnableAllowConflicts(rt.TB())
215
216 wg.Add(2)
217 const docID = "doc1"
218 version1 := rt.PutDoc(docID, `{"foo":"bar"}`)
219
220 // push winning branch
221 wg.Add(2)
222 res := rt.SendAdminRequest("PUT", "/{{.keyspace}}/doc1?new_edits=false", `{"foo":"buzz","_revisions":{"start":3,"ids":["buzz","bar","`+version1.RevTreeID+`"]}}`)
223 RequireStatus(t, res, http.StatusCreated)
224 winningVersion := DocVersionFromPutResponse(t, res)

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
GetDatabaseMethod · 0.95
TBMethod · 0.95
PutDocMethod · 0.95
SendAdminRequestMethod · 0.95
PutNewEditsFalseMethod · 0.95
DeleteDocMethod · 0.95
SetUpTestLoggingFunction · 0.92
JSONDecoderFunction · 0.92
NewRestTesterFunction · 0.85
RequireStatusFunction · 0.85

Tested by

no test coverage detected