78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
import json
|
|
|
|
from src.auth import db as auth_db
|
|
from src.db import schema
|
|
from src.saved_views import db as saved_views_db
|
|
from src.saved_views import resolve
|
|
from src.utils.query_ast import And, Condition, ast_to_dict
|
|
|
|
|
|
def _make_user(email="u@ex.fr"):
|
|
auth_db.init_schema()
|
|
return auth_db.create_user(email, "hash")
|
|
|
|
|
|
def _seed_view(uid, name="Ma vue"):
|
|
ast = And([Condition("objet", "contains", "route")])
|
|
column_state = [
|
|
{"colId": "montant", "sort": "desc"},
|
|
{"colId": "acheteur_nom", "hide": True},
|
|
]
|
|
query = json.dumps({"ast": ast_to_dict(ast), "columnState": column_state})
|
|
return saved_views_db.upsert(uid, "tableau", name, query)
|
|
|
|
|
|
def test_resolve_found_applies_view(monkeypatch, users_db_path):
|
|
monkeypatch.setattr(resolve.ui, "DOMAIN_NAME", "test.colibre.fr")
|
|
saved_views_db.init_schema()
|
|
uid = _make_user()
|
|
token = _seed_view(uid, "Mes Marchés")
|
|
|
|
out = resolve.resolve_vue_param(f"mes-marches_{token}", schema)
|
|
|
|
assert out["found"] is True
|
|
assert out["filter_model"] == {
|
|
"objet": {"filterType": "text", "type": "contains", "filter": "route"}
|
|
}
|
|
assert out["hidden_columns"] == ["acheteur_nom"]
|
|
assert out["token"] == token
|
|
assert out["url"] == f"https://test.colibre.fr/tableau?vue=mes-marches_{token}"
|
|
assert out["error"] is None
|
|
|
|
|
|
def test_resolve_slug_is_ignored(monkeypatch, users_db_path):
|
|
monkeypatch.setattr(resolve.ui, "DOMAIN_NAME", "test.colibre.fr")
|
|
saved_views_db.init_schema()
|
|
uid = _make_user()
|
|
token = _seed_view(uid)
|
|
# Slug bidon → même résolution.
|
|
out = resolve.resolve_vue_param(f"nimportequoi_{token}", schema)
|
|
assert out["found"] is True
|
|
assert out["token"] == token
|
|
|
|
|
|
def test_resolve_unknown_token_returns_error(users_db_path):
|
|
saved_views_db.init_schema()
|
|
_make_user()
|
|
out = resolve.resolve_vue_param("slug_zzzzzz", schema)
|
|
assert out["found"] is False
|
|
assert out["error"] == resolve.NOT_FOUND_MESSAGE
|
|
assert out["filter_model"] is None
|
|
|
|
|
|
def test_resolve_empty_param_returns_error(users_db_path):
|
|
saved_views_db.init_schema()
|
|
out = resolve.resolve_vue_param("", schema)
|
|
assert out["found"] is False
|
|
assert out["error"] == resolve.NOT_FOUND_MESSAGE
|
|
|
|
|
|
def test_resolve_corrupt_query_returns_error(users_db_path):
|
|
saved_views_db.init_schema()
|
|
uid = _make_user()
|
|
# query pré-migration (pas du JSON) → même message de repli.
|
|
token = saved_views_db.upsert(uid, "tableau", "Vieille", "filtres=a&tris=b")
|
|
out = resolve.resolve_vue_param(f"vieille_{token}", schema)
|
|
assert out["found"] is False
|
|
assert out["error"] == resolve.NOT_FOUND_MESSAGE
|