Untitled

4ae4d avatar
4ae4d
plain_text
02/06/2026 1:32 PM
21.0 KB
10
Indexable
Running backend tests (exec into running container)...
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.

=================================================================== test session starts ====================================================================
platform linux -- Python 3.10.8, pytest-8.3.4, pluggy-1.5.0 -- /usr/local/bin/python
cachedir: .pytest_cache
rootdir: /backend
configfile: pytest.ini
testpaths: tests
plugins: anyio-4.7.0, asyncio-0.25.2
asyncio: mode=strict, asyncio_default_fixture_loop_scope=function
collected 5 items

tests/test_events_search.py::test_events_search_cursor_pair_required [2026-02-06 16:30:45] [INFO] HTTP /events/search: city_id=None offset=0 limit=50 cursor_date=2026-01-01 00:00:00 cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=False only_participant=False has_report=None tag_ids=None
[2026-02-06 16:30:45] [INFO] search_events: city_id=None offset=0 limit=50 cursor_date=2026-01-01 00:00:00 cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=False only_participant=False has_report=None tag_ids=[]
[2026-02-06 16:30:45] [INFO] GET request from 127.0.0.1:123 to /api/v1/events/search -> handler = search_events
[2026-02-06 16:30:45] [INFO] HTTP /events/search: city_id=None offset=0 limit=50 cursor_date=None cursor_id=00000000-0000-0000-0000-000000000001 requester_messenger_id=None only_claimed=False only_organizer=False only_participant=False has_report=None tag_ids=None
[2026-02-06 16:30:45] [INFO] search_events: city_id=None offset=0 limit=50 cursor_date=None cursor_id=00000000-0000-0000-0000-000000000001 requester_messenger_id=None only_claimed=False only_organizer=False only_participant=False has_report=None tag_ids=[]
[2026-02-06 16:30:45] [INFO] GET request from 127.0.0.1:123 to /api/v1/events/search -> handler = search_events
PASSED
tests/test_events_search.py::test_events_search_requester_required_for_scoped_filters [2026-02-06 16:30:45] [INFO] HTTP /events/search: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=True only_organizer=False only_participant=False has_report=None tag_ids=None
[2026-02-06 16:30:45] [INFO] search_events: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=True only_organizer=False only_participant=False has_report=None tag_ids=[]
[2026-02-06 16:30:45] [INFO] GET request from 127.0.0.1:123 to /api/v1/events/search -> handler = search_events
[2026-02-06 16:30:45] [INFO] HTTP /events/search: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=True only_participant=False has_report=None tag_ids=None
[2026-02-06 16:30:45] [INFO] search_events: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=True only_participant=False has_report=None tag_ids=[]
[2026-02-06 16:30:45] [INFO] GET request from 127.0.0.1:123 to /api/v1/events/search -> handler = search_events
[2026-02-06 16:30:45] [INFO] HTTP /events/search: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=False only_participant=True has_report=None tag_ids=None
[2026-02-06 16:30:45] [INFO] search_events: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=False only_participant=True has_report=None tag_ids=[]
[2026-02-06 16:30:45] [INFO] GET request from 127.0.0.1:123 to /api/v1/events/search -> handler = search_events
[2026-02-06 16:30:45] [INFO] HTTP /events/search: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=False only_participant=False has_report=True tag_ids=None
[2026-02-06 16:30:45] [INFO] search_events: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=False only_participant=False has_report=True tag_ids=[]
[2026-02-06 16:30:45] [DEBUG] SQL:
SELECT count(*) AS count_1
FROM (SELECT events.id AS id, events.date AS date
FROM events
WHERE EXISTS (SELECT 1
FROM event_reports
WHERE event_reports.event_id = events.id) GROUP BY events.id, events.date) AS anon_1
[2026-02-06 16:30:45] [DEBUG] SQL:
SELECT events.id, events.date
FROM events
WHERE EXISTS (SELECT 1
FROM event_reports
WHERE event_reports.event_id = events.id) GROUP BY events.id, events.date ORDER BY events.date DESC, events.id DESC
 LIMIT 50 OFFSET 0
[2026-02-06 16:30:45] [INFO] GET request from 127.0.0.1:123 to /api/v1/events/search -> handler = search_events
PASSED
tests/test_events_search.py::test_events_search_total_header_present [2026-02-06 16:30:45] [INFO] HTTP /events/search: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=False only_participant=False has_report=None tag_ids=None
[2026-02-06 16:30:45] [INFO] search_events: city_id=None offset=0 limit=50 cursor_date=None cursor_id=None requester_messenger_id=None only_claimed=False only_organizer=False only_participant=False has_report=None tag_ids=[]
[2026-02-06 16:30:45] [DEBUG] SQL:
SELECT count(*) AS count_1
FROM (SELECT events.id AS id, events.date AS date
FROM events GROUP BY events.id, events.date) AS anon_1
[2026-02-06 16:30:45] [ERROR] DB operations rolled back.
Traceback (most recent call last):
  File "/backend/app/dependencies/administrator.py", line 26, in start
    yield self
  File "/backend/app/services/event.py", line 80, in search_events
    events, total = await admin.event.get_cities_events_with_total(
  File "/backend/app/repositories/event.py", line 155, in get_cities_events_with_total
    total_res = await self.session.execute(total_q)
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/session.py", line 461, in execute
    result = await greenlet_spawn(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 201, in greenlet_spawn
    result = context.throw(*sys.exc_info())
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2362, in execute
    return self._execute_internal(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2247, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 305, in orm_execute_statement
    result = conn.execute(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1418, in execute
    return meth(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 515, in _execute_on_connection
    return connection._execute_clauseelement(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1640, in _execute_clauseelement
    ret = self._execute_context(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2358, in _handle_dbapi_exception
    raise exc_info[1].with_traceback(exc_info[2])
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 941, in do_execute
    cursor.execute(statement, parameters)
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 568, in execute
    self._adapt_connection.await_(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
    value = await result
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 504, in _prepare_and_execute
    await adapt_connection._start_transaction()
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 833, in _start_transaction
    self._handle_exception(error)
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 782, in _handle_exception
    raise error
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 831, in _start_transaction
    await self._transaction.start()
  File "/usr/local/lib/python3.10/site-packages/asyncpg/transaction.py", line 146, in start
    await self._connection.execute(query)
  File "/usr/local/lib/python3.10/site-packages/asyncpg/connection.py", line 349, in execute
    result = await self._protocol.query(query, timeout)
  File "asyncpg/protocol/protocol.pyx", line 375, in query
RuntimeError: Task <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro() running at /usr/local/lib/python3.10/site-packages/starlette/middleware/base.py:149> cb=[TaskGroup._spawn.<locals>.task_done() at /usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py:837]> got Future <Future pending cb=[BaseProtocol._on_waiter_completed()]> attached to a different loop
[2026-02-06 16:30:45] [ERROR] Unhandled exception
Traceback (most recent call last):
  File "/backend/app/dependencies/administrator.py", line 26, in start
    yield self
  File "/backend/app/services/event.py", line 80, in search_events
    events, total = await admin.event.get_cities_events_with_total(
  File "/backend/app/repositories/event.py", line 155, in get_cities_events_with_total
    total_res = await self.session.execute(total_q)
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/session.py", line 461, in execute
    result = await greenlet_spawn(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 201, in greenlet_spawn
    result = context.throw(*sys.exc_info())
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2362, in execute
    return self._execute_internal(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2247, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 305, in orm_execute_statement
    result = conn.execute(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1418, in execute
    return meth(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 515, in _execute_on_connection
    return connection._execute_clauseelement(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1640, in _execute_clauseelement
    ret = self._execute_context(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2358, in _handle_dbapi_exception
    raise exc_info[1].with_traceback(exc_info[2])
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 941, in do_execute
    cursor.execute(statement, parameters)
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 568, in execute
    self._adapt_connection.await_(
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
    return current.parent.switch(awaitable)  # type: ignore[no-any-return,attr-defined] # noqa: E501
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
    value = await result
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 504, in _prepare_and_execute
    await adapt_connection._start_transaction()
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 833, in _start_transaction
    self._handle_exception(error)
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 782, in _handle_exception
    raise error
  File "/usr/local/lib/python3.10/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 831, in _start_transaction
    await self._transaction.start()
  File "/usr/local/lib/python3.10/site-packages/asyncpg/transaction.py", line 146, in start
    await self._connection.execute(query)
  File "/usr/local/lib/python3.10/site-packages/asyncpg/connection.py", line 349, in execute
    result = await self._protocol.query(query, timeout)
  File "asyncpg/protocol/protocol.pyx", line 375, in query
RuntimeError: Task <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro() running at /usr/local/lib/python3.10/site-packages/starlette/middleware/base.py:149> cb=[TaskGroup._spawn.<locals>.task_done() at /usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py:837]> got Future <Future pending cb=[BaseProtocol._on_waiter_completed()]> attached to a different loop
[2026-02-06 16:30:45] [INFO] GET request from 127.0.0.1:123 to /api/v1/events/search -> handler = search_events
FAILED
tests/test_events_search.py::test_events_search_tag_ids_smoke SKIPPED (Needs DB seed: events + tags + relations)
tests/test_health.py::test_health [2026-02-06 16:30:45] [INFO] GET request from 127.0.0.1:123 to /api/v1/health -> handler = health
PASSED

========================================================================= FAILURES =========================================================================
_________________________________________________________ test_events_search_total_header_present __________________________________________________________

client = <httpx.AsyncClient object at 0x7f91779b1660>

    async def test_events_search_total_header_present(client):
        r = await client.get("/api/v1/events/search")
>       assert r.status_code == 200, r.text
E       AssertionError: {"detail":"Unhandled exception type: RuntimeError"}
E       assert 500 == 200
E        +  where 500 = <Response [500 Internal Server Error]>.status_code

tests/test_events_search.py:42: AssertionError
================================================================= short test summary info ==================================================================
FAILED tests/test_events_search.py::test_events_search_total_header_present - AssertionError: {"detail":"Unhandled exception type: RuntimeError"}
========================================================== 1 failed, 3 passed, 1 skipped in 0.40s ==========================================================
make[2]: *** [Makefile:67: backend-test] Ошибка 1
make[2]: выход из каталога «/home/work/[email protected]/pomogai»
make[1]: *** [Makefile:70: backend-test-run] Ошибка 2
make[1]: выход из каталога «/home/work/[email protected]/pomogai»
make: *** [Makefile:74: restart-bot-checked] Ошибка 2
Editor is loading...
Leave a Comment