Ejemplo n.º 1
0
 def test_escaping(self):
     # Underscores, percent signs and backslashes have special meaning in the
     # underlying SQL code, but Django handles the quoting of them automatically.
     b8 = Book(title='Book_ with underscore',
               pubdate=datetime(2005, 11, 20))
     b8.save()
     self.assertQuerysetEqual(Book.objects.filter(title__startswith='Book'),
                              [
                                  '<Book: Book_ with underscore>',
                                  '<Book: Book 5>',
                                  '<Book: Book 6>',
                                  '<Book: Book 4>',
                                  '<Book: Book 2>',
                                  '<Book: Book 3>',
                                  '<Book: Book 7>',
                                  '<Book: Book 1>',
                              ])
     self.assertQuerysetEqual(
         Book.objects.filter(title__startswith='Book_'),
         ['<Book: Book_ with underscore>'])
     b9 = Book(title='Book% with percent sign',
               pubdate=datetime(2005, 11, 21))
     b9.save()
     self.assertQuerysetEqual(Book.objects.filter(title__startswith='Book'),
                              [
                                  '<Book: Book% with percent sign>',
                                  '<Book: Book_ with underscore>',
                                  '<Book: Book 5>',
                                  '<Book: Book 6>',
                                  '<Book: Book 4>',
                                  '<Book: Book 2>',
                                  '<Book: Book 3>',
                                  '<Book: Book 7>',
                                  '<Book: Book 1>',
                              ])
     self.assertQuerysetEqual(
         Book.objects.filter(title__startswith='Book%'),
         ['<Book: Book% with percent sign>'])
     b10 = Book(title='Book with \\ backslash',
                pubdate=datetime(2005, 11, 22))
     b10.save()
     self.assertQuerysetEqual(Book.objects.filter(title__contains='\\'),
                              ['<Book: Book with \ backslash>'])
Ejemplo n.º 2
0
    def test_m2m_signals(self):
        """ Assigning and removing to/from m2m shouldn't generate an m2m signal """

        b1 = Book(title='Snow Crash', pubdate='2012-02-02 12:00')
        self.get_signal_output(b1.save)
        a1 = Author(name='Neal Stephenson')
        self.get_signal_output(a1.save)
        self.assertEqual(self.get_signal_output(setattr, b1, 'authors', [a1]),
                         [])
        self.assertEqual(self.get_signal_output(setattr, b1, 'authors', []),
                         [])
Ejemplo n.º 3
0
    def test_model_signals(self):
        """ Model saves should throw some signals. """
        a1 = Author(name='Neal Stephenson')
        self.assertEqual(self.get_signal_output(a1.save), [
            "pre_save signal, Neal Stephenson",
            "post_save signal, Neal Stephenson", "Is created"
        ])

        b1 = Book(title='Snow Crash', pubdate='2012-02-02 12:00')
        self.assertEqual(self.get_signal_output(b1.save), [
            "pre_save signal, Snow Crash", "post_save signal, Snow Crash",
            "Is created"
        ])
Ejemplo n.º 4
0
 def setUp(self):
     # Create a few Authors.
     self.au1 = Author(name='Author 1')
     self.au1.save()
     self.au2 = Author(name='Author 2')
     self.au2.save()
     # Create a couple of Books.
     self.b1 = Book(title='Book 1',
                    pubdate=datetime(2005, 7, 26),
                    author=self.au1)
     self.b1.save()
     self.b2 = Book(title='Book 2',
                    pubdate=datetime(2005, 7, 27),
                    author=self.au1)
     self.b2.save()
     self.b3 = Book(title='Book 3',
                    pubdate=datetime(2005, 7, 27),
                    author=self.au1)
     self.b3.save()
     self.b4 = Book(title='Book 4',
                    pubdate=datetime(2005, 7, 28),
                    author=self.au1)
     self.b4.save()
     self.b5 = Book(title='Book 5',
                    pubdate=datetime(2005, 8, 1, 9, 0),
                    author=self.au2)
     self.b5.save()
     self.b6 = Book(title='Book 6',
                    pubdate=datetime(2005, 8, 1, 8, 0),
                    author=self.au2)
     self.b6.save()
     self.b7 = Book(title='Book 7',
                    pubdate=datetime(2005, 7, 27),
                    author=self.au2)
     self.b7.save()
     # Create a few Tags.
     self.t1 = Tag(name='Tag 1')
     self.t1.save()
     self.t1.articles.add(self.b1, self.b2, self.b3)
     self.t2 = Tag(name='Tag 2')
     self.t2.save()
     self.t2.articles.add(self.b3, self.b4, self.b5)
     self.t3 = Tag(name='Tag 3')
     self.t3.save()
     self.t3.articles.add(self.b5, self.b6, self.b7)
Ejemplo n.º 5
0
 def test_regex_backreferencing(self):
     # grouping and backreferences
     now = datetime.now()
     b10 = Book(pubdate=now, title='foobar')
     b10.save()
     b11 = Book(pubdate=now, title='foobaz')
     b11.save()
     b12 = Book(pubdate=now, title='ooF')
     b12.save()
     b13 = Book(pubdate=now, title='foobarbaz')
     b13.save()
     b14 = Book(pubdate=now, title='zoocarfaz')
     b14.save()
     b15 = Book(pubdate=now, title='barfoobaz')
     b15.save()
     b16 = Book(pubdate=now, title='bazbaRFOO')
     b16.save()
     self.assertQuerysetEqual(
         Book.objects.filter(title__regex=r'b(.).*b\1'),
         ['<Book: barfoobaz>', '<Book: bazbaRFOO>', '<Book: foobarbaz>'])
Ejemplo n.º 6
0
    def test_regex(self):
        # Create some articles with a bit more interesting names for testing field lookups:
        for a in Book.objects.all():
            a.delete()
        now = datetime.now()
        b1 = Book(pubdate=now, title='f')
        b1.save()
        b2 = Book(pubdate=now, title='fo')
        b2.save()
        b3 = Book(pubdate=now, title='foo')
        b3.save()
        b4 = Book(pubdate=now, title='fooo')
        b4.save()
        b5 = Book(pubdate=now, title='hey-Foo')
        b5.save()
        b6 = Book(pubdate=now, title='bar')
        b6.save()
        b7 = Book(pubdate=now, title='AbBa')
        b7.save()
        b8 = Book(pubdate=now, title='baz')
        b8.save()
        b9 = Book(pubdate=now, title='baxZ')
        b9.save()
        # zero-or-more
        self.assertQuerysetEqual(
            Book.objects.filter(title__regex=r'fo*'),
            ['<Book: f>', '<Book: fo>', '<Book: foo>', '<Book: fooo>'])
        self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'fo*'), [
            '<Book: f>',
            '<Book: fo>',
            '<Book: foo>',
            '<Book: fooo>',
            '<Book: hey-Foo>',
        ])
        # one-or-more
        self.assertQuerysetEqual(Book.objects.filter(title__regex=r'fo+'),
                                 ['<Book: fo>', '<Book: foo>', '<Book: fooo>'])
        # wildcard
        self.assertQuerysetEqual(Book.objects.filter(title__regex=r'fooo?'),
                                 ['<Book: foo>', '<Book: fooo>'])
        # leading anchor
        self.assertQuerysetEqual(
            Book.objects.filter(title__regex=r'^b'),
            ['<Book: bar>', '<Book: baxZ>', '<Book: baz>'])
        self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'^a'),
                                 ['<Book: AbBa>'])
        # trailing anchor
        self.assertQuerysetEqual(Book.objects.filter(title__regex=r'z$'),
                                 ['<Book: baz>'])
        self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'z$'),
                                 ['<Book: baxZ>', '<Book: baz>'])
        # character sets
        self.assertQuerysetEqual(Book.objects.filter(title__regex=r'ba[rz]'),
                                 ['<Book: bar>', '<Book: baz>'])
        self.assertQuerysetEqual(Book.objects.filter(title__regex=r'ba.[RxZ]'),
                                 ['<Book: baxZ>'])
        self.assertQuerysetEqual(
            Book.objects.filter(title__iregex=r'ba[RxZ]'),
            ['<Book: bar>', '<Book: baxZ>', '<Book: baz>'])

        # and more articles:
        b10 = Book(pubdate=now, title='foobar')
        b10.save()
        b11 = Book(pubdate=now, title='foobaz')
        b11.save()
        b12 = Book(pubdate=now, title='ooF')
        b12.save()
        b13 = Book(pubdate=now, title='foobarbaz')
        b13.save()
        b14 = Book(pubdate=now, title='zoocarfaz')
        b14.save()
        b15 = Book(pubdate=now, title='barfoobaz')
        b15.save()
        b16 = Book(pubdate=now, title='bazbaRFOO')
        b16.save()

        # alternation
        self.assertQuerysetEqual(Book.objects.filter(title__regex=r'oo(f|b)'),
                                 [
                                     '<Book: barfoobaz>',
                                     '<Book: foobar>',
                                     '<Book: foobarbaz>',
                                     '<Book: foobaz>',
                                 ])
        self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'oo(f|b)'),
                                 [
                                     '<Book: barfoobaz>',
                                     '<Book: foobar>',
                                     '<Book: foobarbaz>',
                                     '<Book: foobaz>',
                                     '<Book: ooF>',
                                 ])
        self.assertQuerysetEqual(
            Book.objects.filter(title__regex=r'^foo(f|b)'),
            ['<Book: foobar>', '<Book: foobarbaz>', '<Book: foobaz>'])

        # greedy matching
        self.assertQuerysetEqual(Book.objects.filter(title__regex=r'b.*az'), [
            '<Book: barfoobaz>',
            '<Book: baz>',
            '<Book: bazbaRFOO>',
            '<Book: foobarbaz>',
            '<Book: foobaz>',
        ])
        self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'b.*ar'), [
            '<Book: bar>',
            '<Book: barfoobaz>',
            '<Book: bazbaRFOO>',
            '<Book: foobar>',
            '<Book: foobarbaz>',
        ])