|
1 | 1 | import copy |
2 | 2 | import json |
3 | 3 | import re |
| 4 | +import tempfile |
| 5 | +from unittest.mock import patch |
4 | 6 | from pathlib import Path |
5 | 7 | import sys |
6 | 8 | import unittest |
@@ -31,3 +33,23 @@ def test_real_indexes_and_staged_definitions(self): |
31 | 33 | self.assertIn('path_template',active['lookups'][0]) |
32 | 34 | bad=copy.deepcopy(definition);bad['lookups'][0]['index_path']='sdk-details/{value}.json' |
33 | 35 | with self.assertRaises(ValueError):validate.validate_definition(candidate,bad) |
| 36 | + |
| 37 | + def test_refresh_repairs_index_after_provider_data_changes(self): |
| 38 | + with tempfile.TemporaryDirectory() as directory: |
| 39 | + root=Path(directory) |
| 40 | + sdk=root/'sdks/flutter';(sdk/'data/engine').mkdir(parents=True) |
| 41 | + (sdk/'definition.json').write_text(json.dumps({'lookups':[]})) |
| 42 | + (sdk/'data/engine/first.json').write_text(json.dumps({'engine':'first','releases':[]})) |
| 43 | + original_outputs=build_indexes.outputs |
| 44 | + with patch.object(build_indexes,'SOURCES',{'flutter':('engine','engine')}), patch.object(build_indexes,'outputs',lambda:original_outputs(root)): |
| 45 | + build_indexes.build() |
| 46 | + build_indexes.build(check=True) |
| 47 | + (sdk/'data/engine/second.json').write_text(json.dumps({'engine':'second','releases':[]})) |
| 48 | + with self.assertRaisesRegex(ValueError,'Stale SDK index'): |
| 49 | + build_indexes.build(check=True) |
| 50 | + build_indexes.build() |
| 51 | + build_indexes.build(check=True) |
| 52 | + index=sdk/'data/index.json';before=index.read_bytes() |
| 53 | + self.assertEqual(['first','second'],[entry['engine'] for entry in json.loads(before)['entries']]) |
| 54 | + build_indexes.build() |
| 55 | + self.assertEqual(before,index.read_bytes()) |
0 commit comments