11from __future__ import annotations
22
33import json
4- import os
54import pathlib
6- import subprocess
7- import uuid
85
96import pytest
107
118from coverage_comment import main
129
13-
14- @pytest .fixture
15- def in_integration_env (integration_env , integration_dir ):
16- curdir = os .getcwd ()
17- os .chdir (integration_dir )
18- yield integration_dir
19- os .chdir (curdir )
20-
21-
22- @pytest .fixture
23- def integration_dir (tmp_path : pathlib .Path ):
24- test_dir = tmp_path / "integration_test"
25- test_dir .mkdir ()
26- return test_dir
27-
28-
29- @pytest .fixture
30- def file_path (integration_dir ):
31- return integration_dir / "foo.py"
32-
33-
34- @pytest .fixture
35- def write_file (file_path ):
36- def _ (* variables ):
37- content = "import os"
38- for i , var in enumerate (variables ):
39- content += f"""\n if os.environ.get("{ var } "):\n { i } \n """
40- file_path .write_text (content , encoding = "utf8" )
41-
42- return _
43-
44-
45- @pytest .fixture
46- def run_coverage (file_path , integration_dir ):
47- def _ (* variables ):
48- subprocess .check_call (
49- ["coverage" , "run" , "--parallel" , file_path .name ],
50- cwd = integration_dir ,
51- env = os .environ | dict .fromkeys (variables , "1" ),
52- )
53-
54- return _
55-
56-
5710DIFF_STDOUT = """diff --git a/foo.py b/foo.py
5811index 6c08c94..b65c612 100644
5912--- a/foo.py
@@ -68,56 +21,6 @@ def _(*variables):
6821"""
6922
7023
71- @pytest .fixture
72- def commit (integration_dir ):
73- def _ ():
74- subprocess .check_call (
75- ["git" , "add" , "." ],
76- cwd = integration_dir ,
77- )
78- subprocess .check_call (
79- ["git" , "commit" , "-m" , str (uuid .uuid4 ())],
80- cwd = integration_dir ,
81- env = {
82- "GIT_AUTHOR_NAME" : "foo" ,
83- "GIT_AUTHOR_EMAIL" : "foo" ,
84- "GIT_COMMITTER_NAME" : "foo" ,
85- "GIT_COMMITTER_EMAIL" : "foo" ,
86- "GIT_CONFIG_GLOBAL" : "/dev/null" ,
87- "GIT_CONFIG_SYSTEM" : "/dev/null" ,
88- },
89- )
90-
91- return _
92-
93-
94- @pytest .fixture
95- def integration_env (integration_dir , write_file , run_coverage , commit , request ):
96- subprocess .check_call (["git" , "init" , "-b" , "main" ], cwd = integration_dir )
97- # diff coverage reads the "origin/{...}" branch so we simulate an origin remote
98- subprocess .check_call (["git" , "remote" , "add" , "origin" , "." ], cwd = integration_dir )
99- write_file ("A" , "B" )
100- commit ()
101-
102- add_branch_mark = request .node .get_closest_marker ("add_branches" )
103- for additional_branch in add_branch_mark .args if add_branch_mark else []:
104- subprocess .check_call (
105- ["git" , "switch" , "-c" , additional_branch ],
106- cwd = integration_dir ,
107- )
108-
109- subprocess .check_call (
110- ["git" , "switch" , "-c" , "branch" ],
111- cwd = integration_dir ,
112- )
113-
114- write_file ("A" , "B" , "C" , "D" )
115- commit ()
116-
117- run_coverage ("A" , "C" )
118- subprocess .check_call (["git" , "fetch" , "origin" ], cwd = integration_dir )
119-
120-
12124def test_action__invalid_event_name (session , push_config , in_integration_env , get_logs ):
12225 session .register ("GET" , "/repos/py-cov-action/foobar" )(
12326 json = {"default_branch" : "main" , "visibility" : "public" }
@@ -172,7 +75,7 @@ def checker(payload):
17275 )(status_code = 403 )
17376
17477 git .register ("git fetch origin main --depth=1000" )()
175- git .register ("git diff --unified=0 FETCH_HEAD -- . " )(stdout = DIFF_STDOUT )
78+ git .register ("git diff --unified=0 FETCH_HEAD...HEAD " )(stdout = DIFF_STDOUT )
17679
17780 result = main .action (
17881 config = pull_request_config (
@@ -253,7 +156,7 @@ def checker(payload):
253156 )(status_code = 403 )
254157
255158 git .register ("git fetch origin foo --depth=1000" )(stdout = DIFF_STDOUT )
256- git .register ("git diff --unified=0 FETCH_HEAD -- . " )(stdout = DIFF_STDOUT )
159+ git .register ("git diff --unified=0 FETCH_HEAD...HEAD " )(stdout = DIFF_STDOUT )
257160
258161 result = main .action (
259162 config = pull_request_config (
@@ -300,7 +203,7 @@ def test_action__pull_request__post_comment(
300203 session .register ("GET" , "/repos/py-cov-action/foobar/issues/2/comments" )(json = [])
301204
302205 git .register ("git fetch origin main --depth=1000" )()
303- git .register ("git diff --unified=0 FETCH_HEAD -- . " )(stdout = DIFF_STDOUT )
206+ git .register ("git diff --unified=0 FETCH_HEAD...HEAD " )(stdout = DIFF_STDOUT )
304207
305208 comment = None
306209
@@ -347,7 +250,7 @@ def test_action__push__non_default_branch(
347250 json = {"default_branch" : "main" , "visibility" : "public" }
348251 )
349252 git .register ("git fetch origin main --depth=1000" )(stdout = DIFF_STDOUT )
350- git .register ("git diff --unified=0 FETCH_HEAD -- . " )(stdout = DIFF_STDOUT )
253+ git .register ("git diff --unified=0 FETCH_HEAD...HEAD " )(stdout = DIFF_STDOUT )
351254
352255 payload = json .dumps ({"coverage" : 30.00 })
353256 # There is an existing badge in this test, allowing to test the coverage evolution
@@ -436,7 +339,7 @@ def test_action__push__non_default_branch__no_pr(
436339 json = {"default_branch" : "main" , "visibility" : "public" }
437340 )
438341 git .register ("git fetch origin main --depth=1000" )(stdout = DIFF_STDOUT )
439- git .register ("git diff --unified=0 FETCH_HEAD -- . " )(stdout = DIFF_STDOUT )
342+ git .register ("git diff --unified=0 FETCH_HEAD...HEAD " )(stdout = DIFF_STDOUT )
440343
441344 payload = json .dumps ({"coverage" : 30.00 })
442345 # There is an existing badge in this test, allowing to test the coverage evolution
@@ -500,7 +403,7 @@ def test_action__pull_request__force_store_comment(
500403 )(text = payload , headers = {"content-type" : "application/vnd.github.raw+json" })
501404
502405 git .register ("git fetch origin main --depth=1000" )()
503- git .register ("git diff --unified=0 FETCH_HEAD -- . " )(stdout = DIFF_STDOUT )
406+ git .register ("git diff --unified=0 FETCH_HEAD...HEAD " )(stdout = DIFF_STDOUT )
504407
505408 result = main .action (
506409 config = pull_request_config (FORCE_WORKFLOW_RUN = True , GITHUB_OUTPUT = output_file ),
@@ -531,7 +434,7 @@ def test_action__pull_request__post_comment__no_marker(
531434 )(status_code = 404 )
532435
533436 git .register ("git fetch origin main --depth=1000" )()
534- git .register ("git diff --unified=0 FETCH_HEAD -- . " )(stdout = DIFF_STDOUT )
437+ git .register ("git diff --unified=0 FETCH_HEAD...HEAD " )(stdout = DIFF_STDOUT )
535438
536439 result = main .action (
537440 config = pull_request_config (COMMENT_TEMPLATE = """foo""" ),
@@ -556,7 +459,7 @@ def test_action__pull_request__annotations(
556459 )(status_code = 404 )
557460
558461 git .register ("git fetch origin main --depth=1000" )()
559- git .register ("git diff --unified=0 FETCH_HEAD -- . " )(stdout = DIFF_STDOUT )
462+ git .register ("git diff --unified=0 FETCH_HEAD...HEAD " )(stdout = DIFF_STDOUT )
560463
561464 # Who am I
562465 session .register ("GET" , "/user" )(json = {"login" : "foo" })
@@ -598,7 +501,7 @@ def test_action__pull_request__post_comment__template_error(
598501 )(status_code = 404 )
599502
600503 git .register ("git fetch origin main --depth=1000" )()
601- git .register ("git diff --unified=0 FETCH_HEAD -- . " )(stdout = DIFF_STDOUT )
504+ git .register ("git diff --unified=0 FETCH_HEAD...HEAD " )(stdout = DIFF_STDOUT )
602505
603506 result = main .action (
604507 config = pull_request_config (COMMENT_TEMPLATE = """{%""" ),
0 commit comments