Merge ~ack/maas:1923251-driver-char-field-use-default into maas:master

Proposed by Alberto Donato
Status: Merged
Approved by: Alberto Donato
Approved revision: 365a6262a2cb5422f49c4340ee2b9a9a5183f9dd
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ack/maas:1923251-driver-char-field-use-default
Merge into: maas:master
Diff against target: 115 lines (+38/-8)
4 files modified
src/maasserver/api/tests/test_pods.py (+16/-0)
src/maasserver/clusterrpc/driver_parameters.py (+4/-3)
src/maasserver/clusterrpc/tests/test_driver_parameters.py (+15/-2)
src/maasserver/forms/pods.py (+3/-3)
Reviewer Review Type Date Requested Status
Adam Collard (community) Approve
MAAS Lander Needs Fixing
Review via email: mp+400959@code.launchpad.net

Commit message

LP: 1923251 - set empty_value for CharField default in pod drivers

This fixes the linked by always passing a value for "project" (which must be
set), falling back to the default when no value is specified.

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b 1923251-driver-char-field-use-default lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/9731/console
COMMIT: 54a1d123c248e9bf433a6cc5b0d6261453f14d28

review: Needs Fixing
Revision history for this message
Adam Collard (adam-collard) wrote :

Add a test for the specific case? i.e. API request omitting project uses default

Revision history for this message
Alberto Donato (ack) wrote :

Updated (and fixed logic for test failure). thanks

Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b 1923251-driver-char-field-use-default lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/9733/console
COMMIT: 365a6262a2cb5422f49c4340ee2b9a9a5183f9dd

review: Needs Fixing
Revision history for this message
Adam Collard (adam-collard) :
review: Approve

There was an error fetching revisions from git servers. Please try again in a few minutes. If the problem persists, contact Launchpad support.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/api/tests/test_pods.py b/src/maasserver/api/tests/test_pods.py
2index fb07c8e..0fb4965 100644
3--- a/src/maasserver/api/tests/test_pods.py
4+++ b/src/maasserver/api/tests/test_pods.py
5@@ -198,6 +198,22 @@ class TestPodsAPIAdmin(PodAPITestForAdmin, PodMixin):
6 parsed_result = json_load_bytes(response.content)
7 self.assertEqual(parsed_result["type"], pod_info["type"])
8
9+ def test_create_lxd_default_project(self):
10+ self.patch(pods, "post_commit_do")
11+ discovered_pod, _, _ = self.fake_pod_discovery()
12+ ip = factory.make_ipv4_address()
13+ info = {
14+ "type": "lxd",
15+ "power_address": ip,
16+ "power_pass": "sekret",
17+ "ip_address": ip,
18+ }
19+ response = self.client.post(reverse("pods_handler"), info)
20+ self.assertEqual(http.client.OK, response.status_code)
21+ parsed_result = json_load_bytes(response.content)
22+ pod = Pod.objects.get(id=parsed_result["id"])
23+ self.assertEqual(pod.power_parameters["project"], "default")
24+
25 def test_create_creates_pod_with_default_resource_pool(self):
26 self.patch(pods, "post_commit_do")
27 discovered_pod, _, _ = self.fake_pod_discovery()
28diff --git a/src/maasserver/clusterrpc/driver_parameters.py b/src/maasserver/clusterrpc/driver_parameters.py
29index 3f5a3a5..440075a 100644
30--- a/src/maasserver/clusterrpc/driver_parameters.py
31+++ b/src/maasserver/clusterrpc/driver_parameters.py
32@@ -75,13 +75,14 @@ def make_form_field(json_field):
33 extra_parameters = {}
34
35 default = json_field.get("default")
36+ required = json_field.get("required")
37 if default is not None:
38 extra_parameters["initial"] = default
39+ if required and field_class is forms.CharField:
40+ extra_parameters["empty_value"] = default
41
42 form_field = field_class(
43- label=json_field["label"],
44- required=json_field["required"],
45- **extra_parameters
46+ label=json_field["label"], required=required, **extra_parameters
47 )
48 return form_field
49
50diff --git a/src/maasserver/clusterrpc/tests/test_driver_parameters.py b/src/maasserver/clusterrpc/tests/test_driver_parameters.py
51index 9356a86..d9728c7 100644
52--- a/src/maasserver/clusterrpc/tests/test_driver_parameters.py
53+++ b/src/maasserver/clusterrpc/tests/test_driver_parameters.py
54@@ -204,7 +204,7 @@ class TestMakeFormField(MAASServerTestCase):
55 (django_field.label, django_field.required),
56 )
57
58- def test_sets_initial_to_default(self):
59+ def test_sets_default_not_required(self):
60 json_field = {
61 "name": "some_field",
62 "label": "Some Field",
63@@ -213,7 +213,20 @@ class TestMakeFormField(MAASServerTestCase):
64 "default": "some default",
65 }
66 django_field = make_form_field(json_field)
67- self.assertEqual(json_field["default"], django_field.initial)
68+ self.assertEqual("some default", django_field.initial)
69+ self.assertEqual("", django_field.empty_value)
70+
71+ def test_sets_default_and_empty_value_required(self):
72+ json_field = {
73+ "name": "some_field",
74+ "label": "Some Field",
75+ "field_type": "string",
76+ "required": True,
77+ "default": "some default",
78+ }
79+ django_field = make_form_field(json_field)
80+ self.assertEqual("some default", django_field.initial)
81+ self.assertEqual("some default", django_field.empty_value)
82
83
84 class TestMakeSettingField(MAASServerTestCase):
85diff --git a/src/maasserver/forms/pods.py b/src/maasserver/forms/pods.py
86index cfedaac..2fbc1ff 100644
87--- a/src/maasserver/forms/pods.py
88+++ b/src/maasserver/forms/pods.py
89@@ -222,7 +222,7 @@ class PodForm(MAASModelForm):
90 for driver in self.drivers_orig
91 if driver["driver_type"] == "pod"
92 }
93- if len(self.drivers) == 0:
94+ if not self.drivers:
95 type_value = ""
96 elif type_value not in self.drivers:
97 type_value = (
98@@ -256,7 +256,7 @@ class PodForm(MAASModelForm):
99 super()._clean_fields()
100 # If no errors then we re-process with the fields required by the
101 # selected type for the pod.
102- if len(self.errors) == 0:
103+ if not self.errors:
104 driver_fields = get_driver_parameters_from_json(
105 self.drivers_orig, scope=SETTING_SCOPE.BMC
106 )
107@@ -272,7 +272,7 @@ class PodForm(MAASModelForm):
108
109 def clean(self):
110 cleaned_data = super().clean()
111- if len(self.drivers) == 0:
112+ if not self.drivers:
113 set_form_error(
114 self,
115 "type",

Subscribers

People subscribed via source and target branches