@@ -161,32 +161,6 @@ def test_generate_diff_report_no_diff(capsys):
161161 captured = capsys .readouterr ()
162162 assert "No drift detected" in captured .out
163163
164- def test_generate_diff_report_with_diff (capsys ):
165- local = {"A" : 1 }
166- aws = {"A" : 2 }
167- report .generate_diff_report (local , aws )
168- captured = capsys .readouterr ()
169- out = captured .out
170- assert "--- local" in out and "+++ aws" in out
171- assert re .search (r'-\s+"A":\s*1' , out )
172- assert re .search (r'\+\s+"A":\s*2' , out )
173-
174- def test_generate_diff_report_addition (capsys ):
175- local = {}
176- aws = {"A" : 5 }
177- report .generate_diff_report (local , aws )
178- captured = capsys .readouterr ()
179- out = captured .out
180- assert re .search (r'\+\s+"A":\s*5' , out )
181-
182- def test_generate_diff_report_deletion (capsys ):
183- local = {"B" : 10 }
184- aws = {}
185- report .generate_diff_report (local , aws )
186- captured = capsys .readouterr ()
187- out = captured .out
188- assert re .search (r'-\s+"B":\s*10' , out )
189-
190164@pytest .fixture
191165def runner ():
192166 app = typer .Typer ()
@@ -201,7 +175,7 @@ def test_cli_drift_detected(runner, tmp_path, monkeypatch):
201175 file .write_text (json .dumps (local ))
202176 monkeypatch .setattr (aws_fetcher , "get_policy" , lambda policy_name = None : aws )
203177 result = runner_obj .invoke (app , ["--policy-name" , "test" , "--file" , str (file )])
204- assert result .exit_code == 0
178+ assert result .exit_code == 1
205179 assert "--- local" in result .stdout
206180 assert "+++ aws" in result .stdout
207181
@@ -274,21 +248,6 @@ def assume_role(self, RoleArn, RoleSessionName):
274248 assert creds .access_key is None
275249
276250
277- # Cover report.py fallback diff line
278- def test_generate_diff_report_odd_lines (capsys ):
279- local = {"A" : 1 }
280- aws = {"A" : 2 }
281- # Patch difflib to yield weird lines
282- import difflib
283- real_diff = difflib .unified_diff
284- def fake_diff (* args , ** kwargs ):
285- return iter (["??? odd line" ])
286- difflib .unified_diff = fake_diff
287- report .generate_diff_report (local , aws )
288- captured = capsys .readouterr ()
289- assert "odd line" in captured .out
290- difflib .unified_diff = real_diff
291-
292251def test_cli_access_denied_no_because (monkeypatch , tmp_path ):
293252 runner = CliRunner ()
294253 app = cli .typer .Typer ()
@@ -410,10 +369,6 @@ def test_clean_policy_all_empty_statements():
410369 cleaned = report .clean_policy (policy .copy ())
411370 assert cleaned ["Statement" ] == []
412371
413- def test_generate_diff_report_empty_inputs (capsys ):
414- report .generate_diff_report ({}, {})
415- out = capsys .readouterr ().out
416- assert "No drift detected" in out
417372
418373def test_get_policy_no_match_final_none (monkeypatch ):
419374 class FakeSTS :
@@ -546,3 +501,51 @@ def test_clean_policy_no_statement_key():
546501 policy = {"Effect" : "Allow" }
547502 cleaned = report .clean_policy (policy .copy ())
548503 assert cleaned == policy
504+
505+
506+ import pytest
507+ import typer
508+ from devolv .drift import report
509+
510+ def test_generate_diff_report_with_diff ():
511+ local = {"A" : 1 }
512+ aws = {"A" : 2 }
513+ with pytest .raises (typer .Exit ) as excinfo :
514+ report .generate_diff_report (local , aws )
515+ assert excinfo .value .exit_code == 1
516+
517+ def test_generate_diff_report_addition ():
518+ local = {}
519+ aws = {"A" : 5 }
520+ with pytest .raises (typer .Exit ) as excinfo :
521+ report .generate_diff_report (local , aws )
522+ assert excinfo .value .exit_code == 1
523+
524+
525+ def test_generate_diff_report_deletion ():
526+ local = {"B" : 10 }
527+ aws = {}
528+ with pytest .raises (typer .Exit ) as excinfo :
529+ report .generate_diff_report (local , aws )
530+ assert excinfo .value .exit_code == 1
531+
532+ def test_generate_diff_report_no_diff ():
533+ local = {"A" : 1 }
534+ aws = {"A" : 1 }
535+ # Should not raise exit
536+ report .generate_diff_report (local , aws )
537+
538+ def test_generate_diff_report_odd_lines (monkeypatch ):
539+ import difflib
540+ local = {"A" : 1 }
541+ aws = {"A" : 2 }
542+
543+ def fake_diff (* args , ** kwargs ):
544+ return iter (["??? odd line" ])
545+
546+ monkeypatch .setattr (difflib , "unified_diff" , fake_diff )
547+
548+ with pytest .raises (typer .Exit ) as excinfo :
549+ report .generate_diff_report (local , aws )
550+ assert excinfo .value .exit_code == 1
551+
0 commit comments