Skip to content

Commit 117b407

Browse files
authored
fix(controller): app_settings boolean field cannot be set correctly (#166)
1 parent 849dd60 commit 117b407

4 files changed

Lines changed: 74 additions & 21 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Generated by Django 4.2.15 on 2024-09-24 09:01
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('api', '0014_alter_certificate_app'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='appsettings',
15+
name='autodeploy',
16+
field=models.BooleanField(default=None),
17+
),
18+
migrations.AlterField(
19+
model_name='appsettings',
20+
name='autorollback',
21+
field=models.BooleanField(default=None),
22+
),
23+
migrations.AlterField(
24+
model_name='appsettings',
25+
name='routable',
26+
field=models.BooleanField(default=None),
27+
),
28+
]

rootfs/api/models/app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,8 @@ def create(self, *args, **kwargs): # noqa
204204
try:
205205
self.appsettings_set.latest()
206206
except AppSettings.DoesNotExist:
207-
AppSettings.objects.create(owner=self.owner, app=self)
207+
AppSettings.objects.create(
208+
owner=self.owner, app=self, routable=True, autodeploy=True, autorollback=True)
208209
try:
209210
self.tls_set.latest()
210211
except TLS.DoesNotExist:

rootfs/api/models/appsettings.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ class AppSettings(UuidAuditedModel):
1919

2020
owner = models.ForeignKey(User, on_delete=models.PROTECT)
2121
app = models.ForeignKey('App', on_delete=models.CASCADE)
22-
routable = models.BooleanField(default=True)
23-
autodeploy = models.BooleanField(default=True)
24-
autorollback = models.BooleanField(default=True)
22+
routable = models.BooleanField(default=None)
23+
autodeploy = models.BooleanField(default=None)
24+
autorollback = models.BooleanField(default=None)
2525
autoscale = models.JSONField(default=dict, blank=True)
2626
label = models.JSONField(default=dict, blank=True)
2727

@@ -70,6 +70,8 @@ def _update_field(self, field, previous_settings):
7070
# if nothing changed copy the settings from previous
7171
if new is None and old is not None:
7272
setattr(self, field, old)
73+
elif new is None and isinstance(self._meta.get_field(field), models.BooleanField):
74+
setattr(self, field, True)
7375
elif old != new:
7476
self.summary += ["{} changed {} from {} to {}".format(self.owner, field, old, new)]
7577

rootfs/api/tests/test_app_settings.py

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,54 +24,76 @@ def tearDown(self):
2424
# make sure every test has a clean slate for k8s mocking
2525
cache.clear()
2626

27-
def test_settings_routable(self, mock_requests):
27+
def test_settings_bool(self, mock_requests):
2828
"""
2929
Create an application with the routable flag turned on or off
3030
"""
3131
# create app, expecting routable to be true
3232
app_id = self.create_app()
3333
app = App.objects.get(id=app_id)
3434
self.assertTrue(app.appsettings_set.latest().routable)
35+
self.assertTrue(app.appsettings_set.latest().autodeploy)
36+
self.assertTrue(app.appsettings_set.latest().autorollback)
3537
# Set routable to false
3638
response = self.client.post(
3739
f'/v2/apps/{app.id}/settings',
3840
{'routable': False}
3941
)
4042
self.assertEqual(response.status_code, 201, response.data)
4143
self.assertFalse(app.appsettings_set.latest().routable)
42-
43-
def test_settings_autodeploy(self, mock_requests):
44-
"""
45-
Create an application with the autorollback flag turned on or off
46-
"""
47-
# create app, expecting autodeploy to be true
48-
app_id = self.create_app()
49-
app = App.objects.get(id=app_id)
5044
self.assertTrue(app.appsettings_set.latest().autodeploy)
45+
self.assertTrue(app.appsettings_set.latest().autorollback)
46+
5147
# Set autodeploy to false
5248
response = self.client.post(
5349
f'/v2/apps/{app.id}/settings',
5450
{'autodeploy': False}
5551
)
5652
self.assertEqual(response.status_code, 201, response.data)
53+
self.assertFalse(app.appsettings_set.latest().routable)
5754
self.assertFalse(app.appsettings_set.latest().autodeploy)
58-
59-
def test_settings_autorollback(self, mock_requests):
60-
"""
61-
Create an application with the autorollback flag turned on or off
62-
"""
63-
# create app, expecting autorollback to be true
64-
app_id = self.create_app()
65-
app = App.objects.get(id=app_id)
6655
self.assertTrue(app.appsettings_set.latest().autorollback)
56+
6757
# Set autorollback to false
6858
response = self.client.post(
6959
f'/v2/apps/{app.id}/settings',
7060
{'autorollback': False}
7161
)
7262
self.assertEqual(response.status_code, 201, response.data)
63+
self.assertFalse(app.appsettings_set.latest().routable)
64+
self.assertFalse(app.appsettings_set.latest().autodeploy)
7365
self.assertFalse(app.appsettings_set.latest().autorollback)
7466

67+
# Set autorollback to true
68+
response = self.client.post(
69+
f'/v2/apps/{app.id}/settings',
70+
{'autorollback': True}
71+
)
72+
self.assertEqual(response.status_code, 201, response.data)
73+
self.assertFalse(app.appsettings_set.latest().routable)
74+
self.assertFalse(app.appsettings_set.latest().autodeploy)
75+
self.assertTrue(app.appsettings_set.latest().autorollback)
76+
77+
# Set autodeploy to true
78+
response = self.client.post(
79+
f'/v2/apps/{app.id}/settings',
80+
{'autodeploy': True}
81+
)
82+
self.assertEqual(response.status_code, 201, response.data)
83+
self.assertFalse(app.appsettings_set.latest().routable)
84+
self.assertTrue(app.appsettings_set.latest().autodeploy)
85+
self.assertTrue(app.appsettings_set.latest().autorollback)
86+
87+
# Set routable to false
88+
response = self.client.post(
89+
f'/v2/apps/{app.id}/settings',
90+
{'routable': True}
91+
)
92+
self.assertEqual(response.status_code, 201, response.data)
93+
self.assertTrue(app.appsettings_set.latest().routable)
94+
self.assertTrue(app.appsettings_set.latest().autodeploy)
95+
self.assertTrue(app.appsettings_set.latest().autorollback)
96+
7597
def test_autoscale(self, mock_requests):
7698
"""
7799
Test that autoscale can be applied

0 commit comments

Comments
 (0)