@@ -1365,7 +1365,7 @@ def test_has_live_greenlight_approval_false_for_commented_and_dismissed():
13651365 assert github_client .has_live_greenlight_approval (pr , bot_login = "greenlight-app[bot]" ) is False
13661366
13671367
1368- def test_has_live_greenlight_approval_true_when_any_own_approved_among_many ():
1368+ def test_has_live_greenlight_approval_true_when_latest_non_commented_approved ():
13691369 reviews = [
13701370 _FakeVerdictReview (1 , _FakeActor ("alice" ), "APPROVED" ),
13711371 _FakeVerdictReview (2 , _FakeActor ("greenlight-app[bot]" ), "COMMENTED" ),
@@ -1374,3 +1374,52 @@ def test_has_live_greenlight_approval_true_when_any_own_approved_among_many():
13741374 pr = _FakeVerdictPR (reviews = reviews )
13751375
13761376 assert github_client .has_live_greenlight_approval (pr , bot_login = "greenlight-app[bot]" ) is True
1377+
1378+
1379+ def test_has_live_greenlight_approval_false_when_approved_then_dismissed ():
1380+ reviews = [
1381+ _FakeVerdictReview (1 , _FakeActor ("greenlight-app[bot]" ), "APPROVED" ),
1382+ _FakeVerdictReview (2 , _FakeActor ("greenlight-app[bot]" ), "DISMISSED" ),
1383+ ]
1384+ pr = _FakeVerdictPR (reviews = reviews )
1385+
1386+ # trymerge collapses greenlight to its latest non-COMMENTED state (DISMISSED), so it would
1387+ # not count greenlight as an approver; an older APPROVED must not read as a live approval.
1388+ assert github_client .has_live_greenlight_approval (pr , bot_login = "greenlight-app[bot]" ) is False
1389+
1390+
1391+ def test_has_live_greenlight_approval_true_when_dismissed_then_approved ():
1392+ reviews = [
1393+ _FakeVerdictReview (1 , _FakeActor ("greenlight-app[bot]" ), "DISMISSED" ),
1394+ _FakeVerdictReview (2 , _FakeActor ("greenlight-app[bot]" ), "APPROVED" ),
1395+ ]
1396+ pr = _FakeVerdictPR (reviews = reviews )
1397+
1398+ assert github_client .has_live_greenlight_approval (pr , bot_login = "greenlight-app[bot]" ) is True
1399+
1400+
1401+ def test_has_live_greenlight_approval_true_when_commented_after_approved ():
1402+ reviews = [
1403+ _FakeVerdictReview (1 , _FakeActor ("greenlight-app[bot]" ), "APPROVED" ),
1404+ _FakeVerdictReview (2 , _FakeActor ("greenlight-app[bot]" ), "COMMENTED" ),
1405+ ]
1406+ pr = _FakeVerdictPR (reviews = reviews )
1407+
1408+ assert github_client .has_live_greenlight_approval (pr , bot_login = "greenlight-app[bot]" ) is True
1409+
1410+
1411+ def test_has_live_greenlight_approval_false_when_latest_changes_requested ():
1412+ reviews = [
1413+ _FakeVerdictReview (1 , _FakeActor ("greenlight-app[bot]" ), "APPROVED" ),
1414+ _FakeVerdictReview (2 , _FakeActor ("greenlight-app[bot]" ), "CHANGES_REQUESTED" ),
1415+ ]
1416+ pr = _FakeVerdictPR (reviews = reviews )
1417+
1418+ assert github_client .has_live_greenlight_approval (pr , bot_login = "greenlight-app[bot]" ) is False
1419+
1420+
1421+ def test_has_live_greenlight_approval_false_when_only_other_author_approved ():
1422+ reviews = [_FakeVerdictReview (1 , _FakeActor ("alice" ), "APPROVED" )]
1423+ pr = _FakeVerdictPR (reviews = reviews )
1424+
1425+ assert github_client .has_live_greenlight_approval (pr , bot_login = "greenlight-app[bot]" ) is False
0 commit comments