lnbits/tests/core/views/test_admin_api.py
dni ⚡ bda054415a
[FEAT] improve update_admin_settings (#1903)
* [FEAT] improve update_admin_settings

while working on the push notification pr i found it very hard just to update
2 settings inside the db, so i improved upon update_admin_settings.
now you just need to provide a dict with key/values you want to update inside db.

also debugging the endpoints for update_settings i found despite the type of `EditableSettings`
fastapi did in fact pass a dict.

* t

* use `EditableSettings` as param in update_settings

* fix settings model validation

we previously overrode the pydantic validation with our own method

* make `LnbitsSettings` a `BaseModel` and only add `BaseSettings` later

this allows us to instantiate `EditableSettings` without the environment values being loaded in

* add test

* forbid extra fields in update api

* fixup

* add test

* test datadir

* move UpdateSettings

* fix compat

* fixup webpush

---------

Co-authored-by: jacksn <jkranawetter05@gmail.com>
2023-09-12 10:59:32 +01:00

41 lines
1.2 KiB
Python

import pytest
from lnbits.settings import settings
@pytest.mark.asyncio
async def test_admin_get_settings_permission_denied(client, from_user):
response = await client.get(f"/admin/api/v1/settings/?usr={from_user.id}")
assert response.status_code == 401
@pytest.mark.asyncio
async def test_admin_get_settings(client, superuser):
response = await client.get(f"/admin/api/v1/settings/?usr={superuser.id}")
assert response.status_code == 200
result = response.json()
assert "super_user" not in result
@pytest.mark.asyncio
async def test_admin_update_settings(client, superuser):
new_site_title = "UPDATED SITETITLE"
response = await client.put(
f"/admin/api/v1/settings/?usr={superuser.id}",
json={"lnbits_site_title": new_site_title},
)
assert response.status_code == 200
result = response.json()
assert "status" in result
assert result.get("status") == "Success"
assert settings.lnbits_site_title == new_site_title
@pytest.mark.asyncio
async def test_admin_update_noneditable_settings(client, superuser):
response = await client.put(
f"/admin/api/v1/settings/?usr={superuser.id}",
json={"super_user": "UPDATED"},
)
assert response.status_code == 400