|
|
@@ -1,24 +1,76 @@
|
|
|
import urllib.parse
|
|
|
|
|
|
-from utilities.testing import TestCase
|
|
|
from django.urls import reverse
|
|
|
+from django.test import override_settings
|
|
|
+
|
|
|
+from dcim.models import Site
|
|
|
+from netbox.constants import EMPTY_TABLE_TEXT
|
|
|
+from netbox.search.backends import search_backend
|
|
|
+from utilities.testing import TestCase
|
|
|
|
|
|
|
|
|
class HomeViewTestCase(TestCase):
|
|
|
|
|
|
def test_home(self):
|
|
|
-
|
|
|
url = reverse('home')
|
|
|
-
|
|
|
response = self.client.get(url)
|
|
|
self.assertHttpStatus(response, 200)
|
|
|
|
|
|
+
|
|
|
+class SearchViewTestCase(TestCase):
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def setUpTestData(cls):
|
|
|
+ sites = (
|
|
|
+ Site(name='Site Alpha', slug='alpha', description='Red'),
|
|
|
+ Site(name='Site Bravo', slug='bravo', description='Red'),
|
|
|
+ Site(name='Site Charlie', slug='charlie', description='Green'),
|
|
|
+ Site(name='Site Delta', slug='delta', description='Green'),
|
|
|
+ Site(name='Site Echo', slug='echo', description='Blue'),
|
|
|
+ Site(name='Site Foxtrot', slug='foxtrot', description='Blue'),
|
|
|
+ )
|
|
|
+ Site.objects.bulk_create(sites)
|
|
|
+ search_backend.cache(sites)
|
|
|
+
|
|
|
def test_search(self):
|
|
|
+ url = reverse('search')
|
|
|
+ response = self.client.get(url)
|
|
|
+ self.assertHttpStatus(response, 200)
|
|
|
+
|
|
|
+ def test_search_query(self):
|
|
|
+ url = reverse('search')
|
|
|
+ params = {
|
|
|
+ 'q': 'red',
|
|
|
+ }
|
|
|
+ query = urllib.parse.urlencode(params)
|
|
|
+
|
|
|
+ # Test without view permission
|
|
|
+ response = self.client.get(f'{url}?{query}')
|
|
|
+ self.assertHttpStatus(response, 200)
|
|
|
+ content = str(response.content)
|
|
|
+ self.assertIn(EMPTY_TABLE_TEXT, content)
|
|
|
+
|
|
|
+ # Add view permissions & query again. Only matching objects should be listed
|
|
|
+ self.add_permissions('dcim.view_site')
|
|
|
+ response = self.client.get(f'{url}?{query}')
|
|
|
+ self.assertHttpStatus(response, 200)
|
|
|
+ content = str(response.content)
|
|
|
+ self.assertIn('Site Alpha', content)
|
|
|
+ self.assertIn('Site Bravo', content)
|
|
|
+ self.assertNotIn('Site Charlie', content)
|
|
|
+ self.assertNotIn('Site Delta', content)
|
|
|
+ self.assertNotIn('Site Echo', content)
|
|
|
+ self.assertNotIn('Site Foxtrot', content)
|
|
|
|
|
|
+ @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
|
|
|
+ def test_search_no_results(self):
|
|
|
url = reverse('search')
|
|
|
params = {
|
|
|
- 'q': 'foo',
|
|
|
+ 'q': 'xxxxxxxxx', # Matches nothing
|
|
|
}
|
|
|
+ query = urllib.parse.urlencode(params)
|
|
|
|
|
|
- response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
|
|
|
+ response = self.client.get(f'{url}?{query}')
|
|
|
self.assertHttpStatus(response, 200)
|
|
|
+ content = str(response.content)
|
|
|
+ self.assertIn(EMPTY_TABLE_TEXT, content)
|