11from datetime import datetime
2+ import pytest
3+ from unittest .mock import patch
24
3- from ..local_changes import LocalChange , LocalChanges , MAX_UPLOAD_CHANGES
5+ from ..local_changes import ChangesValidationError , LocalChange , LocalChanges , MAX_UPLOAD_CHANGES
46
57
68def test_local_changes_from_dict ():
@@ -120,10 +122,10 @@ def test_local_changes_get_upload_changes():
120122 assert upload_changes [1 ].path == "file2.txt" # Second change is from updated
121123
122124
123- def test_local_changes_get_media_upload_over_size ():
125+ def test_local_changes_post_init_validation_media ():
124126 """Test the get_media_upload_file method of LocalChanges."""
125127 # Define constants
126- SIZE_LIMIT_MB = 10
128+ SIZE_LIMIT_MB = 5
127129 SIZE_LIMIT_BYTES = SIZE_LIMIT_MB * 1024 * 1024
128130 SMALL_FILE_SIZE = 1024
129131 LARGE_FILE_SIZE = 15 * 1024 * 1024
@@ -139,18 +141,16 @@ def test_local_changes_get_media_upload_over_size():
139141 ]
140142
141143 # Initialize LocalChanges
142- local_changes = LocalChanges (added = added , updated = updated )
143-
144- # Call get_media_upload_file with a size limit
145- media_file = local_changes .get_media_upload_over_size (SIZE_LIMIT_BYTES )
146-
147- # Assertions
148- assert media_file is not None
149- assert media_file .path == "file2.jpg" # The first file over the limit
150- assert media_file .size == LARGE_FILE_SIZE
144+ with patch ("mergin.local_changes.MAX_UPLOAD_MEDIA_SIZE" , SIZE_LIMIT_BYTES ):
145+ with pytest .raises (ChangesValidationError , match = "Some files exceed" ) as err :
146+ LocalChanges (added = added , updated = updated )
147+ print (err .value .invalid_changes )
148+ assert len (err .value .invalid_changes ) == 1
149+ assert "file2.jpg" == err .value .invalid_changes [0 ].path
150+ assert err .value .invalid_changes [0 ].size == LARGE_FILE_SIZE
151151
152152
153- def test_local_changes_get_gpgk_upload_over_size ():
153+ def test_local_changes_post_init_validation_media ():
154154 """Test the get_gpgk_upload_file method of LocalChanges."""
155155 # Define constants
156156 SIZE_LIMIT_MB = 10
@@ -166,21 +166,23 @@ def test_local_changes_get_gpgk_upload_over_size():
166166 ), # Over limit
167167 ]
168168 updated = [
169- LocalChange (path = "file3.gpkg" , checksum = "lmn456" , size = 5 * 1024 * 1024 , mtime = datetime .now ()),
169+ LocalChange (
170+ path = "file3.gpkg" ,
171+ checksum = "lmn456" ,
172+ size = SIZE_LIMIT_BYTES + 1 ,
173+ mtime = datetime .now (),
174+ diff = {"path" : "file3-diff.gpkg" , "checksum" : "diff123" , "size" : 1024 , "mtime" : datetime .now ()},
175+ ),
170176 LocalChange (path = "file4.txt" , checksum = "opq123" , size = SMALL_FILE_SIZE , mtime = datetime .now ()),
171177 ]
172178
173179 # Initialize LocalChanges
174- local_changes = LocalChanges (added = added , updated = updated )
175-
176- # Call get_gpgk_upload_file with a size limit
177- gpkg_file = local_changes .get_gpgk_upload_over_size (SIZE_LIMIT_BYTES )
178-
179- # Assertions
180- assert gpkg_file is not None
181- assert gpkg_file .path == "file2.gpkg" # The first GPKG file over the limit
182- assert gpkg_file .size == LARGE_FILE_SIZE
183- assert gpkg_file .diff is None # Ensure it doesn't include diffs
180+ with patch ("mergin.local_changes.MAX_UPLOAD_VERSIONED_SIZE" , SIZE_LIMIT_BYTES ):
181+ with pytest .raises (ChangesValidationError ) as err :
182+ LocalChanges (added = added , updated = updated )
183+ assert len (err .value .invalid_changes ) == 1
184+ assert "file2.gpkg" == err .value .invalid_changes [0 ].path
185+ assert err .value .invalid_changes [0 ].size == LARGE_FILE_SIZE
184186
185187
186188def test_local_changes_post_init ():
0 commit comments