From eaeb56f9f979a421145e5e0c68804e9d1ff87e13 Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Fri, 7 Feb 2020 17:35:16 +0000 Subject: [PATCH] Add supplier list page + tests Also fix the supplier page not being ordered alphabetically --- assets/models.py | 1 + assets/templates/supplier_list.html | 6 ++--- assets/tests/pages.py | 31 +++++++++++++++++++++++ assets/tests/test_assets.py | 39 ++++++++++++++++++++++++++++- 4 files changed, 73 insertions(+), 4 deletions(-) diff --git a/assets/models.py b/assets/models.py index 122fdcb2..5bf830bc 100644 --- a/assets/models.py +++ b/assets/models.py @@ -44,6 +44,7 @@ class Supplier(models.Model, RevisionMixin): name = models.CharField(max_length=80) class Meta: + ordering = ['name'] permissions = ( ('view_supplier', 'Can view a supplier'), ) diff --git a/assets/templates/supplier_list.html b/assets/templates/supplier_list.html index afc6d61d..20ed5974 100644 --- a/assets/templates/supplier_list.html +++ b/assets/templates/supplier_list.html @@ -14,7 +14,7 @@
{% render_field form.query|add_class:'form-control' placeholder='Search by Name' style="width: 250px"%} - +
@@ -27,8 +27,8 @@ {% for item in object_list %} - - {{ item.name }} + + {{ item.name }} View Edit diff --git a/assets/tests/pages.py b/assets/tests/pages.py index a6da52ca..a978d7d3 100644 --- a/assets/tests/pages.py +++ b/assets/tests/pages.py @@ -124,3 +124,34 @@ class AssetCreate(AssetForm): @property def success(self): return '/create' not in self.driver.current_url + + +class SupplierList(BasePage): + URL_TEMPLATE = reverse('supplier_list') + + _supplier_item_locator = (By.CLASS_NAME, 'supplierRow') + _search_text_locator = (By.ID, 'id_query') + _go_button_locator = (By.ID, 'id_search') + + class SupplierListRow(Region): + _name_locator = (By.CLASS_NAME, "supplierName") + + @property + def name(self): + return self.find_element(*self._name_locator).text + + @property + def suppliers(self): + return [self.SupplierListRow(self, i) for i in self.find_elements(*self._supplier_item_locator)] + + @property + def query(self): + return self.find_element(*self._search_text_locator).text + + def set_query(self, queryString): + element = self.find_element(*self._search_text_locator) + element.clear() + element.send_keys(queryString) + + def search(self): + self.find_element(*self._go_button_locator).click() diff --git a/assets/tests/test_assets.py b/assets/tests/test_assets.py index caa5a763..b9cb6d65 100644 --- a/assets/tests/test_assets.py +++ b/assets/tests/test_assets.py @@ -129,6 +129,43 @@ class TestAssetForm(AutoLoginTest): self.assertEqual(models.Asset.objects.get(asset_id="9000").description, new_description) +class SupplierListTests(AutoLoginTest): + def setUp(self): + super().setUp() + models.Supplier.objects.create(name="Fullmetal Heavy Industry") + models.Supplier.objects.create(name="Acme.") + models.Supplier.objects.create(name="TEC PA & Lighting") + models.Supplier.objects.create(name="Caterpillar Inc.") + models.Supplier.objects.create(name="N.E.R.D") + models.Supplier.objects.create(name="Khumalo") + models.Supplier.objects.create(name="1984 Incorporated") + self.page = pages.SupplierList(self.driver, self.live_server_url).open() + + def test_order(self): + names = list(map(lambda x: x.name, self.page.suppliers)) + self.assertEqual("1984 Incorporated", names[0]) + self.assertEqual("Acme.", names[1]) + self.assertEqual("Caterpillar Inc.", names[2]) + self.assertEqual("Fullmetal Heavy Industry", names[3]) + self.assertEqual("Khumalo", names[4]) + self.assertEqual("N.E.R.D", names[5]) + self.assertEqual("TEC PA & Lighting", names[6]) + + def test_search(self): + self.page.set_query("TEC") + self.page.search() + self.assertTrue(len(self.page.suppliers) == 1) + self.assertEqual("TEC PA & Lighting", self.page.suppliers[0].name) + + self.page.set_query("") + self.page.search() + self.assertTrue(len(self.page.suppliers) == 7) + + self.page.set_query("This is not a supplier") + self.page.search() + self.assertTrue(len(self.page.suppliers) == 0) + + # @tag('slow') TODO: req. Django 3.0 class TestAccessLevels(TestCase): @override_settings(DEBUG=True) @@ -269,7 +306,7 @@ class TestSampleDataGenerator(TestCase): call_command('deleteSampleData') self.assertTrue(models.Asset.objects.all().count() == 0) - self.assertTrue(models.Asset.objects.all().count() == 0) + self.assertTrue(models.Supplier.objects.all().count() == 0) def test_production_exception(self): from django.core.management.base import CommandError