public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-07-14 20:15 Slava Bacherikov
  0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-07-14 20:15 UTC (permalink / raw
  To: gentoo-commits

commit:     cacb123d2b34abc49f84d6a4489bedb13cf2be22
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sat Jul 14 18:43:54 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sat Jul 14 18:43:54 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=cacb123d

Refactor filtering mixin

---
 gpackages/apps/generic/views.py |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index e8b5cdc..27a64eb 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -1,5 +1,6 @@
 from django.views.generic import TemplateView, ListView
 from string import Template
+import re
 
 class ContextView(object):
     extra_context = {}
@@ -73,16 +74,21 @@ class MultipleFilterListViewMixin(object):
     allowed_many = {}
     m2m_filter = set()
 
-    def get_queryset(self):
-        query = super(MultipleFilterListViewMixin, self).get_queryset()
-
+    def get_filters(self):
         qs = filter_req(self.request.GET, self.allowed_filter)
         qs.update(filter_req(self.kwargs, self.allowed_filter))
+        return qs
 
+    def is_reverse(self):
         if self.kwargs.get('rev') is None:
             reverse = bool(self.request.GET.get('rev',False))
         else:
             reverse = bool(self.kwargs.get('rev',False))
+
+        return reverse
+
+    def get_order(self):
+        reverse = self.is_reverse()
         
         if 'order' in self.request.GET:
             order = dynamic_order(self.request.GET, self.allowed_order,reverse)
@@ -90,6 +96,12 @@ class MultipleFilterListViewMixin(object):
             order = dynamic_order(self.kwargs, self.allowed_order, reverse)
             if self.kwargs.get('order') not in self.allowed_order:
                 raise Http404('no such order')
+        return order
+
+    def get_queryset(self):
+        query = super(MultipleFilterListViewMixin, self).get_queryset()
+        qs = self.get_filters()
+        order = self.get_order()
 
         qa = dynamic_filter(qs, self.allowed_filter, self.allowed_many)
         queryset = query.filter(**qa).order_by(order)
@@ -106,7 +118,7 @@ class MultipleFilterListViewMixin(object):
         t = "(?:{0}/(?P<{0}>[^/]+)/)?"
         l =[]
         for key in cls.allowed_filter.iterkeys():
-            l.append(t.format(key))
+            l.append(t.format(re.escape(key)))
 
         return ''.join(l) + "(?:order/(?P<order>[a-z]*)/)?(?P<rev>rev/)?"
             



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-11 22:30 Slava Bacherikov
  0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-11 22:30 UTC (permalink / raw
  To: gentoo-commits

commit:     a5df0c3770038f1d407b9d7844773614a06dc9d6
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sat Aug 11 18:22:38 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sat Aug 11 18:22:38 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=a5df0c37

Extend filtering view

---
 gpackages/apps/generic/views.py |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index 165633d..575f90b 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -5,6 +5,7 @@ from django.contrib.syndication.views import Feed
 from django.utils.feedgenerator import Atom1Feed, rfc3339_date
 from django.utils import tzinfo
 from django.utils.timezone import is_naive
+from django.http import Http404
 
 class ContextView(object):
     extra_context = {}
@@ -71,6 +72,7 @@ def dynamic_order(args_list, allowed_list, reverse = None):
 class MultipleFilterListViewMixin(object):
     allowed_filter = {}
     allowed_order = {}
+    boolean_filters = ()
     # allowed_many = {'name': int_count}
     allowed_many = {}
     m2m_filter = set()
@@ -93,6 +95,8 @@ class MultipleFilterListViewMixin(object):
                 vm = v.split(',')
                 if len(vm)>1:
                     v = cut_to_len(vm, self.allowed_many[k])
+            elif k in self.boolean_filters:
+                v = True if v == 'yes' else False
             newqs[k] = v 
         self.queries_dict = newqs
         return newqs
@@ -134,9 +138,13 @@ class MultipleFilterListViewMixin(object):
     @classmethod
     def get_url_part(cls):
         t = "(?:{0}/(?P<{0}>[^/]+)/)?"
+        t_bool = "(?:{0}/(?P<{0}>yes|no)/)?"
         l =[]
         for key in cls.allowed_filter.iterkeys():
-            l.append(t.format(re.escape(key)))
+            if key in cls.boolean_filters:
+                l.append(t_bool.format(re.escape(key)))
+            else:
+                l.append(t.format(re.escape(key)))
 
         return ''.join(l) + "(?:order/(?P<order>[a-z]*)/)?(?P<rev>rev/)?"
 


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
  0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
  To: gentoo-commits

commit:     4c6b17ec4345dfbccfc26472c4fa1adf94d39c03
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Aug 15 15:56:43 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Aug 15 15:56:43 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=4c6b17ec

Add tests for generic application

---
 gpackages/apps/generic/tests.py |  274 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 271 insertions(+), 3 deletions(-)

diff --git a/gpackages/apps/generic/tests.py b/gpackages/apps/generic/tests.py
index 501deb7..a3fb050 100644
--- a/gpackages/apps/generic/tests.py
+++ b/gpackages/apps/generic/tests.py
@@ -6,11 +6,279 @@ Replace this with more appropriate tests for your application.
 """
 
 from django.test import TestCase
+from django.db import models
+from django.test.client import RequestFactory
+from django.http import Http404
+from operator import attrgetter
+from time import sleep
+from . import views
+import re
+
+class Tag(models.Model):
+    name = models.CharField(unique = True, max_length = 40)
+
+    def __unicode__(self):
+        return self.name
+
+class Messages(models.Model):
+    title = models.CharField(max_length = 120)
+    text = models.TextField()
+    published = models.BooleanField(default = False)
+    created_datetime = models.DateTimeField(auto_now_add = True)
+    updated_datetime = models.DateTimeField(auto_now = True)
+    tags = models.ManyToManyField(Tag, blank = True)
+
+    def __unicode__(self):
+        return self.title
+
+class TestingViewMixin(object):
+    
+    def init_test_args(self, request, *args, **kwargs):
+        self.request = request
+        self.args = args
+        self.kwargs = kwargs
+
+    def get_queryset(self):
+        return self.queryset
+
+    def get_context_data(self, **kwargs):
+        dct = kwargs.copy()
+        return dct
+
+class MessagesFilter(views.MultipleFilterListViewMixin, TestingViewMixin):
+    queryset = Messages.objects.all()
+    m2m_filter = set(['tags'])
+    allowed_many = {'tags': 3 }
+    boolean_filters = ('published',)
+    allowed_filter = { 'title':'title',
+                       'published' : 'published',
+                       'tags' : 'tags__name' }
+
+    allowed_order = { 'create': 'created_datetime',
+                      'update': 'updated_datetime', 
+                       None   : 'created_datetime' }
+
+    def init_test(self, request):
+        url_re = re.compile(r'^%s$' % self.get_url_part())
+        m = url_re.match(request.path[1:])
+        if m is None:
+            raise Http404('Bad url')
+        kwargs = m.groupdict()
+        self.init_test_args(request, **kwargs)
+
+    def __init__(self, request):
+        self.init_test(request)
 
 
 class SimpleTest(TestCase):
+    def setUp(self):
+        self.factory = RequestFactory()
+        tags = []
+        for tag in ['one', 'two', 'three', 'four', 'five', 'six', 'seven']:
+            tag_obj = Tag.objects.create(name = tag)
+            tags.append(tag_obj)
+
+        m_obj = Messages.objects.create(title = 'First message',
+                                        text = 'Message',
+                                        published = True)
+        m_obj.tags.add(*tags[:2])
+
+        m_obj = Messages.objects.create(title = 'Second message',
+                                        text = 'Message',
+                                        published = False)
+        m_obj.tags.add(*tags[2:4])
+
+        mu_obj = Messages.objects.create(title = 'Update',
+                                         text = 'Message',
+                                         published = False)
+        mu_obj.tags.add(*tags[4:])
+
+        m_obj = Messages.objects.create(title = 'New',
+                                        text = 'Message',
+                                        published = True)
+        m_obj.tags.add(tags[0], tags[6])
+
+        m_obj = Messages.objects.create(title = 'title',
+                                        text = 'Message',
+                                        published = False)
+        m_obj.tags.add(tags[3], tags[5])
+
+        m_obj = Messages.objects.create(title = 'message',
+                                        text = 'Message',
+                                        published = True)
+        m_obj.tags.add(tags[6])
+
+        m_obj = Messages.objects.create(title = 'cats',
+                                        text = 'Message',
+                                        published = True)
+        m_obj.tags.add(tags[5])
+        m_obj = Messages.objects.create(title = 'dogs',
+                                        text = 'Message',
+                                        published = False)
+        m_obj.tags.add(tags[5])
+
+        # For changed updated_datetime
+        sleep(3)
+        mu_obj.text = 'Updated'
+        mu_obj.save()
+
     def test_basic_addition(self):
-        """
-        Tests that 1 + 1 always equals 2.
-        """
         self.assertEqual(1 + 1, 2)
+
+    def test_filtering_view_url(self):
+        url = MessagesFilter.get_url_part()
+        self.assertEqual(url, '(?:published/(?P<published>yes|no)/)?' \
+                              '(?:tags/(?P<tags>[^/]+)/)?' \
+                              '(?:title/(?P<title>[^/]+)/)?' \
+                              '(?:order/(?P<order>[a-z]*)/)?(?P<rev>rev/)?')
+
+    def test_filtering_view_query_boolean(self):
+        active = [
+             "First message",
+             "New",
+             "message",
+             "cats"
+        ]
+        inactive = [
+             "Second message",
+             "Update",
+             "title",
+             "dogs"
+        ]
+        request = self.factory.get('/published/yes/')
+        self.assertQuerysetEqual(
+            MessagesFilter(request).get_queryset(), 
+            active, 
+            attrgetter("title")
+        )
+
+        request = self.factory.get('/published/no/')
+        self.assertQuerysetEqual(
+            MessagesFilter(request).get_queryset(), 
+            inactive, 
+            attrgetter("title")
+        )
+        request = self.factory.get('/?published=yes')
+        self.assertQuerysetEqual(
+            MessagesFilter(request).get_queryset(), 
+            active, 
+            attrgetter("title")
+        )
+
+        request = self.factory.get('/?published=no')
+        self.assertQuerysetEqual(
+            MessagesFilter(request).get_queryset(), 
+            inactive, 
+            attrgetter("title")
+        )
+
+    def test_filtering_view_query_ordering(self):
+        request = self.factory.get('/order/update/rev/')
+        first = MessagesFilter(request).get_queryset()[0]
+        self.assertEqual(first.title, "Update")
+
+        request = self.factory.get('/order/test/')
+        with self.assertRaises(Http404):
+            MessagesFilter(request).get_queryset()
+
+        request = self.factory.get('/order/newtest/rev/')
+        with self.assertRaises(Http404):
+            MessagesFilter(request).get_queryset()
+
+        request = self.factory.get('/?order=update&rev=1')
+        first = MessagesFilter(request).get_queryset()[0]
+        self.assertEqual(first.title, "Update")
+
+        request = self.factory.get('/?order=test')
+        with self.assertRaises(Http404):
+            MessagesFilter(request).get_queryset()
+
+        request = self.factory.get('/?order=newtest&rev=1')
+        with self.assertRaises(Http404):
+            MessagesFilter(request).get_queryset()
+
+    def test_filtering_view_query_search(self):
+        def title_test(title):
+            request = self.factory.get('/title/%s/' % title)
+            obj = MessagesFilter(request).get_queryset()[0]
+            self.assertEqual(obj.title, title)
+
+        title_test("title")
+        title_test("cats")
+        title_test("dogs")
+        title_test("New")
+
+        def title_test2(title):
+            request = self.factory.get('/?title=%s' % title)
+            obj = MessagesFilter(request).get_queryset()[0]
+            self.assertEqual(obj.title, title)
+
+        title_test2("First message")
+        title_test2("Second message")
+
+        request = self.factory.get('/title/empty/')
+        self.assertEqual(len(MessagesFilter(request).get_queryset()), 0)
+
+    def test_filtering_view_query_m2m_search(self):
+        first_tag = [
+            "First message", 
+            "New",
+        ]
+        last_tag = [
+            "Update",
+            "message"
+        ]
+        four_tag = [
+            "Second message",
+            "title"
+        ]
+        six_tag = [
+            "Update",
+            "title",
+            "cats",
+            "dogs"
+        ]
+        first_last_tag = first_tag + last_tag
+        four_six_tag = list(set(six_tag + four_tag))
+        first_four_last = list(set(first_last_tag + four_tag))
+
+        def test_m2m_tags(link, args_cmp):
+            request = self.factory.get(link)
+            self.assertQuerysetEqual(
+                MessagesFilter(request).get_queryset(), 
+                args_cmp, 
+                attrgetter("title"),
+                ordered = False
+            )
+
+        test_m2m_tags('/tags/one/', first_tag)
+        test_m2m_tags('/?tags=one', first_tag)
+
+        test_m2m_tags('/tags/one,seven/', first_last_tag)
+        test_m2m_tags('/?tags=one,seven', first_last_tag)
+
+        test_m2m_tags('/tags/four,six/', four_six_tag)
+        test_m2m_tags('/?tags=four,six', four_six_tag)
+
+        test_m2m_tags('/tags/one,four,seven/', first_four_last)
+        test_m2m_tags('/?tags=one,four,seven', first_four_last)
+
+        # last tag should be rejected due the limit in allowed_many
+        test_m2m_tags('/tags/one,four,seven,six/', first_four_last)
+        test_m2m_tags('/?tags=one,four,seven,six', first_four_last)
+
+    def test_filtering_view_query_complex(self):
+        def test_complex(link, args_cmp):
+            request = self.factory.get(link)
+            self.assertQuerysetEqual(
+                MessagesFilter(request).get_queryset(), 
+                args_cmp, 
+                attrgetter("title"),
+                ordered = False
+            )
+
+        test_complex('/published/yes/tags/six/', ["cats"])
+        test_complex('/?published=yes&tags=six', ["cats"])
+
+        test_complex('/published/yes/tags/seven/title/message/', ["message"])
+        test_complex('/?published=yes&tags=seven&title=message', ["message"])


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
  0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
  To: gentoo-commits

commit:     31f1c86bedd15f532f37e372153b1e2ac8dee81c
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Aug 15 14:58:00 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Aug 15 14:58:00 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=31f1c86b

Change sort behavior

---
 gpackages/apps/generic/views.py |   32 +++++++++++++++++++-------------
 1 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index 575f90b..26b116c 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -8,6 +8,7 @@ from django.utils.timezone import is_naive
 from django.http import Http404
 
 class ContextView(object):
+    "Mixin to add additional data to context"
     extra_context = {}
     def get_context_data(self, **kwargs):
         ret = super(ContextView, self).get_context_data(**kwargs)
@@ -21,6 +22,7 @@ class ContextTemplateView(ContextView, TemplateView):
     pass
 
 class SetLang(ContextTemplateView):
+    "View for changing language js is unavailable"
     template_name = 'setlang.html'
     extra_context = {'page_name': 'Set Language', 'nav_name' : 'setlanguage'}
 
@@ -53,12 +55,10 @@ def filter_req(filter_set, allowed):
             result[k] = v
     return result
 
-def dynamic_order(args_list, allowed_list, reverse = None):
+def dynamic_order(order_attr, allowed_list, reverse = None):
     order = allowed_list.get(None)
-    if reverse is None:
-        reverse = args_list.get('reverse', False)
-    if args_list.get('order') in allowed_list:
-        order = allowed_list.get(args_list.get('order'))
+    if order_attr in allowed_list:
+        order = allowed_list.get(order_attr)
 
     if order == '?':
         return order
@@ -103,9 +103,9 @@ class MultipleFilterListViewMixin(object):
 
     def is_reverse(self):
         if self.kwargs.get('rev') is None:
-            reverse = bool(self.request.GET.get('rev',False))
+            reverse = bool(self.request.GET.get('rev', False))
         else:
-            reverse = bool(self.kwargs.get('rev',False))
+            reverse = bool(self.kwargs.get('rev', False))
 
         return reverse
 
@@ -113,11 +113,13 @@ class MultipleFilterListViewMixin(object):
         reverse = self.is_reverse()
         
         if 'order' in self.request.GET:
-            order = dynamic_order(self.request.GET, self.allowed_order,reverse)
+            order_attr =  self.request.GET.get('order')
         else:
-            order = dynamic_order(self.kwargs, self.allowed_order, reverse)
-            if self.kwargs.get('order') not in self.allowed_order:
-                raise Http404('no such order')
+            order_attr = self.kwargs.get('order')
+
+        if order_attr not in self.allowed_order:
+            raise Http404('no such order')
+        order = dynamic_order(order_attr, self.allowed_order, reverse)
         return order
 
     def get_queryset(self):
@@ -146,6 +148,7 @@ class MultipleFilterListViewMixin(object):
             else:
                 l.append(t.format(re.escape(key)))
 
+        # Maybe add num chars to order attribute ?
         return ''.join(l) + "(?:order/(?P<order>[a-z]*)/)?(?P<rev>rev/)?"
 
 class FeedWithUpdated(Feed):
@@ -164,10 +167,13 @@ class FeedWithUpdated(Feed):
 class RightAtom1Feed(Atom1Feed):
     def add_item_elements(self, handler, item):
         if item['pubdate'] is not None:
-            handler.addQuickElement(u"published", rfc3339_date(item['pubdate']).decode('utf-8'))
+            handler.addQuickElement(u"published", 
+                rfc3339_date(item['pubdate']).decode('utf-8'))
+
             item['pubdate'] = None
 
         if item['updated'] is not None:
-            handler.addQuickElement(u"updated", rfc3339_date(item['updated']).decode('utf-8'))
+            handler.addQuickElement(u"updated", 
+                rfc3339_date(item['updated']).decode('utf-8'))
 
         return super(RightAtom1Feed, self).add_item_elements(handler, item)


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
  0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
  To: gentoo-commits

commit:     3c7f552e852073966ebbe4c7d677eeae36188870
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Aug 15 21:59:11 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Aug 15 21:59:11 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=3c7f552e

Improve generic tests

---
 gpackages/apps/generic/tests.py |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/gpackages/apps/generic/tests.py b/gpackages/apps/generic/tests.py
index a3fb050..7192f21 100644
--- a/gpackages/apps/generic/tests.py
+++ b/gpackages/apps/generic/tests.py
@@ -10,9 +10,9 @@ from django.db import models
 from django.test.client import RequestFactory
 from django.http import Http404
 from operator import attrgetter
-from time import sleep
 from . import views
 import re
+import datetime
 
 class Tag(models.Model):
     name = models.CharField(unique = True, max_length = 40)
@@ -118,9 +118,9 @@ class SimpleTest(TestCase):
         m_obj.tags.add(tags[5])
 
         # For changed updated_datetime
-        sleep(3)
-        mu_obj.text = 'Updated'
-        mu_obj.save()
+        nd = datetime.datetime.now() + datetime.timedelta(0, 5)
+        Messages.objects.filter(pk = mu_obj.pk). \
+            update(text = 'Updated', updated_datetime = nd)
 
     def test_basic_addition(self):
         self.assertEqual(1 + 1, 2)


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
  0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
  To: gentoo-commits

commit:     72d3d19cdd69b5b1e6ec88065f4554831f055742
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Thu Aug 16 23:41:43 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Thu Aug 16 23:41:43 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=72d3d19c

Improve generic tests

---
 gpackages/apps/generic/tests.py |   78 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+), 0 deletions(-)

diff --git a/gpackages/apps/generic/tests.py b/gpackages/apps/generic/tests.py
index 7192f21..c781c03 100644
--- a/gpackages/apps/generic/tests.py
+++ b/gpackages/apps/generic/tests.py
@@ -9,11 +9,23 @@ from django.test import TestCase
 from django.db import models
 from django.test.client import RequestFactory
 from django.http import Http404
+from django.conf.urls import url, patterns
+from django.http import HttpResponse
+from django.core.urlresolvers import reverse
 from operator import attrgetter
 from . import views
+from .templatetags import active_link, paginator
 import re
 import datetime
 
+def test_view(request, *args, **kwargs):
+    return HttpResponse('')
+
+urlpatterns = patterns('',
+    url(r'^test/$', test_view, name = 'test'),
+    url(r'^test2/(?P<extra>extra)(?P<args>args)$', test_view, name = 'test2'),
+)
+
 class Tag(models.Model):
     name = models.CharField(unique = True, max_length = 40)
 
@@ -282,3 +294,69 @@ class SimpleTest(TestCase):
 
         test_complex('/published/yes/tags/seven/title/message/', ["message"])
         test_complex('/?published=yes&tags=seven&title=message', ["message"])
+
+class TemplateTagsTest(TestCase):
+    urls = "generic.tests"
+    def setUp(self):
+        self.factory = RequestFactory()
+
+    def test_basic_addition(self):
+        self.assertEqual(1 + 1, 2)
+
+    def test_settings(self):
+        url = reverse('test')
+        self.assertEqual(url, '/test/')
+
+    def test_templatetag_fun1(self):
+        request = self.factory.get('/test/')
+        self.assertEqual(
+            active_link.active_str({'request': request}, '/test/'),
+            "active"
+        )
+        request = self.factory.get('/test/?query=val')
+        self.assertEqual(
+            active_link.active_str({'request': request}, '/test/'),
+            "active"
+        )
+        request = self.factory.get('/test2/')
+        self.assertEqual(
+            active_link.active_str({'request': request}, '/test/'),
+            ""
+        )
+        request = self.factory.get('/test/')
+        self.assertEqual(
+            active_link.active_str({'request': request}, '/test'),
+            ""
+        )
+
+    def test_templatetag_fun2(self):
+        fun2 = active_link.active_link
+        request = self.factory.get('/test/')
+        self.assertEqual(
+            fun2({'request': request}, 'test', 'text'),
+            '<li class="active"><a href="/test/">text</a><li>'
+        )
+        request = self.factory.get('/another_test/')
+        self.assertEqual(
+            fun2({'request': request}, 'test', 'text'),
+            '<li><a href="/test/">text</a><li>'
+        )
+        
+        request = self.factory.get('/another_test/')
+        self.assertEqual(
+            fun2({'request': request}, 'bad_test', 'text'),
+            '<li><a href="#">text</a><li>'
+        )
+
+        request = self.factory.get('/test/')
+        self.assertEqual(
+            fun2({'request': request}, 'test', 'text', id = 'test_id'),
+            '<li class="active"><a href="/test/" id="test_id">text</a><li>'
+        )
+        request = self.factory.get('/test2/extraargs')
+        self.assertEqual(
+            fun2({'request': request}, 'test2', 'text', 
+                 id = 'test_id', extra = 'extra', args = 'args'),
+            '<li class="active"><a href="/test2/extraargs" '\
+            'id="test_id">text</a><li>'
+        )


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
  0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
  To: gentoo-commits

commit:     32373d3cf12db6da4a1dce2763d929e32b31fab7
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Aug 19 13:50:33 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Aug 19 13:50:33 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=32373d3c

Add more tests to generic

---
 gpackages/apps/generic/tests.py |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/gpackages/apps/generic/tests.py b/gpackages/apps/generic/tests.py
index c781c03..e635770 100644
--- a/gpackages/apps/generic/tests.py
+++ b/gpackages/apps/generic/tests.py
@@ -8,6 +8,7 @@ Replace this with more appropriate tests for your application.
 from django.test import TestCase
 from django.db import models
 from django.test.client import RequestFactory
+from django.template import Template, Context, TemplateSyntaxError
 from django.http import Http404
 from django.conf.urls import url, patterns
 from django.http import HttpResponse
@@ -360,3 +361,28 @@ class TemplateTagsTest(TestCase):
             '<li class="active"><a href="/test2/extraargs" '\
             'id="test_id">text</a><li>'
         )
+
+    def test_templatetag_active_str(self):
+        request = self.factory.get('/test/')
+        out = Template(
+                "{% load active_link %}"
+                "{% active_str '/test/' %}"
+            ).render(Context({'request': request}))
+
+        self.assertEqual(out, "active")
+
+        request = self.factory.get('/test/?query=val')
+        out = Template(
+                "{% load active_link %}"
+                "{% active_str '/test/' %}"
+            ).render(Context({'request': request}))
+
+        self.assertEqual(out, "active")
+
+        request = self.factory.get('/test2/')
+        out = Template(
+                "{% load active_link %}"
+                "{% active_str '/test/' %}"
+            ).render(Context({'request': request}))
+
+        self.assertEqual(out, "")


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-09-23 19:35 Slava Bacherikov
  0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-09-23 19:35 UTC (permalink / raw
  To: gentoo-commits

commit:     e93bb75de771b099307a722f746da4c6238dcb3e
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Sep 23 11:39:34 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Sep 23 11:39:34 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=e93bb75d

Deleted unneeded code

---
 gpackages/apps/generic/views.py |    3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index 910d3a5..e56eb74 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -7,7 +7,6 @@ from django.http import Http404
 from django.core.urlresolvers import reverse, NoReverseMatch
 from django.utils.html import mark_safe
 from string import Template
-from collections import namedtuple
 import re
 
 class ContextView(object):
@@ -74,8 +73,6 @@ def dynamic_order(order_attr, allowed_list, reverse = None):
         order =  order[1:]
     return order
 
-OrderClass = namedtuple('OrderClass', ['active', 'link', 'reverse'])
-
 class OrderClass(object):
 
     __slots__ = ('active', 'link', 'reverse')


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-09-23 19:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-20 13:03 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/ Slava Bacherikov
  -- strict thread matches above, loose matches on Subject: below --
2012-09-23 19:35 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-11 22:30 Slava Bacherikov
2012-07-14 20:15 Slava Bacherikov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox