Files
colibre/tests/admin/test_tables.py
T

111 lines
3.3 KiB
Python

import pytest
from src.admin import tables
def test_get_rows_users_excludes_password_hash(users_db_path):
from src.auth import db as auth_db
auth_db.init_schema()
auth_db.create_user("a@ex.fr", "secret-hash")
rows = tables.get_rows("users")
assert rows[0]["email"] == "a@ex.fr"
assert "password_hash" not in rows[0]
def test_set_cell_rejects_unknown_table(users_db_path):
with pytest.raises(ValueError):
tables.set_cell("not_a_table", 1, "email", "x@ex.fr")
def test_set_cell_rejects_non_editable_column(users_db_path):
from src.auth import db as auth_db
auth_db.init_schema()
uid = auth_db.create_user("a@ex.fr", "hash")
with pytest.raises(ValueError):
tables.set_cell("users", uid, "id", "999")
def test_set_cell_rejects_invalid_dropdown_value(users_db_path):
from src.auth import db as auth_db
from src.subscriptions import db as sub_db
auth_db.init_schema()
sub_db.init_schema()
uid = auth_db.create_user("a@ex.fr", "hash")
_handle, sub_id = sub_db.create_pending(uid, "cust-1", "simple")
with pytest.raises(ValueError):
tables.set_cell("subscriptions", sub_id, "status", "not_a_status")
def test_set_cell_rejects_bad_type(users_db_path):
from src.auth import db as auth_db
from src.subscriptions import db as sub_db
auth_db.init_schema()
sub_db.init_schema()
uid = auth_db.create_user("a@ex.fr", "hash")
_handle, sub_id = sub_db.create_pending(uid, "cust-1", "simple")
with pytest.raises(ValueError):
tables.set_cell("subscriptions", sub_id, "prix_ht", "not-a-number")
def test_set_cell_writes_valid_value(users_db_path):
from src.auth import db as auth_db
auth_db.init_schema()
uid = auth_db.create_user("a@ex.fr", "hash")
tables.set_cell("users", uid, "siret", "12345678900011")
rows = tables.get_rows("users")
assert rows[0]["siret"] == "12345678900011"
def test_set_cell_coerces_numeric_type(users_db_path):
from src.auth import db as auth_db
from src.subscriptions import db as sub_db
auth_db.init_schema()
sub_db.init_schema()
uid = auth_db.create_user("a@ex.fr", "hash")
_handle, sub_id = sub_db.create_pending(uid, "cust-1", "simple")
tables.set_cell("subscriptions", sub_id, "prix_ht", "30")
rows = tables.get_rows("subscriptions")
assert rows[0]["prix_ht"] == 30.0
def test_find_changed_cell_detects_single_diff():
data = [{"id": 1, "email": "new@ex.fr"}]
data_previous = [{"id": 1, "email": "old@ex.fr"}]
result = tables.find_changed_cell(data, data_previous)
assert result == (0, "email", "old@ex.fr", "new@ex.fr")
def test_find_changed_cell_returns_none_when_identical():
data = [{"id": 1, "email": "a@ex.fr"}]
data_previous = [{"id": 1, "email": "a@ex.fr"}]
assert tables.find_changed_cell(data, data_previous) is None
def test_find_changed_cell_returns_none_when_previous_is_none():
assert tables.find_changed_cell([{"id": 1}], None) is None
def test_target_user_id_per_table():
assert tables.TABLES["users"].target_user_id({"id": 7}) == 7
assert tables.TABLES["subscriptions"].target_user_id({"user_id": 9}) == 9
assert tables.TABLES["subscriber_state"].target_user_id({"user_id": 3}) == 3
assert tables.TABLES["admin_actions"].target_user_id({"id": 1}) is None