59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Tests de `monitor_estado.fuentes.jira` — DS nuevos y sin asignar, solo GET (RF-3, RF-4, RF-16)."""
|
|
|
|
import monitor_estado.fuentes.jira as jira
|
|
|
|
|
|
def _issue(key, summary, status="Pendiente", created="2026-10-03T08:00:00.000+0200"):
|
|
return {"key": key, "fields": {
|
|
"summary": summary,
|
|
"status": {"name": status},
|
|
"created": created,
|
|
"priority": {"name": "Media"},
|
|
}}
|
|
|
|
|
|
class FakeJira:
|
|
"""Solo implementa `search` (lectura). Si el codigo intentara escribir, fallaria."""
|
|
|
|
def __init__(self):
|
|
self.calls = []
|
|
|
|
def search(self, jql, fields=None, max_results=50):
|
|
self.calls.append(jql)
|
|
if "assignee = EMPTY" in jql:
|
|
issues = [_issue("DS-100", "Ticket sin asignar")]
|
|
elif "created >=" in jql:
|
|
issues = [_issue("DS-200", "Ticket nuevo")]
|
|
else:
|
|
issues = []
|
|
return {"issues": issues}
|
|
|
|
|
|
def test_jira_jql_ds_sin_asignar():
|
|
fake = FakeJira()
|
|
out = jira.ds_sin_asignar(fake)
|
|
assert any("assignee = EMPTY" in c and "project = DS" in c for c in fake.calls)
|
|
assert out[0]["key"] == "DS-100"
|
|
assert out[0]["estado"] == "Pendiente"
|
|
|
|
|
|
def test_jira_ds_nuevos_ventana():
|
|
fake = FakeJira()
|
|
out = jira.ds_nuevos(fake, "2026-10-03 00:00")
|
|
assert "created >=" in fake.calls[-1]
|
|
assert out[0]["key"] == "DS-200"
|
|
|
|
|
|
def test_jira_solo_lectura():
|
|
"""El cliente usado solo expone `search` (no hay escritura) — RF-16."""
|
|
fake = FakeJira()
|
|
jira.ds_sin_asignar(fake)
|
|
jira.ds_nuevos(fake, "2026-10-03 00:00")
|
|
assert not hasattr(fake, "create_issue") and not hasattr(fake, "post")
|
|
|
|
|
|
def test_render_jira():
|
|
txt = jira.render_jira({"key": "DS-1", "resumen": "Algo", "estado": "Pendiente", "url": "u"})
|
|
assert "DS-1" in txt and "Algo" in txt and "Pendiente" in txt
|