Skip to content

Commit ad13e30

Browse files
committed
feat(release): add query release version
1 parent ce20b62 commit ad13e30

2 files changed

Lines changed: 48 additions & 4 deletions

File tree

rootfs/api/tests/test_config.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,3 +587,44 @@ def test_config_set_typed_values(self, mock_requests):
587587
response = self.client.post(url, body)
588588
self.assertEqual(response.status_code, 201, response.data)
589589
self.assertEqual(response.data['typed_values'], {}, response.data)
590+
591+
def test_config_version(self, mock_requests):
592+
"""
593+
Test that config sets on the same key function properly
594+
"""
595+
app_id = self.create_app()
596+
url = f"/v2/apps/{app_id}/config"
597+
598+
# set an initial config value
599+
body = {'values': {'PORT': '5000'}}
600+
response = self.client.post(url, body)
601+
self.assertEqual(response.status_code, 201, response.data)
602+
self.assertIn('PORT', response.data['values'])
603+
url = f"/v2/apps/{app_id}/config"
604+
605+
# set config NAME
606+
body = {'values': {'NAME': 'drycc'}}
607+
response = self.client.post(url, body)
608+
self.assertEqual(response.status_code, 201, response.data)
609+
self.assertIn('NAME', response.data['values'])
610+
611+
# set config WEBSITE
612+
body = {'values': {'WEBSITE': 'www.drycc.cc'}}
613+
response = self.client.post(url, body)
614+
self.assertEqual(response.status_code, 201, response.data)
615+
self.assertIn('WEBSITE', response.data['values'])
616+
617+
url = f"/v2/apps/{app_id}/config/?version=v2"
618+
response = self.client.get(url)
619+
self.assertEqual(response.data['values'], {'PORT': '5000'}, response.data)
620+
621+
url = f"/v2/apps/{app_id}/config/?version=v3"
622+
response = self.client.get(url)
623+
self.assertEqual(
624+
response.data['values'], {'PORT': '5000', 'NAME': 'drycc'}, response.data)
625+
626+
url = f"/v2/apps/{app_id}/config/?version=v4"
627+
response = self.client.get(url)
628+
self.assertEqual(
629+
response.data['values'],
630+
{'PORT': '5000', 'NAME': 'drycc', 'WEBSITE': 'www.drycc.cc'}, response.data)

rootfs/api/views.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,13 @@ class ReleasableViewSet(AppResourceViewSet):
272272
"""A viewset for application resources which affect the release cycle."""
273273
def get_object(self):
274274
"""Retrieve the object based on the latest release's value"""
275-
return getattr(
276-
self.get_app().release_set.filter(failed=False).latest(),
277-
self.model.__name__.lower()
278-
)
275+
version = self.request.query_params.get('version', '').lower().strip('v')
276+
if re.search("^[0-9]+", version):
277+
release = get_object_or_404(
278+
models.release.Release, app=self.get_app(), version=version)
279+
else:
280+
release = self.get_app().release_set.filter(failed=False).latest()
281+
return getattr(release, self.model.__name__.lower())
279282

280283

281284
class AppViewSet(BaseDryccViewSet):

0 commit comments

Comments
 (0)