@@ -37,55 +37,77 @@ def test_prepare_for_create_success(test_repo: Path, mocker: MockerFixture) -> N
3737def test_prepare_for_update_with_small_diff (
3838 test_repo : Path , mocker : MockerFixture
3939) -> None :
40- """Test an update that generates and stores a small diff."""
40+ """Test an update that generates and stores both summary+full diff."""
4141 os .chdir (test_repo )
4242 mock_r2_client = mocker .patch ("datamanager.core.get_r2_client" ).return_value
43- # Configure head_object to prevent TypeError in the download progress bar
4443 mock_r2_client .head_object .return_value = {"ContentLength" : 1024 }
4544 mocker .patch ("datamanager.core.upload_to_staging" )
4645 mocker .patch ("datamanager.core.download_from_r2" )
47- mocker .patch ("datamanager.core.generate_sql_diff" , return_value = "--- a\n +++ b" )
46+
47+ # Prepare a fake summary and full diff
48+ fake_summary = "# summary: 1 add, 1 del\n "
49+ fake_full = "--- a\n +++ b\n -foo\n +bar\n "
50+ mocker .patch (
51+ "datamanager.core.generate_sql_diff" ,
52+ return_value = (fake_full , fake_summary ),
53+ )
4854
4955 v3_file = test_repo / "v3_data.sqlite"
5056 v3_file .write_text ("this is v3" )
5157
5258 result = runner .invoke (app , ["prepare" , "core-dataset.sqlite" , str (v3_file )])
53-
5459 assert result .exit_code == 0 , result .stdout
55- assert "Diff stored in Git" in result .stdout
60+ assert "Full diff stored in Git" in result .stdout
5661
57- expected_diff_path = Path ("diffs/core-dataset.sqlite/diff-v2-to-v3.diff" )
58- assert expected_diff_path .exists ()
62+ expected = Path ("diffs/core-dataset.sqlite/diff-v2-to-v3.diff" )
63+ assert expected .exists ()
5964
60- dataset = manifest .get_dataset ("core-dataset.sqlite" )
61- assert dataset is not None , "Dataset should not be None after preparation."
62- assert dataset ["history" ][0 ]["diffFromPrevious" ] == str (expected_diff_path )
65+ # Now verify the file contains summary first, then full diff
66+ content = expected .read_text ()
67+ assert content == fake_summary + fake_full
68+
69+ ds = manifest .get_dataset ("core-dataset.sqlite" )
70+ assert ds is not None
71+ assert ds ["history" ][0 ]["diffFromPrevious" ] == str (expected )
6372
6473
6574def test_prepare_for_update_with_large_diff (
6675 test_repo : Path , mocker : MockerFixture
6776) -> None :
68- """Test an update where the diff is too large and is omitted ."""
77+ """Test an update where the full diff is too large and only summary is stored ."""
6978 os .chdir (test_repo )
7079 mock_r2_client = mocker .patch ("datamanager.core.get_r2_client" ).return_value
7180 mock_r2_client .head_object .return_value = {"ContentLength" : 1024 }
7281 mocker .patch ("datamanager.core.upload_to_staging" )
7382 mocker .patch ("datamanager.core.download_from_r2" )
74- # Make the diff larger than the default MAX_DIFF_LINES
75- large_diff = "line\n " * (settings .max_diff_lines + 1 )
76- mocker .patch ("datamanager.core.generate_sql_diff" , return_value = large_diff )
83+ # Make the full diff larger than the default limit, but still provide a summary
84+ large_full = "line\n " * (settings .max_diff_lines + 1 )
85+ small_summary = "# summary: huge diff, see details in PR\n "
86+ mocker .patch (
87+ "datamanager.core.generate_sql_diff" ,
88+ return_value = (large_full , small_summary ),
89+ )
7790
7891 v3_file = test_repo / "v3_data.sqlite"
7992 v3_file .write_text ("this is v3" )
8093
8194 result = runner .invoke (app , ["prepare" , "core-dataset.sqlite" , str (v3_file )])
82-
8395 assert result .exit_code == 0 , result .stdout
84- assert "Diff is too large" in result .stdout
8596
97+ # We should see that the full diff was too large but a summary was stored
98+ assert "too large" in result .stdout .lower ()
99+
100+ expected_diff_path = Path ("diffs/core-dataset.sqlite/diff-v2-to-v3.diff" )
101+ assert expected_diff_path .exists (), "Summary file should have been written"
102+
103+ # The manifest should record the path
86104 dataset = manifest .get_dataset ("core-dataset.sqlite" )
87- assert dataset is not None , "Dataset should not be None after preparation."
88- assert dataset ["history" ][0 ]["diffFromPrevious" ] is None
105+ assert dataset is not None
106+ assert dataset ["history" ][0 ]["diffFromPrevious" ] == str (expected_diff_path )
107+
108+ # And the contents of that file should be exactly our summary
109+ content = expected_diff_path .read_text ()
110+ assert content == small_summary
89111
90112
91113def test_prepare_no_changes (test_repo : Path , mocker : MockerFixture ) -> None :
0 commit comments