Compare commits

...

3 Commits

Author SHA1 Message Date
jose-rZM
8c5d83dc89 Update tests 2025-12-16 09:10:29 +01:00
jose-rZM
c7128400c2 Fetch builds from Jenkins API 2025-12-16 09:10:19 +01:00
jose-rZM
64b0e7724d Update requirements 2025-12-16 09:09:53 +01:00
3 changed files with 48 additions and 13 deletions

View File

@@ -61,8 +61,7 @@ def fetch_builds(limit: int = 5) -> List[Dict]:
def build_history() -> Dict: def build_history() -> Dict:
"""Return Jenkins build history data.""" """Return Jenkins build history data."""
history = _load_json("build_history.json") builds = fetch_builds()
builds = history.get("builds", [])
return { return {
"builds": [normalize_build(b) for b in builds] "builds": [normalize_build(b) for b in builds]
} }

View File

@@ -1,2 +1,3 @@
fastapi==0.111.0 fastapi==0.111.0
uvicorn[standard]==0.30.1 uvicorn[standard]==0.30.1
requests==2.32.5

View File

@@ -36,22 +36,57 @@ def test_prices_random_list():
assert all(item["price"] <= 3 for item in items) assert all(item["price"] <= 3 for item in items)
def test_build_history(): def test_build_history(monkeypatch):
jenkins_builds = [
{
"number": 205,
"result": "SUCCESS",
"timestamp": 1719992400000,
"duration": 75000,
"url": "http://jenkins.local/job/demo/205",
"changeSets": [
{
"items": [
{
"commitId": "9ac3f91d9bd0f0b7bfc5",
"msg": "Anade la API de Jenkins",
"author": {"fullName": "Dev One"},
}
]
}
],
},
{
"number": 204,
"result": None,
"timestamp": 1719988800000,
"duration": 1500,
"url": "http://jenkins.local/job/demo/204",
"changeSets": [],
},
]
monkeypatch.setattr("app.services.builds.fetch_builds", lambda limit=5: jenkins_builds)
response = client.get("/builds") response = client.get("/builds")
assert response.status_code == 200 assert response.status_code == 200
body = response.json() body = response.json()
builds = body["builds"] builds = body["builds"]
assert isinstance(builds, list) assert isinstance(builds, list)
assert len(builds) >= 1 assert len(builds) == 2
first = builds[0] first = builds[0]
assert "number" in first and "status" in first and "branch" in first assert first["number"] == 205
assert first["status"] == "success"
assert first["finished_at"] == 1719992400000
assert first["duration_seconds"] == 75
assert first["url"].endswith("/205")
assert first["commits"] == [
{"commit": "9ac3f91", "message": "Anade la API de Jenkins", "author": "Dev One"}
]
# Ensure descending order by build number second = builds[1]
numbers = [build["number"] for build in builds] assert second["number"] == 204
assert numbers == sorted(numbers, reverse=True) assert second["status"] == "running"
assert second["duration_seconds"] == 1
failed_builds = [build for build in builds if build["status"] == "failed"] assert second["commits"] == []
if failed_builds:
failed = failed_builds[0]
assert "failed_stage" in failed and "fun_message" in failed