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)
| 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. |
| 167 | func 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) |
nothing calls this directly
no test coverage detected