diff options
| author | Florian Apolloner <florian@apolloner.eu> | 2013-02-26 09:53:47 +0100 |
|---|---|---|
| committer | Florian Apolloner <florian@apolloner.eu> | 2013-02-26 14:36:57 +0100 |
| commit | 89f40e36246100df6a11316c31a76712ebc6c501 (patch) | |
| tree | 6e65639683ddaf2027908d1ecb1739e0e2ff853b /tests/custom_methods | |
| parent | b3d2ccb5bfbaf6e7fe1f98843baaa48c35a70950 (diff) | |
Merged regressiontests and modeltests into the test root.
Diffstat (limited to 'tests/custom_methods')
| -rw-r--r-- | tests/custom_methods/__init__.py | 0 | ||||
| -rw-r--r-- | tests/custom_methods/models.py | 40 | ||||
| -rw-r--r-- | tests/custom_methods/tests.py | 44 |
3 files changed, 84 insertions, 0 deletions
diff --git a/tests/custom_methods/__init__.py b/tests/custom_methods/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/custom_methods/__init__.py diff --git a/tests/custom_methods/models.py b/tests/custom_methods/models.py new file mode 100644 index 0000000000..cef3fd722b --- /dev/null +++ b/tests/custom_methods/models.py @@ -0,0 +1,40 @@ +""" +3. Giving models custom methods + +Any method you add to a model will be available to instances. +""" + +import datetime + +from django.db import models +from django.utils.encoding import python_2_unicode_compatible + + +@python_2_unicode_compatible +class Article(models.Model): + headline = models.CharField(max_length=100) + pub_date = models.DateField() + + def __str__(self): + return self.headline + + def was_published_today(self): + return self.pub_date == datetime.date.today() + + def articles_from_same_day_1(self): + return Article.objects.filter(pub_date=self.pub_date).exclude(id=self.id) + + def articles_from_same_day_2(self): + """ + Verbose version of get_articles_from_same_day_1, which does a custom + database query for the sake of demonstration. + """ + from django.db import connection + cursor = connection.cursor() + cursor.execute(""" + SELECT id, headline, pub_date + FROM custom_methods_article + WHERE pub_date = %s + AND id != %s""", [connection.ops.value_to_db_date(self.pub_date), + self.id]) + return [self.__class__(*row) for row in cursor.fetchall()] diff --git a/tests/custom_methods/tests.py b/tests/custom_methods/tests.py new file mode 100644 index 0000000000..9d7444ba62 --- /dev/null +++ b/tests/custom_methods/tests.py @@ -0,0 +1,44 @@ +from __future__ import absolute_import + +from datetime import date + +from django.test import TestCase + +from .models import Article + + +class MethodsTests(TestCase): + def test_custom_methods(self): + a = Article.objects.create( + headline="Area man programs in Python", pub_date=date(2005, 7, 27) + ) + b = Article.objects.create( + headline="Beatles reunite", pub_date=date(2005, 7, 27) + ) + + self.assertFalse(a.was_published_today()) + self.assertQuerysetEqual( + a.articles_from_same_day_1(), [ + "Beatles reunite", + ], + lambda a: a.headline, + ) + self.assertQuerysetEqual( + a.articles_from_same_day_2(), [ + "Beatles reunite", + ], + lambda a: a.headline + ) + + self.assertQuerysetEqual( + b.articles_from_same_day_1(), [ + "Area man programs in Python", + ], + lambda a: a.headline, + ) + self.assertQuerysetEqual( + b.articles_from_same_day_2(), [ + "Area man programs in Python", + ], + lambda a: a.headline + ) |
