@@ -219,6 +219,7 @@ async fn serve_req(
219
219
. unwrap ( ) ) ;
220
220
}
221
221
} ;
222
+ maybe_record_test ( & event, & payload) ;
222
223
223
224
match triagebot:: webhook ( event, payload, & ctx) . await {
224
225
Ok ( true ) => Ok ( Response :: new ( Body :: from ( "processed request" ) ) ) ,
@@ -233,6 +234,70 @@ async fn serve_req(
233
234
}
234
235
}
235
236
237
+ /// Webhook recording to help with writing server_test integration tests.
238
+ fn maybe_record_test ( event : & EventName , payload : & str ) {
239
+ if std:: env:: var_os ( "TRIAGEBOT_TEST_RECORD" ) . is_none ( ) {
240
+ return ;
241
+ }
242
+ let sequence_path = |name| {
243
+ let path = PathBuf :: from ( format ! ( "{name}.json" ) ) ;
244
+ if !path. exists ( ) {
245
+ return path;
246
+ }
247
+ let mut index = 1 ;
248
+ loop {
249
+ let path = PathBuf :: from ( format ! ( "{name}.{index}.json" ) ) ;
250
+ if !path. exists ( ) {
251
+ return path;
252
+ }
253
+ index += 1 ;
254
+ }
255
+ } ;
256
+ let payload_json: serde_json:: Value = serde_json:: from_str ( payload) . expect ( "valid json" ) ;
257
+ let name = match event {
258
+ EventName :: PullRequest => {
259
+ let action = payload_json[ "action" ] . as_str ( ) . unwrap ( ) ;
260
+ let number = payload_json[ "number" ] . as_u64 ( ) . unwrap ( ) ;
261
+ format ! ( "pr{number}_{action}" )
262
+ }
263
+ EventName :: PullRequestReview => {
264
+ let action = payload_json[ "action" ] . as_str ( ) . unwrap ( ) ;
265
+ let number = payload_json[ "pull_request" ] [ "number" ] . as_u64 ( ) . unwrap ( ) ;
266
+ format ! ( "pr{number}_review_{action}" )
267
+ }
268
+ EventName :: PullRequestReviewComment => {
269
+ let action = payload_json[ "action" ] . as_str ( ) . unwrap ( ) ;
270
+ let number = payload_json[ "pull_request" ] [ "number" ] . as_u64 ( ) . unwrap ( ) ;
271
+ format ! ( "pr{number}_review_comment_{action}" )
272
+ }
273
+ EventName :: IssueComment => {
274
+ let action = payload_json[ "action" ] . as_str ( ) . unwrap ( ) ;
275
+ let number = payload_json[ "issue" ] [ "number" ] . as_u64 ( ) . unwrap ( ) ;
276
+ format ! ( "issue{number}_comment_{action}" )
277
+ }
278
+ EventName :: Issue => {
279
+ let action = payload_json[ "action" ] . as_str ( ) . unwrap ( ) ;
280
+ let number = payload_json[ "issue" ] [ "number" ] . as_u64 ( ) . unwrap ( ) ;
281
+ format ! ( "issue{number}_{action}" )
282
+ }
283
+ EventName :: Push => {
284
+ let after = payload_json[ "after" ] . as_str ( ) . unwrap ( ) ;
285
+ format ! ( "push_{after}" )
286
+ }
287
+ EventName :: Create => {
288
+ let ref_type = payload_json[ "ref_type" ] . as_str ( ) . unwrap ( ) ;
289
+ let git_ref = payload_json[ "ref" ] . as_str ( ) . unwrap ( ) ;
290
+ format ! ( "create_{ref_type}_{git_ref}" )
291
+ }
292
+ EventName :: Other => {
293
+ return ;
294
+ }
295
+ } ;
296
+ let path = sequence_path ( name) ;
297
+ std:: fs:: write ( & path, payload) . unwrap ( ) ;
298
+ log:: info!( "recorded JSON payload to {:?}" , path) ;
299
+ }
300
+
236
301
async fn run_server ( addr : SocketAddr ) -> anyhow:: Result < ( ) > {
237
302
let pool = db:: ClientPool :: new ( ) ;
238
303
db:: run_migrations ( & * pool. get ( ) . await )
@@ -242,6 +307,9 @@ async fn run_server(addr: SocketAddr) -> anyhow::Result<()> {
242
307
// spawning a background task that will schedule the jobs
243
308
// every JOB_SCHEDULING_CADENCE_IN_SECS
244
309
task:: spawn ( async move {
310
+ if env:: var_os ( "TRIAGEBOT_TEST_DISABLE_JOBS" ) . is_some ( ) {
311
+ return ;
312
+ }
245
313
loop {
246
314
let res = task:: spawn ( async move {
247
315
let pool = db:: ClientPool :: new ( ) ;
0 commit comments