Stažení databáze ze síně slávy
Dokud se hrálo ze zdrojáků, ležel dice.db v pracovním adresáři a záloha byla otázka zkopírování. Z binárky se schovává do systémového datového adresáře, který na Windows běžný člověk nenajde — takže se teď dá stáhnout přes prohlížeč. VACUUM INTO udělá konzistentní kopii i uprostřed zápisu, na rozdíl od prostého přečtení souboru. Kopie se přečte do paměti a hned zahodí, ať nezůstane ležet v dočasném adresáři, když si ji někdo nestáhne celou.
This commit is contained in:
1 parent
1a2053ff66
commit
a655bfe6f3
4 files changed
+73
-3
No files matched your search
@@ -326,3 +326,36 @@ def test_qr_obdelniky_kryji_stejne_moduly():
|
||||
|
||||
assert painted == expected
|
||||
assert svg.count("<rect") < len(expected)
|
||||
|
||||
|
||||
# --- záloha -----------------------------------------------------------------
|
||||
|
||||
def test_export_vrati_pouzitelnou_databazi(client, tmp_path):
|
||||
"""Ze staženého souboru musí jít data přečíst zpátky, ne jen že se stáhne."""
|
||||
game_id = start_game(client, "Adam", "Eva")
|
||||
score(client, game_id, 150)
|
||||
|
||||
response = client.get("/export")
|
||||
|
||||
assert response.status_code == 200
|
||||
assert "attachment" in response.headers["Content-Disposition"]
|
||||
assert response.headers["Content-Disposition"].endswith(".db")
|
||||
|
||||
stazeny = tmp_path / "stazeny.db"
|
||||
stazeny.write_bytes(response.data)
|
||||
|
||||
conn = storage.connect(stazeny)
|
||||
try:
|
||||
assert [p["name"] for p in storage.seating(conn, game_id)] == ["Adam", "Eva"]
|
||||
assert storage.load_game(conn, game_id).totals()["Adam"] == 150
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
def test_export_zabere_i_rozehranou_hru(client):
|
||||
"""Kopie se dělá za běhu, uprostřed nedohrané hry."""
|
||||
game_id = start_game(client, "Adam")
|
||||
score(client, game_id, 100)
|
||||
|
||||
assert client.get("/export").status_code == 200
|
||||
assert text(client.get("/stats")).count("Stáhnout databázi") == 1
|
||||
Reference in new issue
Block a user