Exemple #1
0
    def test_partial_update(self):
        a = self.author(
            name='Randall Munroe',
            slug='randall-munroe',
        )
        view = views.AuthorUpdate.as_view(partial_updates=True)
        res = view(DummyRequest(), pk=a.id)
        self.assertEqual(res.status_code, 200)
        self.assertIsInstance(res.context['form'], ModelForm)
        self.assertEqual(res.context['form']._fields['name'].object_data, 'Randall Munroe')
        self.assertEqual(res.context['form']._fields['slug'].object_data, 'randall-munroe')
        self.assertEqual(res.context['object'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertEqual(res.context['author'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertTemplateUsed(res, 'tests:templates/author_form.html')
        self.assertIsInstance(res.context['macros']['my_macros']['testmacro'], Macro)

        # Modification with both POST and PUT (browser compatible)
        res = view(DummyRequest(
            method='POST',
            params=MultiDict({'name': 'Randall Munroe (xkcd)'}),
        ), pk=a.id)
        self.assertEqual(res.status_code, 302)
        self.assertRedirects(res, '/list/authors/')
        author = Session.query(Author).one()
        self.assertQuerysetEqual(author.name, 'Randall Munroe (xkcd)')
        self.assertQuerysetEqual(author.slug, 'randall-munroe')
Exemple #2
0
 def test_allow_empty_false(self):
     self.artist()
     view = views.ArtistList.as_view(allow_empty=False)
     res = view(DummyRequest())
     self.assertEqual(res.status_code, 200)
     Session.query(Artist).delete()
     self.assertRaises(httpexceptions.HTTPNotFound, view, DummyRequest())
Exemple #3
0
 def test_create_with_interpolated_redirect(self):
     view = views.NaiveAuthorCreate.as_view(success_url='/edit/author/%(id)d/update/')
     res = view(DummyRequest(
         method='POST',
         params=MultiDict({'name': 'Randall Munroe', 'slug': 'randall-munroe'})
     ))
     self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe>'])
     self.assertEqual(res.status_code, 302)
     id = Session.query(Author).all()[0].id
     self.assertRedirects(res, '/edit/author/%d/update/' % id)
Exemple #4
0
 def test_create_with_object_url(self):
     view = views.ArtistCreate.as_view()
     res = view(DummyRequest(
         method='POST',
         params=MultiDict({'name': 'Rene Magritte'})
     ))
     self.assertEqual(res.status_code, 302)
     artist = Session.query(Artist).filter(Artist.name=='Rene Magritte').one()
     self.assertRedirects(res, '/detail/artist/%d/' % artist.id)
     self.assertQuerysetEqual(Session.query(Artist).all(), ['<Artist: Rene Magritte>'])
Exemple #5
0
    def test_delete_with_special_properties(self):
        a = self.author(name='Randall Munroe', slug='randall-munroe')
        view = views.SpecializedAuthorDelete.as_view()
        res = view(DummyRequest(), pk=a.id)
        self.assertEqual(res.status_code, 200)
        self.assertEqual(res.context['object'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertEqual(res.context['thingy'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertFalse('author' in res.context)
        self.assertTemplateUsed(res, 'tests:templates/confirm_delete.html')

        res = view(DummyRequest(method='POST'), pk=a.id)
        self.assertEqual(res.status_code, 302)
        self.assertRedirects(res, '/list/authors/')
        self.assertQuerysetEqual(Session.query(Author).all(), [])
Exemple #6
0
 def test_update_with_interpolated_redirect(self):
     a = self.author(
         name='Randall Munroe',
         slug='randall-munroe',
     )
     view = views.NaiveAuthorUpdate.as_view(success_url='/edit/author/%(id)d/update/')
     res = view(DummyRequest(
         method='POST',
         params=MultiDict({'name': 'Randall Munroe (author of xkcd)', 'slug': 'randall-munroe'}),
     ), pk=a.id)
     self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe (author of xkcd)>'])
     self.assertEqual(res.status_code, 302)
     pk = Session.query(Author).all()[0].id
     self.assertRedirects(res, '/edit/author/%d/update/' % pk)
Exemple #7
0
    def test_delete_by_post(self):
        a = self.author(name='Randall Munroe', slug='randall-munroe')
        view = views.AuthorDelete.as_view()
        res = view(DummyRequest(), pk=a.id)
        self.assertEqual(res.status_code, 200)
        self.assertEqual(res.context['object'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertEqual(res.context['author'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertTemplateUsed(res, 'tests:templates/author_confirm_delete.html')
        self.assertIsInstance(res.context['macros']['my_macros']['testmacro'], Macro)

        # Deletion with POST
        res = view(DummyRequest(method='POST'), pk=a.id)
        self.assertEqual(res.status_code, 302)
        self.assertRedirects(res, '/list/authors/')
        self.assertQuerysetEqual(Session.query(Author).all(), [])
Exemple #8
0
    def test_update_put(self):
        # Note that this test doesn't work under Django as it doesn't process
        # PUT data specially, but it does work here as we are interacting
        # directly with the view.

        a = self.author(
            name='Randall Munroe',
            slug='randall-munroe',
        )
        view = views.AuthorUpdate.as_view()
        res = view(DummyRequest(), pk=a.id)
        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'tests:templates/author_form.html')

        res = view(DummyRequest(
            method='PUT',
            params=MultiDict({'name': 'Randall Munroe (author of xkcd)', 'slug': 'randall-munroe'}),
        ), pk=a.id)
        # Here is the expected failure. PUT data are not processed in any special
        # way by django. So the request will equal to a POST without data, hence
        # the form will be invalid and redisplayed with errors (status code 200).
        # See also #12635
        self.assertEqual(res.status_code, 302)
        self.assertRedirects(res, '/list/authors/')
        self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe (author of xkcd)>'])
Exemple #9
0
 def test_template_name_suffix(self):
     view = views.AuthorList.as_view(template_name_suffix='_objects')
     res = view(DummyRequest())
     self.assertEqual(res.status_code, 200)
     self.assertEqual(list(res.context['object_list']), list(Session.query(Author).all()))
     self.assertIs(res.context['author_list'], res.context['object_list'])
     self.assertTemplateUsed(res, 'tests:templates/author_objects.html')
Exemple #10
0
 def test_paginate_by_no_allow_empty(self):
     self.author()
     view = views.AuthorList.as_view(allow_empty=False, paginate_by=2)
     res = view(DummyRequest())
     self.assertEqual(list(res.context['object_list']), list(Session.query(Author).all()))
     self.assertIs(res.context['author_list'], res.context['object_list'])
     self.assertTemplateUsed(res, 'tests:templates/author_list.html')
Exemple #11
0
 def test_delete_with_interpolated_redirect(self):
     a = self.author(name='Randall Munroe', slug='randall-munroe')
     view = views.AuthorDelete.as_view(success_url='/edit/authors/create/?deleted=%(id)s')
     res = view(DummyRequest(method='POST'), pk=a.id)
     self.assertEqual(res.status_code, 302)
     self.assertRedirects(res, '/edit/authors/create/?deleted=%d' % a.id)
     self.assertQuerysetEqual(Session.query(Author).all(), [])
Exemple #12
0
    def test_create_with_special_properties(self):
        view = views.SpecializedAuthorCreate.as_view()
        res = view(DummyRequest())
        self.assertEqual(res.status_code, 200)
        self.assertIsInstance(res.context['form'], AuthorForm)
        self.assertFalse('object' in res.context)
        self.assertFalse('author' in res.context)
        self.assertTemplateUsed(res, 'tests:templates/form.html')

        res = view(DummyRequest(
            method='POST',
            params=MultiDict({'name': 'Randall Munroe', 'slug': 'randall-munroe'})
        ))
        self.assertEqual(res.status_code, 302)
        obj = Session.query(Author).filter(Author.slug=='randall-munroe').one()
        self.assertRedirects(res, '/detail/author/%s/' % obj.id)
        self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe>'])
Exemple #13
0
 def test_duplicate_context_object_name(self):
     view = views.AuthorList.as_view(context_object_name='object_list')
     res = view(DummyRequest())
     self.assertEqual(res.status_code, 200)
     self.assertEqual(list(res.context['object_list']), list(Session.query(Author).all()))
     self.assertNotIn('authors', res.context)
     self.assertNotIn('author_list', res.context)
     self.assertTemplateUsed(res, 'tests:templates/author_list.html')
Exemple #14
0
 def test_delete_by_delete(self):
     # Deletion with browser compatible DELETE method
     a = self.author(name='Randall Munroe', slug='randall-munroe')
     view = views.AuthorDelete.as_view()
     res = view(DummyRequest(method='DELETE'), pk=a.id)
     self.assertEqual(res.status_code, 302)
     self.assertRedirects(res, '/list/authors/')
     self.assertQuerysetEqual(Session.query(Author).all(), [])
Exemple #15
0
 def test_create_invalid(self):
     view = views.AuthorCreate.as_view()
     res = view(DummyRequest(
         method='POST',
         params=MultiDict({'name': 'A' * 101, 'slug': 'randall-munroe'})
     ))
     self.assertEqual(res.status_code, 200)
     self.assertTemplateUsed(res, 'tests:templates/author_form.html')
     self.assertEqual(len(res.context['form'].errors), 1)
     self.assertEqual(Session.query(Author).count(), 0)
Exemple #16
0
 def test_create_endpoint_invalid(self):
     view = views.AuthorCreate.as_view(endpoint=True)
     res = view(DummyRequest(
         method='POST',
         params=MultiDict({'name': 'A' * 101, 'slug': 'randall-munroe'})
     ))
     self.assertEqual(res.status_code, 400)
     self.assertEqual(Session.query(Author).count(), 0)
     decoded = json.loads(res.body)
     self.assertIn('errors', decoded)
Exemple #17
0
 def test_update_endpoint_with_url(self):
     a = self.artist(name='Rene Magritte')
     view = views.ArtistUpdate.as_view(endpoint=True)
     res = view(DummyRequest(
         method='POST',
         params=MultiDict({'name': 'Rene Magritte'}),
     ), pk=a.id)
     self.assertEqual(res.status_code, 302)
     self.assertRedirects(res, '/detail/artist/%d/' % a.id)
     self.assertQuerysetEqual(Session.query(Artist).all(), ['<Artist: Rene Magritte>'])
Exemple #18
0
 def test_verbose_name(self):
     self.author()
     view = views.ArtistList.as_view()
     res = view(DummyRequest())
     self.assertEqual(res.status_code, 200)
     self.assertTemplateUsed(res, 'tests:templates/list.html')
     self.assertEqual(list(res.context['object_list']), list(Session.query(Artist).all()))
     self.assertIs(res.context['artist_list'], res.context['object_list'])
     self.assertIsNone(res.context['paginator'])
     self.assertIsNone(res.context['page_obj'])
     self.assertFalse(res.context['is_paginated'])
Exemple #19
0
 def test_query(self):
     view = views.AuthorList.as_view()
     res = view(DummyRequest())
     self.assertEqual(res.status_code, 200)
     self.assertTemplateUsed(res, 'tests:templates/author_list.html')
     self.assertEqual(list(res.context['object_list']), list(Session.query(Author).all()))
     self.assertIsInstance(res.context['view'], View)
     self.assertIs(res.context['author_list'], res.context['object_list'])
     self.assertIsNone(res.context['paginator'])
     self.assertIsNone(res.context['page_obj'])
     self.assertFalse(res.context['is_paginated'])
     self.assertIsInstance(res.context['macros']['my_macros']['testmacro'], Macro)
Exemple #20
0
 def test_update_endpoint(self):
     a = self.author(
         name='Randall Munroe',
         slug='randall-munroe',
     )
     view = views.AuthorUpdate.as_view(endpoint=True, success_url=None)
     res = view(DummyRequest(
         method='POST',
         params=MultiDict({'name': 'Randall Munroe (xkcd)', 'slug': 'randall-munroe'}),
     ), pk=a.id)
     self.assertEqual(res.status_code, 200)
     self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe (xkcd)>'])
Exemple #21
0
    def test_update_with_special_properties(self):
        a = self.author(
            name='Randall Munroe',
            slug='randall-munroe',
        )
        view = views.SpecializedAuthorUpdate.as_view()
        res = view(DummyRequest(), pk=a.id)
        self.assertEqual(res.status_code, 200)
        self.assertIsInstance(res.context['form'], views.AuthorForm)
        self.assertEqual(res.context['object'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertEqual(res.context['thingy'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertFalse('author' in res.context)
        self.assertTemplateUsed(res, 'tests:templates/form.html')

        res = view(DummyRequest(
            method='POST',
            params=MultiDict({'name': 'Randall Munroe (author of xkcd)', 'slug': 'randall-munroe'}),
        ), pk=a.id)
        self.assertEqual(res.status_code, 302)
        self.assertRedirects(res, '/detail/author/%d/' % a.id)
        self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe (author of xkcd)>'])
Exemple #22
0
 def test_paginated_query_shortdata(self):
     # Test that short datasets ALSO result in a paginated view.
     self.author()
     view = views.AuthorList.as_view(paginate_by=30)
     res = view(DummyRequest())
     self.assertEqual(res.status_code, 200)
     self.assertTemplateUsed(res, 'tests:templates/author_list.html')
     self.assertEqual(list(res.context['object_list']), list(Session.query(Author).all()))
     self.assertIs(res.context['author_list'], res.context['object_list'])
     self.assertEqual(res.context['page_obj'].number, 1)
     self.assertEqual(res.context['paginator'].num_pages, 1)
     self.assertFalse(res.context['is_paginated'])
Exemple #23
0
    def test_update_get_object(self):
        a = self.author(
            name='Randall Munroe',
            slug='randall-munroe',
        )
        view = views.OneAuthorUpdate.as_view()
        res = view(DummyRequest())
        self.assertEqual(res.status_code, 200)
        self.assertIsInstance(res.context['form'], ModelForm)
        self.assertIsInstance(res.context['view'], View)
        self.assertEqual(res.context['object'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertEqual(res.context['author'], Session.query(Author).filter(Author.id==a.id).one())
        self.assertTemplateUsed(res, 'tests:templates/author_form.html')

        # Modification with both POST and PUT (browser compatible)
        res = view(DummyRequest(
            method='POST',
            params=MultiDict({'name': 'Randall Munroe (xkcd)', 'slug': 'randall-munroe'}),
        ))
        self.assertEqual(res.status_code, 302)
        self.assertRedirects(res, '/list/authors/')
        self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe (xkcd)>'])
Exemple #24
0
    def test_create_endpoint(self):
        view = views.AuthorCreate.as_view(endpoint=True, success_url=None)
        res = view(DummyRequest())
        self.assertEqual(res.status_code, 501)
        self.assertEqual(res.body, '')

        res = view(DummyRequest(
            method='POST',
            params=MultiDict({'name': 'Randall Munroe', 'slug': 'randall-munroe'})
        ))
        self.assertEqual(res.status_code, 200)
        self.assertEqual(res.body, '')
        self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe>'])
Exemple #25
0
 def test_update_invalid(self):
     a = self.author(
         name='Randall Munroe',
         slug='randall-munroe',
     )
     view = views.AuthorUpdate.as_view()
     res = view(DummyRequest(
         method='PUT',
         params=MultiDict({'name': 'a' * 101, 'slug': 'randall-munroe'}),
     ), pk=a.id)
     self.assertEqual(res.status_code, 200)
     self.assertTemplateUsed(res, 'tests:templates/author_form.html')
     self.assertEqual(len(res.context['form'].errors), 1)
     self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe>'])
Exemple #26
0
 def test_update_invalid_endpoint_with_url(self):
     a = self.author(
         name='Randall Munroe',
         slug='randall-munroe',
     )
     view = views.AuthorUpdate.as_view(endpoint=True)
     res = view(DummyRequest(
         method='PUT',
         params=MultiDict({'name': 'a' * 101, 'slug': 'randall-munroe'}),
     ), pk=a.id)
     self.assertEqual(res.status_code, 400)
     decoded = json.loads(res.body)
     self.assertIn('errors', decoded)
     self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe>'])
Exemple #27
0
    def test_create_endpoint_with_url(self):
        view = views.AuthorCreate.as_view(endpoint=True)
        res = view(DummyRequest())
        self.assertEqual(res.status_code, 501)
        self.assertEqual(res.body, '')

        res = view(DummyRequest(
            method='POST',
            params=MultiDict({'name': 'Randall Munroe', 'slug': 'randall-munroe'})
        ))
        self.assertEqual(res.status_code, 302)
        self.assertEqual(res.body, '')
        self.assertRedirects(res, '/list/authors/')
        self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe>'])
Exemple #28
0
 def test_paginated_orphaned_query(self):
     self.assertEqual(Session.query(Author).count(), 0)
     self._make_authors(92)
     view = views.AuthorList.as_view(paginate_by=30, paginate_orphans=2)
     res = view(DummyRequest())
     self.assertEqual(res.status_code, 200)
     self.assertEqual(res.context['page_obj'].number, 1)
     res = view(DummyRequest(params={'page': 'last'}))
     self.assertEqual(res.status_code, 200)
     self.assertEqual(res.context['page_obj'].number, 3)
     res = view(DummyRequest(params={'page': '3'}))
     self.assertEqual(res.status_code, 200)
     self.assertEqual(res.context['page_obj'].number, 3)
     self.assertRaises(httpexceptions.HTTPNotFound, view, DummyRequest(params={'page': '4'}))
Exemple #29
0
    def test_create(self):
        view = views.AuthorCreate.as_view()
        res = view(DummyRequest())
        self.assertEqual(res.status_code, 200)
        self.assertIsInstance(res.context['form'], ModelForm)
        self.assertIsInstance(res.context['view'], View)
        self.assertFalse('object' in res.context)
        self.assertFalse('author' in res.context)
        self.assertTemplateUsed(res, 'tests:templates/author_form.html')
        self.assertIsInstance(res.context['macros']['my_macros']['testmacro'], Macro)

        res = view(DummyRequest(
            method='POST',
            params=MultiDict({'name': 'Randall Munroe', 'slug': 'randall-munroe'})
        ))
        self.assertEqual(res.status_code, 302)
        self.assertRedirects(res, '/list/authors/')
        self.assertQuerysetEqual(Session.query(Author).all(), ['<Author: Randall Munroe>'])
Exemple #30
0
 def get_query(self):
     return Session.query(Book).filter(Book.id==123)