aim-web2.1.0rc9
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
import sqlite3
|
||||
import pytest
|
||||
from aim_webgui.db.store import Store
|
||||
from aim_webgui.config import Settings
|
||||
from aim_webgui.workflows import Workflows
|
||||
from aim_webgui.errors import WebError
|
||||
|
||||
|
||||
def test_v3_migration_keeps_auth_history_and_duplicate_titles(tmp_path):
|
||||
state=tmp_path/'state';state.mkdir(mode=0o700)
|
||||
path=state/'webgui.sqlite3';path.touch(mode=0o600)
|
||||
db=sqlite3.connect(path)
|
||||
migrations=Path(__import__('aim_webgui.db.store',fromlist=['x']).__file__).parent/'migrations'
|
||||
for version in (1,2,3):db.executescript(next(migrations.glob(f'{version:04d}_*.sql')).read_text())
|
||||
db.execute('PRAGMA user_version=3')
|
||||
db.execute("INSERT INTO users(username,password_hash,role,enabled,must_change_password,created_at,updated_at) VALUES('old-admin','SYNTHETIC-HASH','admin',1,0,1,1)")
|
||||
uid=db.execute("SELECT id FROM users").fetchone()[0]
|
||||
db.execute("INSERT INTO metadata VALUES('initialized','1')")
|
||||
for name,ident in [('Duplicate','plan-a'),('duplicate','plan-b')]:
|
||||
db.execute('INSERT INTO plans VALUES(?,?,?,?,?,?,?)',(ident,uid,name,'example','debug_test_connection','{"legacy":true}',1))
|
||||
for ident,status in [('oldq','queued'),('oldp','pending'),('oldr','running'),('oldf','failed')]:
|
||||
db.execute('INSERT INTO jobs(id,owner_id,status,plan,created_at,scheduled_at,mode) VALUES(?,?,?,?,?,?,?)',(ident,uid,status,'{"legacy":true}',1,1,'check'))
|
||||
db.execute('INSERT INTO job_events(job_id,occurred_at,event) VALUES(?,?,?)',(ident,1,'Historical event'))
|
||||
db.execute("INSERT INTO audit(occurred_at,actor,action,subject) VALUES(1,'old-admin','old-action','old')")
|
||||
db.commit();db.close()
|
||||
store=Store(path);store.migrate();store.check()
|
||||
with store.read()as db:
|
||||
assert db.execute('PRAGMA user_version').fetchone()[0]==5
|
||||
assert db.execute('SELECT password_hash FROM users').fetchone()[0]=='SYNTHETIC-HASH'
|
||||
assert [r[0]for r in db.execute('SELECT name FROM plans ORDER BY id')]==['Duplicate','duplicate']
|
||||
assert dict(db.execute('SELECT id,status FROM jobs'))=={'oldq':'blocked','oldp':'blocked','oldr':'interrupted','oldf':'failed'}
|
||||
assert db.execute('SELECT COUNT(*) FROM job_events').fetchone()[0]==4
|
||||
assert db.execute("SELECT COUNT(*) FROM audit WHERE action='legacy-job-stopped'").fetchone()[0]==3
|
||||
flow=Workflows(Settings(state_dir=state))
|
||||
with pytest.raises(WebError)as error:
|
||||
flow._insert_plan(uid,' DUPLICATE ',{'customer':'example','playbook':'debug_test_connection'})
|
||||
assert error.value.code=='plan_name_exists'
|
||||
store.migrate()
|
||||
with store.read()as db:assert db.execute("SELECT COUNT(*) FROM audit WHERE action='legacy-job-stopped'").fetchone()[0]==3
|
||||
Reference in New Issue
Block a user