Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions localflavor/us/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ def __init__(self, *args, **kwargs):
kwargs['max_length'] = 2
super(USStateField, self).__init__(*args, **kwargs)

def deconstruct(self):
name, path, args, kwargs = super(USStateField, self).deconstruct()
del kwargs["choices"]
del kwargs["max_length"]
return name, path, args, kwargs


class USPostalCodeField(CharField):
""""
Expand All @@ -36,6 +42,12 @@ def __init__(self, *args, **kwargs):
kwargs['max_length'] = 2
super(USPostalCodeField, self).__init__(*args, **kwargs)

def deconstruct(self):
name, path, args, kwargs = super(USPostalCodeField, self).deconstruct()
del kwargs["choices"]
del kwargs["max_length"]
return name, path, args, kwargs


class USZipCodeField(CharField):
"""
Expand All @@ -57,6 +69,11 @@ def __init__(self, *args, **kwargs):
kwargs['max_length'] = 10
super(USZipCodeField, self).__init__(*args, **kwargs)

def deconstruct(self):
name, path, args, kwargs = super(USZipCodeField, self).deconstruct()
del kwargs["max_length"]
return name, path, args, kwargs

def formfield(self, **kwargs):
defaults = {'form_class': forms.USZipCodeField}
defaults.update(kwargs)
Expand All @@ -74,6 +91,11 @@ def __init__(self, *args, **kwargs):
kwargs['max_length'] = 20
super(PhoneNumberField, self).__init__(*args, **kwargs)

def deconstruct(self):
name, path, args, kwargs = super(PhoneNumberField, self).deconstruct()
del kwargs["max_length"]
return name, path, args, kwargs

def formfield(self, **kwargs):
from localflavor.us.forms import USPhoneNumberField
defaults = {'form_class': USPhoneNumberField}
Expand All @@ -94,6 +116,11 @@ def __init__(self, *args, **kwargs):
kwargs['max_length'] = 11
super(USSocialSecurityNumberField, self).__init__(*args, **kwargs)

def deconstruct(self):
name, path, args, kwargs = super(USSocialSecurityNumberField, self).deconstruct()
del kwargs["max_length"]
return name, path, args, kwargs

def formfield(self, **kwargs):
from localflavor.us.forms import (USSocialSecurityNumberField as
USSocialSecurityNumberFieldFormField)
Expand Down
32 changes: 24 additions & 8 deletions tests/test_us/tests.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from __future__ import absolute_import, unicode_literals

import django
from django.test import TestCase

from localflavor.us.forms import (USZipCodeField, USPhoneNumberField,
USStateField, USStateSelect,
USSocialSecurityNumberField)
from localflavor.us import forms
from localflavor.us import models

from .forms import USPlaceForm

Expand Down Expand Up @@ -187,7 +187,7 @@ def test_full_postal_code_list(self):
self.assertHTMLEqual(str(self.form['postal_code']), usps_select_html)

def test_USStateSelect(self):
f = USStateSelect()
f = forms.USStateSelect()
out = '''<select name="state">
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
Expand Down Expand Up @@ -265,7 +265,7 @@ def test_USZipCodeField(self):
'6060-1234': error_format,
'60606-': error_format,
}
self.assertFieldOutput(USZipCodeField, valid, invalid)
self.assertFieldOutput(forms.USZipCodeField, valid, invalid)

def test_USZipCodeField_formfield(self):
"""Test that the full US ZIP code field is really the full list."""
Expand All @@ -288,7 +288,7 @@ def test_USPhoneNumberField(self):
'555-1212': error_format,
'312-55-1212': error_format,
}
self.assertFieldOutput(USPhoneNumberField, valid, invalid)
self.assertFieldOutput(forms.USPhoneNumberField, valid, invalid)

def test_USStateField(self):
error_invalid = ['Enter a U.S. state or territory.']
Expand All @@ -301,7 +301,7 @@ def test_USStateField(self):
invalid = {
60606: error_invalid,
}
self.assertFieldOutput(USStateField, valid, invalid)
self.assertFieldOutput(forms.USStateField, valid, invalid)

def test_USSocialSecurityNumberField(self):
error_invalid = ['Enter a valid U.S. Social Security number in XXX-XX-XXXX format.']
Expand All @@ -315,4 +315,20 @@ def test_USSocialSecurityNumberField(self):
'900-12-3456': error_invalid,
'999-98-7652': error_invalid,
}
self.assertFieldOutput(USSocialSecurityNumberField, valid, invalid)
self.assertFieldOutput(forms.USSocialSecurityNumberField, valid, invalid)

def test_deconstruct_methods(self):
"""Test the deconstruct method that was added in Django 1.7"""
if django.VERSION > (1, 7):
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this be >=? In practice, this shouldn't change anything as all 1.7 releases will probably be greater than (1, 7), but semantically, I think it would be clearer.

classes = (models.USStateField, models.USPostalCodeField,
models.USZipCodeField, models.PhoneNumberField,
models.USSocialSecurityNumberField)
for cls in classes:
test_instance = cls()
name, path, args, kwargs = test_instance.deconstruct()
new_instance = cls(*args, **kwargs)
for attr in ('choices', 'max_length'):
self.assertEqual(
getattr(test_instance, attr),
getattr(new_instance, attr),
)