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", + )