@@ -47,6 +47,7 @@ def __getitem__(self, key):
4747
4848WEBHOOK_SECRET = b"testixik8qdauiab1yiffydimvi72ekq"
4949DEFAULT_APP_ID = 1234
50+ AI_FEATURES_GH_APP_ID = 9999
5051
5152
5253class GithubWebhookHandlerTests (APITestCase ):
@@ -58,16 +59,21 @@ def inject_mocker(request, mocker):
5859 def mock_webhook_secret (self , mocker ):
5960 mock_config_helper (mocker , configs = {"github.webhook_secret" : WEBHOOK_SECRET })
6061
62+ @pytest .fixture (autouse = True )
63+ def mock_ai_features_app_id (self , mocker ):
64+ mock_config_helper (mocker , configs = {"github.ai_features_app_id" : 9999 })
65+
6166 @pytest .fixture (autouse = True )
6267 def mock_default_app_id (self , mocker ):
6368 mock_config_helper (mocker , configs = {"github.integration.id" : DEFAULT_APP_ID })
6469
65- def _post_event_data (self , event , data = {}):
70+ def _post_event_data (self , event , data = {}, app_id = DEFAULT_APP_ID ):
6671 return self .client .post (
6772 reverse ("github-webhook" ),
6873 ** {
6974 GitHubHTTPHeaders .EVENT : event ,
7075 GitHubHTTPHeaders .DELIVERY_TOKEN : uuid .UUID (int = 5 ),
76+ GitHubHTTPHeaders .HOOK_INSTALLATION_TARGET_ID : app_id ,
7177 GitHubHTTPHeaders .SIGNATURE_256 : "sha256="
7278 + hmac .new (
7379 WEBHOOK_SECRET ,
@@ -1420,3 +1426,98 @@ def test_repo_creation_doesnt_crash_for_forked_repo(self):
14201426 )
14211427
14221428 assert owner .repository_set .filter (name = "testrepo" ).exists ()
1429+
1430+ def test_check_codecov_ai_auto_enabled_reviews_enabled (self ):
1431+ # Create an organization with AI PR review enabled
1432+ org_with_ai_enabled = OwnerFactory (
1433+ service = Service .GITHUB .value , yaml = {"ai_pr_review" : {"auto_review" : True }}
1434+ )
1435+
1436+ response = self ._post_event_data (
1437+ event = GitHubWebhookEvents .PULL_REQUEST ,
1438+ data = {
1439+ "action" : "pull_request" ,
1440+ "repository" : {
1441+ "id" : 506003 ,
1442+ "name" : "testrepo" ,
1443+ "private" : False ,
1444+ "default_branch" : "main" ,
1445+ "owner" : {"id" : org_with_ai_enabled .service_id },
1446+ "fork" : True ,
1447+ "parent" : {
1448+ "name" : "mainrepo" ,
1449+ "language" : "python" ,
1450+ "id" : 7940284 ,
1451+ "private" : False ,
1452+ "default_branch" : "main" ,
1453+ "owner" : {"id" : 8495712939 , "login" : "alogin" },
1454+ },
1455+ },
1456+ },
1457+ app_id = 9999 ,
1458+ )
1459+ assert response .data == {"auto_review_enabled" : True }
1460+
1461+ def test_check_codecov_ai_auto_enabled_reviews_disabled (self ):
1462+ # Test with AI PR review disabled
1463+ org_with_ai_disabled = OwnerFactory (
1464+ service = Service .GITHUB .value , yaml = {"ai_pr_review" : {"auto_review" : False }}
1465+ )
1466+
1467+ response = self ._post_event_data (
1468+ event = GitHubWebhookEvents .PULL_REQUEST ,
1469+ data = {
1470+ "action" : "pull_request" ,
1471+ "repository" : {
1472+ "id" : 506004 ,
1473+ "name" : "testrepo2" ,
1474+ "private" : False ,
1475+ "default_branch" : "main" ,
1476+ "owner" : {"id" : org_with_ai_disabled .service_id },
1477+ },
1478+ },
1479+ app_id = 9999 ,
1480+ )
1481+ assert response .data == {"auto_review_enabled" : False }
1482+
1483+ def test_check_codecov_ai_auto_enabled_reviews_no_config (self ):
1484+ # Test with no yaml config
1485+ org_with_no_config = OwnerFactory (service = Service .GITHUB .value , yaml = {})
1486+
1487+ response = self ._post_event_data (
1488+ event = GitHubWebhookEvents .PULL_REQUEST ,
1489+ data = {
1490+ "action" : "pull_request" ,
1491+ "repository" : {
1492+ "id" : 506005 ,
1493+ "name" : "testrepo3" ,
1494+ "private" : False ,
1495+ "default_branch" : "main" ,
1496+ "owner" : {"id" : org_with_no_config .service_id },
1497+ },
1498+ },
1499+ app_id = 9999 ,
1500+ )
1501+ assert response .data == {"auto_review_enabled" : False }
1502+
1503+ def test_check_codecov_ai_auto_enabled_reviews_partial_config (self ):
1504+ # Test with partial yaml config
1505+ org_with_partial_config = OwnerFactory (
1506+ service = Service .GITHUB .value , yaml = {"ai_pr_review" : {}}
1507+ )
1508+
1509+ response = self ._post_event_data (
1510+ event = GitHubWebhookEvents .PULL_REQUEST ,
1511+ data = {
1512+ "action" : "pull_request" ,
1513+ "repository" : {
1514+ "id" : 506006 ,
1515+ "name" : "testrepo4" ,
1516+ "private" : False ,
1517+ "default_branch" : "main" ,
1518+ "owner" : {"id" : org_with_partial_config .service_id },
1519+ },
1520+ },
1521+ app_id = 9999 ,
1522+ )
1523+ assert response .data == {"auto_review_enabled" : False }
0 commit comments