Skip to content

[BUG] test_agent_settings_hook lê o spool real — falha em máquina com registros pendentes #146

Description

@lucastribioliclickbus

Seria type: tech-debt pelos templates, mas esse label não existe no repo (só type: bug, type: feature, type: metric). Vale criar.

Summary

tests/test_agent_settings_hook.py::test_status_reflects_state lê o ~/.iris/agent-usage/spool.jsonl real da máquina em vez do tmp_path, então falha para qualquer pessoa que tenha registros de telemetria pendentes.

Reproduction steps

  1. Ter pelo menos um registro no spool local (iris agent statusSpooled records: 1).
  2. git checkout main (reproduzido em 2ab402f, working tree limpa).
  3. pytest tests/test_agent_settings_hook.py -q
E       assert 1 == 0
tests/test_agent_settings_hook.py:127: AssertionError
1 failed, 6 passed

Expected behaviour

O teste é hermético: status()["spool"]["records"] reflete o spool isolado em tmp_path, que está vazio.

Actual behaviour

A isolação não pega o spool. O teste faz monkeypatch.setattr(recorder, "SPOOL_FILE", tmp_path/...) depois do import, mas spool_stats() amarra o caminho como default de parâmetro, avaliado em tempo de definição:

# iris/agent/recorder.py:24-25, 158
SPOOL_FILE = os.path.join(SPOOL_DIR, "spool.jsonl")   # ~/.iris/agent-usage/spool.jsonl
...
def spool_stats(spool_file: str = SPOOL_FILE) -> dict:   # default já resolvido no import

sh.status()spool_stats() lê o arquivo real. flush.flush_spool(spool_file: str = SPOOL_FILE) tem o mesmo padrão (iris/agent/flush.py:19,77).

Nenhum caminho de produção está errado — iris agent status funciona. O problema é a suíte: o teste é verde só por acidente do ambiente (spool vazio, o que é sempre o caso no runner do CI e quase nunca na máquina de quem usa o iris). Efeito prático: quem roda o /check do repo antes de abrir PR vê vermelho sem relação com a própria mudança.

Como pagar

Menor caminho, só no teste: monkeypatchar onde o valor é lido em vez da constante.

Melhor, e também vale para produção: resolver o default em tempo de chamada — def spool_stats(spool_file: str | None = None) com spool_file = spool_file or SPOOL_FILE no corpo, em spool_stats e flush_spool. Assim monkeypatch.setattr(recorder, "SPOOL_FILE", ...) passa a funcionar como o teste já espera, sem mudar comportamento nenhum de produção.

Surface

Engine / CLI (Python)

Versão do CLI

v1.5.0


Achado ao rodar a suíte antes de abrir #144 / #145. Não incluí a correção em nenhum dos dois para não misturar escopo — abro um PR separado se quiserem.

Metadata

Metadata

Assignees

No one assigned

    Labels

    pythonPull requests that update python codetype: bugAlgo funciona incorretamente, quebra, ou regrediu

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions