Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a0b8fcab2 |
No files matched your search
@@ -16,12 +16,9 @@ from app.models.fit import Fit, FitNote
|
|||||||
from app.models.imported_part import ImportedPart
|
from app.models.imported_part import ImportedPart
|
||||||
from app.models.iso_thread import IsoThread
|
from app.models.iso_thread import IsoThread
|
||||||
from app.models.manufacturer import Manufacturer
|
from app.models.manufacturer import Manufacturer
|
||||||
from app.models.part_colour import PartColour
|
|
||||||
from app.models.part_type import PartType
|
|
||||||
from app.models.scope_info import ScopeInfo
|
from app.models.scope_info import ScopeInfo
|
||||||
from app.models.scope_model import ScopeModel
|
from app.models.scope_model import ScopeModel
|
||||||
from app.models.static_connection import StaticConnection
|
from app.models.static_connection import StaticConnection
|
||||||
from app.models.sub_part_type import SubPartType
|
|
||||||
from app.models.unc_thread import UncThread
|
from app.models.unc_thread import UncThread
|
||||||
|
|
||||||
# Children before the RESTRICT-protected reference tables they point to.
|
# Children before the RESTRICT-protected reference tables they point to.
|
||||||
|
|||||||
@@ -8,15 +8,15 @@
|
|||||||
<div class="card" style="border: 1px solid var(--color-danger, #c00)">
|
<div class="card" style="border: 1px solid var(--color-danger, #c00)">
|
||||||
<h2>Purge database</h2>
|
<h2>Purge database</h2>
|
||||||
<p>
|
<p>
|
||||||
Permanently deletes every part, taxonomy entry, attachment point, fit,
|
Permanently deletes every part, attachment point, fit, and imported
|
||||||
and imported part in the database — manufacturers, part colours, part
|
part in the database — manufacturers, scope models, ISO/UNC threads,
|
||||||
types, sub part types, scope models, ISO/UNC threads, clamp/static
|
clamp/static connections, attachment point names, augmented parts,
|
||||||
connections, attachment point names, augmented parts, scope info,
|
scope info, attachment points, fits, fit notes, and imported parts.
|
||||||
attachment points, fits, fit notes, and imported parts.
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<strong>Not</strong> deleted: users, roles & permissions, refresh
|
<strong>Not</strong> deleted: users, roles & permissions, refresh
|
||||||
tokens, the audit log, and the OData connection configuration.
|
tokens, the audit log, the OData connection configuration, and part
|
||||||
|
taxonomy (part colours, part types, sub part types).
|
||||||
</p>
|
</p>
|
||||||
<p class="muted">This cannot be undone. Take a database backup first if you might need this data again.</p>
|
<p class="muted">This cannot be undone. Take a database backup first if you might need this data again.</p>
|
||||||
<button class="btn btn-danger"
|
<button class="btn btn-danger"
|
||||||
|
|||||||
@@ -132,20 +132,17 @@ async def test_purge_wipes_domain_data_but_keeps_users_and_odata_config(
|
|||||||
FitNote,
|
FitNote,
|
||||||
ImportedPart,
|
ImportedPart,
|
||||||
ScopeModel,
|
ScopeModel,
|
||||||
SubPartType,
|
|
||||||
PartType,
|
|
||||||
AttachmentPointName,
|
AttachmentPointName,
|
||||||
IsoThread,
|
IsoThread,
|
||||||
UncThread,
|
UncThread,
|
||||||
ClampConnection,
|
ClampConnection,
|
||||||
StaticConnection,
|
StaticConnection,
|
||||||
PartColour,
|
|
||||||
Manufacturer,
|
Manufacturer,
|
||||||
):
|
):
|
||||||
rows = (await db.execute(Model.__table__.select())).all()
|
rows = (await db.execute(Model.__table__.select())).all()
|
||||||
assert rows == [], f"{Model.__name__} should be empty after purge"
|
assert rows == [], f"{Model.__name__} should be empty after purge"
|
||||||
|
|
||||||
# Kept: users, RBAC, and the OData connection config.
|
# Kept: users, RBAC, the OData connection config, and part taxonomy.
|
||||||
from app.crud import user as user_crud
|
from app.crud import user as user_crud
|
||||||
|
|
||||||
assert await user_crud.get_by_email(db, "root@example.com") is not None
|
assert await user_crud.get_by_email(db, "root@example.com") is not None
|
||||||
@@ -153,5 +150,9 @@ async def test_purge_wipes_domain_data_but_keeps_users_and_odata_config(
|
|||||||
assert config is not None
|
assert config is not None
|
||||||
assert config.odata_url == "https://example.test/odata"
|
assert config.odata_url == "https://example.test/odata"
|
||||||
|
|
||||||
|
for Model in (PartColour, PartType, SubPartType):
|
||||||
|
rows = (await db.execute(Model.__table__.select())).all()
|
||||||
|
assert rows != [], f"{Model.__name__} should survive the purge"
|
||||||
|
|
||||||
entries = await audit_crud.list_recent(db)
|
entries = await audit_crud.list_recent(db)
|
||||||
assert any("Purged all domain data" in e.description for e in entries)
|
assert any("Purged all domain data" in e.description for e in entries)
|
||||||
@@ -275,7 +275,7 @@ async def test_scopes_page_renders_objective_attachment_point_thread(
|
|||||||
assert resp.status_code == 200
|
assert resp.status_code == 200
|
||||||
body = resp.text
|
body = resp.text
|
||||||
# The attachment point's thread spec wins over ScopeInfo.objective_thread_pitch.
|
# The attachment point's thread spec wins over ScopeInfo.objective_thread_pitch.
|
||||||
assert "M44×0.5" in body
|
assert "M44.0×0.5" in body
|
||||||
assert "M52x0.75" not in body
|
assert "M52x0.75" not in body
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user