Add reservations parameters for the lease update form

Change-Id: I67ec602e25d02be38ae6673b0c3cb132d9729494
Closes-Bug: #1714119
This commit is contained in:
Hiroaki Kobayashi 2017-12-18 15:19:11 +09:00
parent 1b1f50f470
commit e43b1e9957
2 changed files with 58 additions and 2 deletions

View File

@ -236,6 +236,21 @@ class UpdateForm(forms.SelfHandlingForm):
widget=forms.TextInput(
attrs={'placeholder': _('Valid suffix are d/h/m (e.g. +1h)')}),
required=False)
reservations = forms.CharField(
label=_("Reservation values to update"),
help_text=_('Enter reservation values to update as JSON'),
widget=forms.Textarea(
attrs={'rows': 8,
'placeholder':
'e.g.\n'
'[\n'
' {\n'
' "id": "087bc740-6d2d-410b-9d47-c7b2b55a9d36",\n'
' "max": 3\n'
' }\n'
']'}),
max_length=511,
required=False)
def __init__(self, request, *args, **kwargs):
super(UpdateForm, self).__init__(request, *args, **kwargs)
@ -247,6 +262,7 @@ class UpdateForm(forms.SelfHandlingForm):
# reservation gets to support update of the start/end_time.
del self.fields['start_time']
del self.fields['end_time']
del self.fields['reservations']
return
def handle(self, request, data):
@ -271,6 +287,10 @@ class UpdateForm(forms.SelfHandlingForm):
elif end_time[0] == '-':
fields['reduce_by'] = end_time[1:]
reservations = data.get('reservations', None)
if reservations:
fields['reservations'] = reservations
try:
api.client.lease_update(self.request, lease_id=lease_id, **fields)
messages.success(request, _("Lease update started."))
@ -287,6 +307,7 @@ class UpdateForm(forms.SelfHandlingForm):
lease_name = cleaned_data.get("lease_name", None)
start_time = cleaned_data.get("start_time", None)
end_time = cleaned_data.get("end_time", None)
reservations = cleaned_data.get("reservations", None)
if start_time:
valid = re.match('^[+-]\d+[dhm]$', start_time)
@ -302,5 +323,14 @@ class UpdateForm(forms.SelfHandlingForm):
"a form of +/- number d/h/m. "
"(e.g. +1h)")
if not (lease_name or start_time or end_time):
if reservations:
try:
reservations = eval(reservations)
cleaned_data['reservations'] = reservations
except (SyntaxError, NameError):
raise forms.ValidationError(
_('Reservation values must written in JSON')
)
if not (lease_name or start_time or end_time or reservations):
raise forms.ValidationError("Nothing to update.")

View File

@ -204,7 +204,7 @@ class LeasesTests(test.TestCase):
self.assertContains(res, 'An error occurred while creating')
@test.create_stubs({api.client: ('lease_get', 'lease_update')})
def test_update_lease(self):
def test_update_lease_name_and_date(self):
lease = self.leases.get(name='lease-1')
api.client.lease_get(
IsA(http.HttpRequest),
@ -229,6 +229,32 @@ class LeasesTests(test.TestCase):
self.assertMessageCount(success=1)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.client: ('lease_get', 'lease_update')})
def test_update_lease_reservations(self):
lease = self.leases.get(name='lease-1')
api.client.lease_get(
IsA(http.HttpRequest),
lease['id']
).AndReturn(lease)
api.client.lease_update(
IsA(http.HttpRequest),
lease_id=lease['id'],
reservations=[{"id": "087bc740-6d2d-410b-9d47-c7b2b55a9d36",
"max": 3}]
)
form_data = {
'lease_id': lease['id'],
'reservations': '[{"id": "087bc740-6d2d-410b-9d47-c7b2b55a9d36",'
' "max": 3}]'
}
self.mox.ReplayAll()
res = self.client.post(reverse(UPDATE_URL_BASE, args=[lease['id']]),
form_data)
self.assertNoFormErrors(res)
self.assertMessageCount(success=1)
self.assertRedirectsNoFollow(res, INDEX_URL)
@test.create_stubs({api.client: ('lease_get', 'lease_update')})
def test_update_lease_error(self):
lease = self.leases.get(name='lease-1')