summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polyconseil.fr>2016-09-01 13:23:12 +0200
committerRaphaël Barrois <raphael.barrois@polyconseil.fr>2016-09-01 13:23:12 +0200
commitbe455e8998ff8445db15476a4da1d5e3e293eab4 (patch)
treeb55ad92485b3df66f5480acf785bfa550408aed0 /tests
parentf514edb523f01dd8a7da4c56d2ce077b30e630ab (diff)
downloadsemantic-version-be455e8998ff8445db15476a4da1d5e3e293eab4.tar.gz
Add support for Django 1.10
Stop coercing fields magically: >>> a = SomeModel() >>> a.version = '0.1.0' >>> a.version '0.1.0' >>> a.full_clean() >>> a.version Version('0.1.0') Closes #43, #45
Diffstat (limited to 'tests')
-rw-r--r--tests/test_django.py89
1 files changed, 58 insertions, 31 deletions
diff --git a/tests/test_django.py b/tests/test_django.py
index c93dde7..478c657 100644
--- a/tests/test_django.py
+++ b/tests/test_django.py
@@ -38,23 +38,33 @@ def save_and_refresh(obj):
obj = obj.__class__.objects.get(id=obj.id)
+Version = semantic_version.Version
+Spec = semantic_version.Spec
+
+
@unittest.skipIf(not django_loaded, "Django not installed")
class DjangoFieldTestCase(unittest.TestCase):
def test_version(self):
- obj = models.VersionModel(version='0.1.1', spec='==0.1.1,!=0.1.1-alpha')
+ obj = models.VersionModel(version=Version('0.1.1'), spec=Spec('==0.1.1,!=0.1.1-alpha'))
- self.assertEqual(semantic_version.Version('0.1.1'), obj.version)
- self.assertEqual(semantic_version.Spec('==0.1.1,!=0.1.1-alpha'), obj.spec)
+ self.assertEqual(Version('0.1.1'), obj.version)
+ self.assertEqual(Spec('==0.1.1,!=0.1.1-alpha'), obj.spec)
alt_obj = models.VersionModel(version=obj.version, spec=obj.spec)
- self.assertEqual(semantic_version.Version('0.1.1'), alt_obj.version)
- self.assertEqual(semantic_version.Spec('==0.1.1,!=0.1.1-alpha'), alt_obj.spec)
+ self.assertEqual(Version('0.1.1'), alt_obj.version)
+ self.assertEqual(Spec('==0.1.1,!=0.1.1-alpha'), alt_obj.spec)
self.assertEqual(obj.spec, alt_obj.spec)
self.assertEqual(obj.version, alt_obj.version)
+ def test_version_clean(self):
+ """Calling .full_clean() should convert str to Version/Spec objects."""
+ obj = models.VersionModel(version='0.1.1', spec='==0.1.1,!=0.1.1-alpha')
obj.full_clean()
+ self.assertEqual(Version('0.1.1'), obj.version)
+ self.assertEqual(Spec('==0.1.1,!=0.1.1-alpha'), obj.spec)
+
def test_version_save(self):
"""Test saving object with a VersionField."""
# first test with a null value
@@ -66,7 +76,7 @@ class DjangoFieldTestCase(unittest.TestCase):
self.assertIsNone(obj.optional_spec)
# now set to something that is not null
- spec = semantic_version.Spec('==0,!=0.2')
+ spec = Spec('==0,!=0.2')
obj.optional_spec = spec
save_and_refresh(obj)
self.assertEqual(obj.optional_spec, spec)
@@ -82,35 +92,45 @@ class DjangoFieldTestCase(unittest.TestCase):
self.assertIsNone(obj.optional_spec)
# now set to something that is not null
- spec = semantic_version.Spec('==0,!=0.2')
+ spec = Spec('==0,!=0.2')
obj.optional_spec = spec
save_and_refresh(obj)
self.assertEqual(obj.optional_spec, spec)
- def test_partial_spec(self):
+ def test_partial_spec_clean(self):
obj = models.VersionModel(version='0.1.1', spec='==0,!=0.2')
- self.assertEqual(semantic_version.Version('0.1.1'), obj.version)
- self.assertEqual(semantic_version.Spec('==0,!=0.2'), obj.spec)
+ obj.full_clean()
+ self.assertEqual(Version('0.1.1'), obj.version)
+ self.assertEqual(Spec('==0,!=0.2'), obj.spec)
- def test_coerce(self):
+ def test_coerce_clean(self):
obj = models.CoerceVersionModel(version='0.1.1a+2', partial='23')
- self.assertEqual(semantic_version.Version('0.1.1-a+2'), obj.version)
- self.assertEqual(semantic_version.Version('23', partial=True), obj.partial)
+ obj.full_clean()
+ self.assertEqual(Version('0.1.1-a+2'), obj.version)
+ self.assertEqual(Version('23', partial=True), obj.partial)
obj2 = models.CoerceVersionModel(version='23', partial='0.1.2.3.4.5/6')
- self.assertEqual(semantic_version.Version('23.0.0'), obj2.version)
- self.assertEqual(semantic_version.Version('0.1.2+3.4.5-6', partial=True), obj2.partial)
+ obj2.full_clean()
+ self.assertEqual(Version('23.0.0'), obj2.version)
+ self.assertEqual(Version('0.1.2+3.4.5-6', partial=True), obj2.partial)
+ @unittest.skipIf(django.VERSION[:2] < (1, 8), "Django<1.8 casts values on setattr")
def test_invalid_input(self):
- self.assertRaises(ValueError, models.VersionModel,
- version='0.1.1', spec='blah')
- self.assertRaises(ValueError, models.VersionModel,
- version='0.1', spec='==0.1.1,!=0.1.1-alpha')
+ v = models.VersionModel(version='0.1.1', spec='blah')
+ self.assertRaises(ValueError, v.full_clean)
+
+ v2 = models.VersionModel(version='0.1', spec='==0.1.1,!=0.1.1-alpha')
+ self.assertRaises(ValueError, v2.full_clean)
+
+ @unittest.skipUnless(django.VERSION[:2] < (1, 8), "Django>=1.8 doesn't mangle setattr")
+ def test_invalid_input_full_clean(self):
+ self.assertRaises(ValueError, models.VersionModel, version='0.1.1', spec='blah')
+ self.assertRaises(ValueError, models.VersionModel, version='0.1', spec='==0.1.1,!=0.1.1-alpha')
def test_partial(self):
- obj = models.PartialVersionModel(partial='0.1.0')
+ obj = models.PartialVersionModel(partial=Version('0.1.0'))
- self.assertEqual(semantic_version.Version('0.1.0', partial=True), obj.partial)
+ self.assertEqual(Version('0.1.0', partial=True), obj.partial)
self.assertIsNone(obj.optional)
self.assertIsNone(obj.optional_spec)
@@ -121,17 +141,18 @@ class DjangoFieldTestCase(unittest.TestCase):
optional_spec=obj.optional_spec,
)
- self.assertEqual(semantic_version.Version('0.1.0', partial=True), alt_obj.partial)
+ self.assertEqual(Version('0.1.0', partial=True), alt_obj.partial)
self.assertEqual(obj.partial, alt_obj.partial)
self.assertIsNone(obj.optional)
self.assertIsNone(obj.optional_spec)
+ # Validation should be fine
obj.full_clean()
def test_serialization(self):
- o1 = models.VersionModel(version='0.1.1', spec='==0.1.1,!=0.1.1-alpha')
- o2 = models.VersionModel(version='0.4.3-rc3+build3',
- spec='<=0.1.1-rc2,!=0.1.1-rc1')
+ o1 = models.VersionModel(version=Version('0.1.1'), spec=Spec('==0.1.1,!=0.1.1-alpha'))
+ o2 = models.VersionModel(version=Version('0.4.3-rc3+build3'),
+ spec=Spec('<=0.1.1-rc2,!=0.1.1-rc1'))
data = serializers.serialize('json', [o1, o2])
@@ -142,10 +163,16 @@ class DjangoFieldTestCase(unittest.TestCase):
self.assertEqual(o2.spec, obj2.object.spec)
def test_serialization_partial(self):
- o1 = models.PartialVersionModel(partial='0.1.1', optional='0.2.4-rc42',
- optional_spec=None)
- o2 = models.PartialVersionModel(partial='0.4.3-rc3+build3', optional='',
- optional_spec='==0.1.1,!=0.1.1-alpha')
+ o1 = models.PartialVersionModel(
+ partial=Version('0.1.1', partial=True),
+ optional=Version('0.2.4-rc42', partial=True),
+ optional_spec=None,
+ )
+ o2 = models.PartialVersionModel(
+ partial=Version('0.4.3-rc3+build3', partial=True),
+ optional='',
+ optional_spec=Spec('==0.1.1,!=0.1.1-alpha'),
+ )
data = serializers.serialize('json', [o1, o2])
@@ -234,8 +261,8 @@ if django_loaded:
TestRunner().teardown_databases(cls.old_state)
def test_db_interaction(self):
- o1 = models.VersionModel(version='0.1.1', spec='<0.2.4-rc42')
- o2 = models.VersionModel(version='0.4.3-rc3+build3', spec='==0.4.3')
+ o1 = models.VersionModel(version=Version('0.1.1'), spec=Spec('<0.2.4-rc42'))
+ o2 = models.VersionModel(version=Version('0.4.3-rc3+build3'), spec=Spec('==0.4.3'))
o1.save()
o2.save()