import json,tempfile,unittest from pathlib import Path from profiles import Profiles,SCHEMAS class Catalog: def entry(self,ident): if ident not in ('model','other'):raise ValueError('Datei fehlt') return dict(id=ident,repo='example/model',kind='image',profile_eligible=True,file='model.safetensors') class PresetTests(unittest.TestCase): def setUp(self): self.tmp=tempfile.TemporaryDirectory();self.path=Path(self.tmp.name)/'profiles.json';self.p=Profiles(self.path,Catalog()) self.row=self.p.save(dict(id=None,revision=0,name='Image Test',kind='image',model_id='model',parameters={k:v[2] for k,v in SCHEMAS['image'].items()})) def tearDown(self):self.tmp.cleanup() def save_preset(self,name='Vorher',revision=None): return self.p.preset(dict(id=self.row['id'],revision=revision or self.p.rows[0]['revision'],action='save',name=name)) def test_snapshot_survives_edit_and_reload_and_pins_old_model(self): row=self.save_preset();saved=json.loads(json.dumps(row['presets'][0])) params=dict(row['parameters'],steps=4) row=self.p.save(dict(id=row['id'],revision=row['revision'],name=row['name'],kind='image',model_id='other',parameters=params)) self.assertEqual(row['presets'][0],saved);self.assertEqual(saved['parameters']['steps'],25) self.assertEqual(Profiles(self.path,Catalog()).rows[0]['presets'],[saved]) self.assertTrue(self.p.references('model')) self.p.preset(dict(id=row['id'],revision=row['revision'],action='delete',preset_id=saved['id'])) self.assertEqual(self.p.references('model'),[]) def test_stale_duplicate_invalid_and_unknown_delete_rejected(self): row=self.save_preset() with self.assertRaises(ValueError):self.save_preset('Stale',1) with self.assertRaises(ValueError):self.save_preset() with self.assertRaises(ValueError):self.save_preset(' ') with self.assertRaises(ValueError):self.p.preset(dict(id=row['id'],revision=row['revision'],action='delete',preset_id='missing')) self.assertEqual(len(self.p.rows[0]['presets']),1) def test_pending_baseline_survives_legacy_save_and_merges_once(self): row=self.save_preset();preset=row['presets'][0] self.path.with_name('profile-presets-pending.json').write_text(json.dumps([dict(profile_id=row['id'],preset=preset)])) row.pop('presets');self.path.write_text(json.dumps([row])) loaded=Profiles(self.path,Catalog()) self.assertEqual(loaded.rows[0]['presets'],[preset]) self.assertFalse(self.path.with_name('profile-presets-pending.json').exists()) self.assertEqual(Profiles(self.path,Catalog()).rows[0]['presets'],[preset]) def test_new_duplicate_profile_has_no_presets(self): self.save_preset() row=self.p.save(dict(id=None,revision=0,name='Another Image',kind='image',model_id='model',parameters=self.row['parameters'])) self.assertEqual(row['presets'],[]) if __name__=='__main__':unittest.main()