Skip to content

Commit ae09228

Browse files
authored
Addons: build.current API response fix (#11068)
When _not sending `url=` parameter_, we were returning the lastest build by date, but we need to filter it by `state=finished` and `success=True` in the same way as we are doing when sending the `url=` parameter. I found this while working on readthedocs/addons#88
1 parent dcd4655 commit ae09228

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

readthedocs/proxito/tests/test_hosting.py

+45
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,51 @@ def test_builds_current_is_latest_one(self):
430430
# ``a1b2c3-9``is the latest successful build object created
431431
assert r.json()["builds"]["current"]["commit"] == "a1b2c3-9"
432432

433+
def test_builds_current_is_latest_one_without_url_parameter(self):
434+
# Create 10 successful build objects
435+
# The latest one (ordered by date) will be ``a1b2c3-9``
436+
for i in range(10):
437+
fixture.get(
438+
Build,
439+
date=timezone.now(),
440+
project=self.project,
441+
version=self.version,
442+
commit=f"a1b2c3-{i}",
443+
length=60,
444+
state="finished",
445+
success=True,
446+
)
447+
448+
# Latest failed build
449+
fixture.get(
450+
Build,
451+
date=timezone.now(),
452+
project=self.project,
453+
version=self.version,
454+
commit=f"a1b2c3-failed",
455+
length=60,
456+
state="finished",
457+
success=False,
458+
)
459+
460+
r = self.client.get(
461+
reverse("proxito_readthedocs_docs_addons"),
462+
{
463+
"project-slug": "project",
464+
"version-slug": "latest",
465+
"client-version": "0.6.0",
466+
"api-version": "0.1.0",
467+
},
468+
secure=True,
469+
headers={
470+
"host": "project.dev.readthedocs.io",
471+
},
472+
)
473+
assert r.status_code == 200
474+
475+
# ``a1b2c3-9``is the latest successful build object created
476+
assert r.json()["builds"]["current"]["commit"] == "a1b2c3-9"
477+
433478
def test_project_subproject(self):
434479
subproject = fixture.get(
435480
Project,

readthedocs/proxito/views/hosting.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,10 @@ def _resolve_resources(self):
114114
project = Project.objects.filter(slug=project_slug).first()
115115
version = Version.objects.filter(slug=version_slug, project=project).first()
116116
if version:
117-
build = version.builds.first()
117+
build = version.builds.filter(
118+
success=True,
119+
state=BUILD_STATE_FINISHED,
120+
).first()
118121

119122
return project, version, build, filename
120123

0 commit comments

Comments
 (0)