Files
Athena-Deck/test_profile_presets.py
T

47 lines
2.8 KiB
Python

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()