from django.test.testcases import TestCase import django from django.views import View from cruds import views from cruds.urls import ( crud_urls, crud_for_model, crud_for_app, ) from tests.testapp.models import ( Author, ) def get_url_regex(url): if django.VERSION < (2, 0): return url.regex.pattern return url.pattern.regex.pattern class TestUrls(TestCase): def setUp(self): super(TestUrls, self).setUp() self.view = View.as_view() def test_crud_urls(self): urls = crud_urls( Author, list_view=self.view, ) self.assertEqual(len(urls), 1) url = urls[0] self.assertEqual(url.name, 'testapp_author_list') self.assertSequenceEqual(get_url_regex(url), r'^$') def test_crud_urls_kwargs(self): urls = crud_urls( Author, additional=self.view, ) self.assertEqual(len(urls), 1) url = urls[0] self.assertEqual(url.name, 'testapp_author_additional') self.assertSequenceEqual( get_url_regex(url), r'^(?P<pk>\d+)/additional/$' ) def test_crud_urls_url_prefix(self): urls = crud_urls( Author, list_view=self.view, url_prefix=r'^author/' ) self.assertEqual(get_url_regex(urls[0]), '^author/$') def test_crud_urls_name_prefix(self): urls = crud_urls( Author, list_view=self.view, name_prefix='my_' ) self.assertEqual(urls[0].name, 'my_testapp_author_list') def test_crud_urls_list_views(self): urls = crud_urls( Author, list_views={ 'aggregate': self.view, 'aggregate2': self.view, } ) url_names = [url.name for url in urls] self.assertTrue('testapp_author_aggregate' in url_names) self.assertTrue('testapp_author_aggregate2' in url_names) def test_crud_for_model(self): urls = crud_for_model(Author) self.assertEqual(len(urls), 5) self.assertEqual(urls[0].name, 'testapp_author_list') self.assertIs(urls[0].callback.view_class, views.CRUDListView) self.assertEqual(urls[1].name, 'testapp_author_create') self.assertIs(urls[1].callback.view_class, views.CRUDCreateView) self.assertEqual(urls[2].name, 'testapp_author_detail') self.assertIs(urls[2].callback.view_class, views.CRUDDetailView) self.assertEqual(urls[3].name, 'testapp_author_update') self.assertIs(urls[3].callback.view_class, views.CRUDUpdateView) self.assertEqual(urls[4].name, 'testapp_author_delete') self.assertIs(urls[4].callback.view_class, views.CRUDDeleteView) def test_cruds_for_app(self): urls = crud_for_app('testapp') self.assertNotEqual(len(urls), 0)