From 3d00b935fcf28f6e9dec1478b03b3e309b683af7 Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Tue, 4 Feb 2020 18:02:44 +0000 Subject: [PATCH] FEAT: Basic testing of search --- RIGS/test_functional.py | 44 +++++++++++++++++ RIGS/test_unit.py | 104 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) diff --git a/RIGS/test_functional.py b/RIGS/test_functional.py index b5055cb7..6929139c 100644 --- a/RIGS/test_functional.py +++ b/RIGS/test_functional.py @@ -1201,3 +1201,47 @@ class TECEventAuthorisationTest(TestCase): self.assertEqual(self.event.auth_request_by, self.profile) self.assertEqual(self.event.auth_request_to, 'client@functional.test') self.assertIsNotNone(self.event.auth_request_at) + + +class SearchTest(LiveServerTestCase): + def setUp(self): + self.profile = models.Profile( + username="SearchTest", first_name="Search", last_name="Test", initials="STU", is_superuser=True) + self.profile.set_password("SearchTestPassword") + self.profile.save() + + self.vatrate = models.VatRate.objects.create(start_at='2014-03-05', rate=0.20, comment='test1') + + self.browser = create_browser() + self.browser.implicitly_wait(10) # Set implicit wait session wide + + os.environ['RECAPTCHA_TESTING'] = 'True' + + models.Event.objects.create(name="Right Event", status=models.Event.PROVISIONAL, + start_date=date.today(), description="This event is searched for endlessly over and over") + models.Event.objects.create(name="Wrong Event", status=models.Event.PROVISIONAL, start_date=date.today(), + description="This one should never be found.") + + def tearDown(self): + self.browser.quit() + os.environ['RECAPTCHA_TESTING'] = 'False' + + def test_search(self): + self.browser.get(self.live_server_url) + username = self.browser.find_element_by_id('id_username') + password = self.browser.find_element_by_id('id_password') + submit = self.browser.find_element_by_css_selector( + 'input[type=submit]') + + username.send_keys("SearchTest") + password.send_keys("SearchTestPassword") + submit.click() + + form = self.browser.find_element_by_id('searchForm') + search_box = form.find_element_by_id('id_search_input') + search_box.send_keys('Right') + search_box.send_keys(Keys.ENTER) + + event_name = self.browser.find_element_by_xpath('//*[@id="content"]/div[1]/div[4]/div/div/table/tbody/tr[1]/td[3]/h4').text + self.assertIn('Right', event_name) + self.assertNotIn('Wrong', event_name) diff --git a/RIGS/test_unit.py b/RIGS/test_unit.py index 0a360a10..fb89cfb7 100644 --- a/RIGS/test_unit.py +++ b/RIGS/test_unit.py @@ -423,3 +423,107 @@ class TestSampleDataGenerator(TestCase): from django.core.management.base import CommandError self.assertRaisesRegex(CommandError, ".*production", call_command, 'generateSampleRIGSData') + + +class TestSearchLogic(TestCase): + @classmethod + def setUpTestData(cls): + cls.profile = models.Profile.objects.create(username="testuser1", email="1@test.com", is_superuser=True, + is_active=True, is_staff=True) + + cls.persons = { + 1: models.Person.objects.create(name="Right Person", phone="1234"), + 2: models.Person.objects.create(name="Wrong Person", phone="5678"), + } + + cls.organisations = { + 1: models.Organisation.objects.create(name="Right Organisation", email="test@example.com"), + 2: models.Organisation.objects.create(name="Wrong Organisation", email="check@fake.co.uk"), + } + + cls.venues = { + 1: models.Venue.objects.create(name="Right Venue", address="1 Test Street, EX1"), + 2: models.Venue.objects.create(name="Wrong Venue", address="2 Check Way, TS2"), + } + + cls.events = { + 1: models.Event.objects.create(name="Right Event", start_date=date.today(), person=cls.persons[1], + organisation=cls.organisations[1], venue=cls.venues[1]), + 2: models.Event.objects.create(name="Wrong Event", start_date=date.today(), person=cls.persons[2], + organisation=cls.organisations[2], venue=cls.venues[2]), + } + + def setUp(self): + self.profile.set_password('testuser') + self.profile.save() + self.assertTrue(self.client.login(username=self.profile.username, password='testuser')) + + def test_event_search(self): + # Test search by name + request_url = "%s?q=%s" % (reverse('event_archive'), self.events[1].name) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.events[1].name) + self.assertNotContains(response, self.events[2].name) + + # Test search by ID + request_url = "%s?q=%s" % (reverse('event_archive'), self.events[1].pk) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.events[1].name) + self.assertNotContains(response, self.events[2].name) + + def test_people_search(self): + # Test search by name + request_url = "%s?q=%s" % (reverse('person_list'), self.persons[1].name) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.persons[1].name) + self.assertNotContains(response, self.persons[2].name) + + # Test search by ID + request_url = "%s?q=%s" % (reverse('person_list'), self.persons[1].pk) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.persons[1].name) + self.assertNotContains(response, self.persons[2].name) + + # Test search by phone + request_url = "%s?q=%s" % (reverse('person_list'), self.persons[1].phone) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.persons[1].name) + self.assertNotContains(response, self.persons[2].name) + + def test_organisation_search(self): + # Test search by name + request_url = "%s?q=%s" % (reverse('organisation_list'), self.organisations[1].name) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.organisations[1].name) + self.assertNotContains(response, self.organisations[2].name) + + # Test search by ID + request_url = "%s?q=%s" % (reverse('organisation_list'), self.organisations[1].pk) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.organisations[1].name) + self.assertNotContains(response, self.organisations[2].name) + + # Test search by email + request_url = "%s?q=%s" % (reverse('organisation_list'), self.organisations[1].email) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.organisations[1].email) + self.assertNotContains(response, self.organisations[2].email) + + def test_venue_search(self): + # Test search by name + request_url = "%s?q=%s" % (reverse('venue_list'), self.venues[1].name) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.venues[1].name) + self.assertNotContains(response, self.venues[2].name) + + # Test search by ID + request_url = "%s?q=%s" % (reverse('venue_list'), self.venues[1].pk) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.venues[1].name) + self.assertNotContains(response, self.venues[2].name) + + # Test search by address + request_url = "%s?q=%s" % (reverse('venue_list'), self.venues[1].address) + response = self.client.get(request_url, follow=True) + self.assertContains(response, self.venues[1].address) + self.assertNotContains(response, self.venues[2].address)