fix(tests): убрать директивы noqa на неактивное правило
All checks were successful
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 7s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m8s
CI / backend-tests (pull_request) Successful in 17m35s
All checks were successful
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 7s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m8s
CI / backend-tests (pull_request) Successful in 17m35s
`SLF001` (обращение к приватному члену) в конфиге ruff не включён, поэтому `# noqa: SLF001` — подавление того, что и так не проверяется. Ruff ловит это правилом RUF100 и валит проверку. Тест намеренно лезет в приватные `_tg`, `_PENDING`, `_send_alert`: подмена единственного шва до сети — и есть смысл этих тестов. Пояснение, которое стояло после директивы, сохранено обычным комментарием.
This commit is contained in:
parent
053a5fb75c
commit
4e8daff675
1 changed files with 17 additions and 17 deletions
|
|
@ -68,25 +68,25 @@ def app(monkeypatch: pytest.MonkeyPatch) -> ModuleType:
|
|||
sent.append((method, payload))
|
||||
return {"ok": True, "result": {"message_id": 1000 + len(sent)}}
|
||||
|
||||
mod._tg = fake_tg # noqa: SLF001 — единственный шов, ради него тест и существует
|
||||
mod._tg = fake_tg # единственный шов, ради него тест и существует
|
||||
mod.sent = sent
|
||||
mod._PENDING.clear() # noqa: SLF001
|
||||
mod._PENDING.clear()
|
||||
return mod
|
||||
|
||||
|
||||
def test_gorjaschiy_incident_uhodit_s_knopkoy(app: ModuleType) -> None:
|
||||
"""У горящего инцидента есть кнопка со ссылкой и живой токен."""
|
||||
app._send_alert(FIRING) # noqa: SLF001
|
||||
app._send_alert(FIRING)
|
||||
method, payload = app.sent[0]
|
||||
assert method == "sendMessage"
|
||||
assert "reply_markup" in payload, "кнопка не прицеплена"
|
||||
assert "/ack/" in payload["reply_markup"], "в кнопке нет ссылки подтверждения"
|
||||
assert len(app._PENDING) == 1, "токен не сохранён — нажатие будет некуда деть" # noqa: SLF001
|
||||
assert len(app._PENDING) == 1, "токен не сохранён — нажатие будет некуда деть"
|
||||
|
||||
|
||||
def test_soobschenie_adresovano_v_temu_i_zovyot_dezhurnogo(app: ModuleType) -> None:
|
||||
"""Тема форума и упоминание — обе вещи, которые молча теряются."""
|
||||
app._send_alert(FIRING) # noqa: SLF001
|
||||
app._send_alert(FIRING)
|
||||
_, payload = app.sent[0]
|
||||
assert payload.get("message_thread_id") == "158", "уйдёт в общую тему форума"
|
||||
assert "@leks361" in payload["text"], "дежурного не позвали"
|
||||
|
|
@ -95,10 +95,10 @@ def test_soobschenie_adresovano_v_temu_i_zovyot_dezhurnogo(app: ModuleType) -> N
|
|||
|
||||
def test_vosstanovlenie_bez_knopki(app: ModuleType) -> None:
|
||||
"""У «восстановлено» подтверждать нечего — кнопки быть не должно."""
|
||||
app._send_alert(RESOLVED) # noqa: SLF001
|
||||
app._send_alert(RESOLVED)
|
||||
_, payload = app.sent[0]
|
||||
assert "reply_markup" not in payload
|
||||
assert not app._PENDING, "токен выдан там, где кнопки нет" # noqa: SLF001
|
||||
assert not app._PENDING, "токен выдан там, где кнопки нет"
|
||||
|
||||
|
||||
def test_esli_knopka_ne_prikrepilas_soobschenie_vsyo_ravno_uhodit(
|
||||
|
|
@ -117,7 +117,7 @@ def test_esli_knopka_ne_prikrepilas_soobschenie_vsyo_ravno_uhodit(
|
|||
return None if "reply_markup" in payload else {"ok": True, "result": {"message_id": 7}}
|
||||
|
||||
monkeypatch.setattr(app, "_tg", flaky)
|
||||
app._send_alert(FIRING) # noqa: SLF001
|
||||
app._send_alert(FIRING)
|
||||
assert len(calls) == 2, "не было повтора без кнопки — алерт потерян"
|
||||
assert "reply_markup" not in calls[1]
|
||||
assert calls[1]["text"] == calls[0]["text"], "во второй попытке потерялся текст"
|
||||
|
|
@ -125,8 +125,8 @@ def test_esli_knopka_ne_prikrepilas_soobschenie_vsyo_ravno_uhodit(
|
|||
|
||||
def test_nazhatie_otvechaet_v_temu_i_snimaet_knopku(app: ModuleType) -> None:
|
||||
"""Нажатие: ответ в тему + снятие клавиатуры у исходного сообщения."""
|
||||
app._send_alert(FIRING) # noqa: SLF001
|
||||
token = next(iter(app._PENDING)) # noqa: SLF001
|
||||
app._send_alert(FIRING)
|
||||
token = next(iter(app._PENDING))
|
||||
app.sent.clear()
|
||||
|
||||
code, page = app.do_ack(token)
|
||||
|
|
@ -143,8 +143,8 @@ def test_nazhatie_otvechaet_v_temu_i_snimaet_knopku(app: ModuleType) -> None:
|
|||
|
||||
def test_povtornoe_nazhatie_ne_shlyot_vtoroy_raz(app: ModuleType) -> None:
|
||||
"""Идемпотентность: ссылка живёт сутки, по ней кликнут дважды."""
|
||||
app._send_alert(FIRING) # noqa: SLF001
|
||||
token = next(iter(app._PENDING)) # noqa: SLF001
|
||||
app._send_alert(FIRING)
|
||||
token = next(iter(app._PENDING))
|
||||
app.do_ack(token)
|
||||
app.sent.clear()
|
||||
|
||||
|
|
@ -164,16 +164,16 @@ def test_neizvestnyy_token_nichego_ne_rasskazyvaet(app: ModuleType) -> None:
|
|||
|
||||
def test_token_dostatochno_dlinnyy(app: ModuleType) -> None:
|
||||
"""Ссылка защищена только неугадываемостью — длина токена и есть защита."""
|
||||
app._send_alert(FIRING) # noqa: SLF001
|
||||
token = next(iter(app._PENDING)) # noqa: SLF001
|
||||
app._send_alert(FIRING)
|
||||
token = next(iter(app._PENDING))
|
||||
assert len(token) >= 20, f"слишком короткий токен: {len(token)} символов"
|
||||
|
||||
|
||||
def test_protuhshiy_token_ne_prinimaetsya(app: ModuleType, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""По истечении срока ссылка мертва — иначе она копится вечно."""
|
||||
app._send_alert(FIRING) # noqa: SLF001
|
||||
token = next(iter(app._PENDING)) # noqa: SLF001
|
||||
app._PENDING[token]["created"] -= app.TTL_SEC + 1 # noqa: SLF001
|
||||
app._send_alert(FIRING)
|
||||
token = next(iter(app._PENDING))
|
||||
app._PENDING[token]["created"] -= app.TTL_SEC + 1
|
||||
app.sent.clear()
|
||||
|
||||
code, _ = app.do_ack(token)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue