# retoor import time import pytest import requests from tests.conftest import BASE_URL from devplacepy.database import clear_settings_cache, get_table, refresh_snapshot from devplacepy.services.devii import tool_prefs JSON = {"Accept": "application/json"} _counter = [0] @pytest.fixture(scope="module", autouse=True) def _settings(app_server): from devplacepy.database import set_setting set_setting("rate_limit_per_minute", "1000000") set_setting("registration_open", "1") yield def _admin(seeded_db): refresh_snapshot() key = get_table("users").find_one(username="alice_test")["api_key"] s = requests.Session() s.headers.update({"X-API-KEY": key, **JSON}) return s def _member(): _counter[0] += 1 name = f"dtmem{int(time.time() * 1000)}{_counter[0]}" requests.post( f"{BASE_URL}/auth/signup", data={ "username": name, "email": f"{name}@t.dev", "password": "secret123", "confirm_password": "secret123", "birth_date": "1990-01-01", "accept_terms": "1", }, allow_redirects=True, ) refresh_snapshot() s = requests.Session() s.headers.update( {"X-API-KEY": get_table("users").find_one(username=name)["api_key"], **JSON} ) return s def _all_tool_names(): return set(tool_prefs.GROUPS_BY_TOOL_NAME) def test_devii_service_page_has_tools_tab(seeded_db): admin = _admin(seeded_db) r = admin.get(f"{BASE_URL}/admin/services/devii") assert r.status_code == 200 assert 'data-tab="tools"' in r.text assert "devii-tools-form" in r.text def test_other_service_page_has_no_tools_tab(seeded_db): admin = _admin(seeded_db) r = admin.get(f"{BASE_URL}/admin/services/news") assert r.status_code == 200 assert 'data-tab="tools"' not in r.text def test_admin_can_disable_and_reenable_a_tool(seeded_db): admin = _admin(seeded_db) all_names = _all_tool_names() try: enabled = sorted(all_names - {"create_post"}) r = admin.post( f"{BASE_URL}/admin/services/devii/tools", data=[("enabled", name) for name in enabled], ) assert r.status_code == 200, r.text[:300] assert r.json()["ok"] is True clear_settings_cache() assert tool_prefs.disabled_tool_names() == frozenset({"create_post"}) r2 = admin.post( f"{BASE_URL}/admin/services/devii/tools", data=[("enabled", name) for name in all_names], ) assert r2.status_code == 200 clear_settings_cache() assert tool_prefs.disabled_tool_names() == frozenset() finally: clear_settings_cache() tool_prefs.set_disabled_tool_names(set()) def test_member_cannot_save_tool_config(app_server): member = _member() r = member.post( f"{BASE_URL}/admin/services/devii/tools", data={"enabled": "create_post"}, allow_redirects=False, ) assert r.status_code in (302, 303, 403) def test_guest_cannot_save_tool_config(app_server): r = requests.post( f"{BASE_URL}/admin/services/devii/tools", data={"enabled": "create_post"}, allow_redirects=False, ) assert r.status_code in (302, 303, 401)