From 6a1dba03eeb32f4c30475c623173042fca77e6f1 Mon Sep 17 00:00:00 2001 From: Dariusz Smigiel Date: Fri, 27 Mar 2015 12:56:33 +0100 Subject: [PATCH] Remove duplicated MAC addresses from multi MAC field While adding new nodes, there is possibility to paste duplicated addresses in multi MAC field. Check if this situation occurred, and remove duplication. Closes-Bug: 1437212 Change-Id: I02436ce6db1b7ce42b98dbb18c1e96b4452db222 --- tuskar_ui/forms.py | 22 +++++++++++++--------- tuskar_ui/test/test_forms.py | 9 +++++++++ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/tuskar_ui/forms.py b/tuskar_ui/forms.py index eb892fc3d..e5aab2043 100644 --- a/tuskar_ui/forms.py +++ b/tuskar_ui/forms.py @@ -97,15 +97,19 @@ class MultiMACField(forms.fields.Field): def clean(self, value): value = super(MultiMACField, self).clean(value) - try: - macs = [] - for mac in SEPARATOR_RE.split(value): - if mac: - macs.append(normalize_MAC(mac)) - return ' '.join(macs) - except ValueError: - raise forms.ValidationError( - _(u'%r is not a valid MAC address.') % mac) + + macs = [] + for mac in SEPARATOR_RE.split(value): + if mac: + try: + normalized_mac = normalize_MAC(mac) + except ValueError: + raise forms.ValidationError( + _(u'%r is not a valid MAC address.') % mac) + else: + macs.append(normalized_mac) + + return ' '.join(sorted(set(macs))) class NetworkField(forms.fields.Field): diff --git a/tuskar_ui/test/test_forms.py b/tuskar_ui/test/test_forms.py index 0da52d703..9b9a0cd3f 100644 --- a/tuskar_ui/test/test_forms.py +++ b/tuskar_ui/test/test_forms.py @@ -57,3 +57,12 @@ class MultiMACFieldTests(test.TestCase): "DE:AD:BE:EF:CA:FC DE:AD:BE:EF:CA:FD DE:AD:BE:EF:CA:FE " "DE:AD:BE:EF:CA:FF", ) + + def test_duplicated(self): + field = forms.MultiMACField(required=False) + cleaned = field.clean("DE:AD:BE:EF:CA:FC DE:AD:BE:EF:CA:FC") + + self.assertEqual( + cleaned, + "DE:AD:BE:EF:CA:FC", + )