Skip to content

Commit 632d57d

Browse files
committed
refactor: standardize webhook payload merging with nested params structure
1 parent 8db3b43 commit 632d57d

File tree

1 file changed

+74
-59
lines changed

1 file changed

+74
-59
lines changed

test/algora_web/controllers/webhooks/github_controller_test.exs

Lines changed: 74 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
109109
event_action: "issue_comment.created",
110110
user_type: :admin,
111111
body: "/bounty $100",
112-
params: %{"id" => comment_id}
112+
params: %{"comment" => %{"id" => comment_id}}
113113
}
114114
])
115115

@@ -123,7 +123,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
123123
event_action: "issue_comment.edited",
124124
user_type: :admin,
125125
body: "/bounty $200",
126-
params: %{"id" => comment_id}
126+
params: %{"comment" => %{"id" => comment_id}}
127127
}
128128
])
129129

@@ -138,7 +138,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
138138
event_action: "issue_comment.created",
139139
user_type: :admin,
140140
body: "/bounty $100",
141-
params: %{"id" => comment_id}
141+
params: %{"comment" => %{"id" => comment_id}}
142142
}
143143
])
144144

@@ -152,7 +152,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
152152
event_action: "issue_comment.created",
153153
user_type: :admin,
154154
body: "/bounty $200",
155-
params: %{"id" => comment_id + 1}
155+
params: %{"comment" => %{"id" => comment_id + 1}}
156156
}
157157
])
158158

@@ -170,13 +170,13 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
170170
event_action: "issue_comment.created",
171171
user_type: :admin,
172172
body: "/bounty $100",
173-
params: %{"number" => issue_number}
173+
params: %{"issue" => %{"number" => issue_number}}
174174
},
175175
%{
176176
event_action: "pull_request.opened",
177177
user_type: :unauthorized,
178178
body: "/claim #{issue_number} /split @jsmith /split @jdoe",
179-
params: %{"number" => pr_number}
179+
params: %{"pull_request" => %{"number" => pr_number}}
180180
}
181181
])
182182

@@ -198,19 +198,19 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
198198
event_action: "issue_comment.created",
199199
user_type: :admin,
200200
body: "/bounty $100",
201-
params: %{"number" => issue_number}
201+
params: %{"issue" => %{"number" => issue_number}}
202202
},
203203
%{
204204
event_action: "pull_request.opened",
205205
user_type: :unauthorized,
206206
body: "/claim #{issue_number}",
207-
params: %{"number" => pr_number}
207+
params: %{"pull_request" => %{"number" => pr_number}}
208208
},
209209
%{
210210
event_action: "pull_request.edited",
211211
user_type: :unauthorized,
212212
body: "/claim #{issue_number}",
213-
params: %{"number" => pr_number}
213+
params: %{"pull_request" => %{"number" => pr_number}}
214214
}
215215
])
216216

@@ -227,13 +227,13 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
227227
event_action: "issue_comment.created",
228228
user_type: :admin,
229229
body: "/bounty $100",
230-
params: %{"number" => issue_number1}
230+
params: %{"issue" => %{"number" => issue_number1}}
231231
},
232232
%{
233233
event_action: "issue_comment.created",
234234
user_type: :admin,
235235
body: "/bounty $100",
236-
params: %{"number" => issue_number2}
236+
params: %{"issue" => %{"number" => issue_number2}}
237237
}
238238
])
239239

@@ -242,7 +242,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
242242
event_action: "pull_request.opened",
243243
user_type: :unauthorized,
244244
body: "/claim #{issue_number1} /claim #{issue_number2}",
245-
params: %{"number" => pr_number}
245+
params: %{"pull_request" => %{"number" => pr_number}}
246246
}
247247
])
248248

@@ -259,7 +259,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
259259
event_action: "issue_comment.created",
260260
user_type: :admin,
261261
body: "/bounty $100",
262-
params: %{"number" => issue_number1}
262+
params: %{"issue" => %{"number" => issue_number1}}
263263
}
264264
])
265265

@@ -268,7 +268,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
268268
event_action: "pull_request.opened",
269269
user_type: :unauthorized,
270270
body: "/claim #{issue_number1}",
271-
params: %{"number" => pr_number}
271+
params: %{"pull_request" => %{"number" => pr_number}}
272272
}
273273
])
274274

@@ -277,7 +277,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
277277
event_action: "pull_request.opened",
278278
user_type: :unauthorized,
279279
body: "/claim #{issue_number2}",
280-
params: %{"number" => pr_number}
280+
params: %{"pull_request" => %{"number" => pr_number}}
281281
}
282282
])
283283

@@ -297,7 +297,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
297297
event_action: "issue_comment.created",
298298
user_type: :admin,
299299
body: "/bounty $100",
300-
params: %{"number" => issue_number}
300+
params: %{"issue" => %{"number" => issue_number}}
301301
}
302302
])
303303

@@ -308,7 +308,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
308308
event_action: "pull_request.opened",
309309
user_type: :unauthorized,
310310
body: "/claim #{issue_number}",
311-
params: %{"number" => pr_number}
311+
params: %{"pull_request" => %{"number" => pr_number}}
312312
}
313313
])
314314

@@ -320,7 +320,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
320320
event_action: "pull_request.edited",
321321
user_type: :unauthorized,
322322
body: "/claim #{issue_number} /split @jsmith",
323-
params: %{"number" => pr_number}
323+
params: %{"pull_request" => %{"number" => pr_number}}
324324
}
325325
])
326326

@@ -337,7 +337,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
337337
event_action: "pull_request.edited",
338338
user_type: :unauthorized,
339339
body: "/claim #{issue_number} /split @jdoe",
340-
params: %{"number" => pr_number}
340+
params: %{"pull_request" => %{"number" => pr_number}}
341341
}
342342
])
343343

@@ -356,7 +356,7 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
356356
event_action: "pull_request.edited",
357357
user_type: :unauthorized,
358358
body: "",
359-
params: %{"number" => pr_number}
359+
params: %{"pull_request" => %{"number" => pr_number}}
360360
}
361361
])
362362

@@ -378,19 +378,19 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
378378
event_action: "issue_comment.created",
379379
user_type: :admin,
380380
body: "/bounty $100",
381-
params: %{"number" => issue_number}
381+
params: %{"issue" => %{"number" => issue_number}}
382382
},
383383
%{
384384
event_action: "pull_request.opened",
385385
user_type: :unauthorized,
386386
body: "/claim #{issue_number}",
387-
params: %{"number" => pr_number}
387+
params: %{"pull_request" => %{"number" => pr_number}}
388388
},
389389
%{
390390
event_action: "pull_request.closed",
391391
user_type: :unauthorized,
392392
body: "/claim #{issue_number}",
393-
params: %{"number" => pr_number, "merged_at" => nil}
393+
params: %{"pull_request" => %{"number" => pr_number, "merged_at" => nil}}
394394
}
395395
])
396396

@@ -406,19 +406,19 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
406406
event_action: "issue_comment.created",
407407
user_type: :admin,
408408
body: "/bounty $100",
409-
params: %{"number" => issue_number}
409+
params: %{"issue" => %{"number" => issue_number}}
410410
},
411411
%{
412412
event_action: "pull_request.opened",
413413
user_type: :unauthorized,
414414
body: "fixes #{issue_number}",
415-
params: %{"number" => pr_number}
415+
params: %{"pull_request" => %{"number" => pr_number}}
416416
},
417417
%{
418418
event_action: "pull_request.closed",
419419
user_type: :unauthorized,
420420
body: "fixes #{issue_number}",
421-
params: %{"number" => pr_number, "merged_at" => DateTime.to_iso8601(DateTime.utc_now())}
421+
params: %{"pull_request" => %{"number" => pr_number, "merged_at" => DateTime.to_iso8601(DateTime.utc_now())}}
422422
}
423423
])
424424

@@ -434,19 +434,19 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
434434
event_action: "issue_comment.created",
435435
user_type: :admin,
436436
body: "/bounty $100",
437-
params: %{"number" => issue_number}
437+
params: %{"issue" => %{"number" => issue_number}}
438438
},
439439
%{
440440
event_action: "pull_request.opened",
441441
user_type: :unauthorized,
442442
body: "/claim #{issue_number}",
443-
params: %{"number" => pr_number}
443+
params: %{"pull_request" => %{"number" => pr_number}}
444444
},
445445
%{
446446
event_action: "pull_request.closed",
447447
user_type: :unauthorized,
448448
body: "/claim #{issue_number}",
449-
params: %{"number" => pr_number, "merged_at" => DateTime.to_iso8601(DateTime.utc_now())}
449+
params: %{"pull_request" => %{"number" => pr_number, "merged_at" => DateTime.to_iso8601(DateTime.utc_now())}}
450450
}
451451
])
452452

@@ -507,39 +507,53 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
507507
}
508508
end
509509

510+
defp merge_payload(base_payload, params) do
511+
Map.new(base_payload, fn {key, base_value} ->
512+
case {base_value, get_in(params || %{}, [key])} do
513+
{base_map, override_map} when is_map(base_map) and is_map(override_map) ->
514+
{key, Map.merge(base_map, override_map)}
515+
516+
_ ->
517+
{key, base_value}
518+
end
519+
end)
520+
end
521+
510522
defp mock_payload(%{event: "issue_comment"} = ctx) do
511523
ctx
512524
|> mock_base_payload()
513-
|> Map.merge(%{
514-
"comment" =>
515-
Map.merge(
516-
%{
525+
|> Map.merge(
526+
merge_payload(
527+
%{
528+
"comment" => %{
517529
"id" => 123,
518530
"body" => mock_body(ctx[:body]),
519531
"user" => mock_user(ctx[:author])
520532
},
521-
ctx[:params]
522-
),
523-
"issue" => %{
524-
"id" => 123,
525-
"number" => 123,
526-
"body" => mock_body(),
527-
"user" => mock_user(ctx[:admin])
528-
}
529-
})
533+
"issue" => %{
534+
"id" => 123,
535+
"number" => 123,
536+
"body" => mock_body(),
537+
"user" => mock_user(ctx[:admin])
538+
}
539+
},
540+
ctx[:params]
541+
)
542+
)
530543
end
531544

532545
defp mock_payload(%{event: "issues"} = ctx) do
533546
ctx
534547
|> mock_base_payload()
535-
|> Map.put(
536-
"issue",
537-
Map.merge(
538-
%{
539-
"id" => 123,
540-
"number" => 123,
541-
"body" => mock_body(ctx[:body]),
542-
"user" => mock_user(ctx[:author])
548+
|> Map.merge(
549+
merge_payload(
550+
%{
551+
"issue" => %{
552+
"id" => 123,
553+
"number" => 123,
554+
"body" => mock_body(ctx[:body]),
555+
"user" => mock_user(ctx[:author])
556+
}
543557
},
544558
ctx[:params]
545559
)
@@ -549,15 +563,16 @@ defmodule AlgoraWeb.Webhooks.GithubControllerTest do
549563
defp mock_payload(%{event: "pull_request"} = ctx) do
550564
ctx
551565
|> mock_base_payload()
552-
|> Map.put(
553-
"pull_request",
554-
Map.merge(
555-
%{
556-
"id" => 123,
557-
"number" => 123,
558-
"body" => mock_body(ctx[:body]),
559-
"user" => mock_user(ctx[:author]),
560-
"merged_at" => nil
566+
|> Map.merge(
567+
merge_payload(
568+
%{
569+
"pull_request" => %{
570+
"id" => 123,
571+
"number" => 123,
572+
"body" => mock_body(ctx[:body]),
573+
"user" => mock_user(ctx[:author]),
574+
"merged_at" => nil
575+
}
561576
},
562577
ctx[:params]
563578
)

0 commit comments

Comments
 (0)