11# pylint: disable=unused-variable
22
33import os
4+ import shutil
45from dataclasses import dataclass
6+ from pathlib import Path
57from typing import Optional
68from unittest .mock import patch
79
@@ -26,6 +28,7 @@ class MyClass:
2628def describe_manager ():
2729 @pytest .fixture
2830 def manager ():
31+ shutil .rmtree (Path (__file__ ).parent / "files" , ignore_errors = True )
2932 model = create_model (MyClass , pattern = "files/{self.foo}.yml" )
3033 return Manager (model )
3134
@@ -46,6 +49,12 @@ def when_file_exists(mock_load, expect, manager):
4649 def when_file_missing (expect , manager ):
4750 expect (manager .get_or_none (foo = 3 , bar = 4 )).is_ (None )
4851
52+ def when_file_corrupt (expect , manager ):
53+ instance = manager .get_or_create (foo = 2 , bar = 1 )
54+ instance .datafile .path .write_text ("{" )
55+ instance = manager .get_or_none (foo = 2 , bar = 2 )
56+ expect (instance ).is_ (None )
57+
4958 def describe_get_or_create ():
5059 @patch ("datafiles.mapper.Mapper.save" )
5160 @patch ("datafiles.mapper.Mapper.load" )
@@ -64,6 +73,12 @@ def when_file_missing(mock_save, mock_load, expect, manager):
6473 expect (mock_save .called ).is_ (True )
6574 expect (mock_load .called ).is_ (True )
6675
76+ def when_file_corrupt (expect , manager ):
77+ instance = manager .get_or_create (foo = 2 , bar = 1 )
78+ instance .datafile .path .write_text ("{" )
79+ instance = manager .get_or_create (foo = 2 , bar = 2 )
80+ expect (instance .bar ) == 2
81+
6782 def describe_all ():
6883 @patch ("datafiles.mapper.Mapper.exists" , False )
6984 def when_no_files_exist (expect , manager ):
0 commit comments