From ca553137b6c134d97f616c2f6254f566f9eb97f1 Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Fri, 7 Feb 2020 18:50:12 +0000 Subject: [PATCH] Add supplier create/edit tests --- assets/tests/pages.py | 31 +++++++++++++++++++++- assets/tests/test_assets.py | 51 ++++++++++++++++++++++++++++++++++--- 2 files changed, 78 insertions(+), 4 deletions(-) diff --git a/assets/tests/pages.py b/assets/tests/pages.py index a978d7d3..a81078d5 100644 --- a/assets/tests/pages.py +++ b/assets/tests/pages.py @@ -9,7 +9,7 @@ from PyRIGS.tests.pages import BasePage, FormPage import pdb -class AssetListPage(BasePage): +class AssetList(BasePage): URL_TEMPLATE = '/assets/asset/list' _asset_item_locator = (By.CLASS_NAME, 'assetRow') @@ -155,3 +155,32 @@ class SupplierList(BasePage): def search(self): self.find_element(*self._go_button_locator).click() + + +class SupplierForm(FormPage): + _submit_locator = (By.CLASS_NAME, 'btn-success') + form_items = { + 'name': (regions.TextBox, (By.ID, 'id_name')), + } + + def submit(self): + previous_errors = self.errors + self.find_element(*self._submit_locator).click() + self.wait.until(lambda x: self.errors != previous_errors or self.success) + + +class SupplierCreate(SupplierForm): + URL_TEMPLATE = reverse('supplier_create') + + @property + def success(self): + return '/create' not in self.driver.current_url + + +class SupplierEdit(SupplierForm): + # TODO This should be using reverse + URL_TEMPLATE = '/assets/supplier/{supplier_id}/edit' + + @property + def success(self): + return '/edit' not in self.driver.current_url diff --git a/assets/tests/test_assets.py b/assets/tests/test_assets.py index b9cb6d65..d0be8c86 100644 --- a/assets/tests/test_assets.py +++ b/assets/tests/test_assets.py @@ -13,7 +13,7 @@ from selenium.webdriver.common.keys import Keys import datetime -class AssetListTests(AutoLoginTest): +class TestAssetList(AutoLoginTest): def setUp(self): super().setUp() sound = models.AssetCategory.objects.create(name="Sound") @@ -26,7 +26,7 @@ class AssetListTests(AutoLoginTest): models.Asset.objects.create(asset_id="10", description="Working Mic", status=working, category=sound, date_acquired=datetime.date(2020, 2, 1)) models.Asset.objects.create(asset_id="2", description="A light", status=working, category=lighting, date_acquired=datetime.date(2020, 2, 1)) models.Asset.objects.create(asset_id="C1", description="The pearl", status=broken, category=lighting, date_acquired=datetime.date(2020, 2, 1)) - self.page = pages.AssetListPage(self.driver, self.live_server_url).open() + self.page = pages.AssetList(self.driver, self.live_server_url).open() def test_default_statuses_applied(self): # Only the working stuff should be shown initially @@ -129,7 +129,7 @@ class TestAssetForm(AutoLoginTest): self.assertEqual(models.Asset.objects.get(asset_id="9000").description, new_description) -class SupplierListTests(AutoLoginTest): +class TestSupplierList(AutoLoginTest): def setUp(self): super().setUp() models.Supplier.objects.create(name="Fullmetal Heavy Industry") @@ -141,6 +141,7 @@ class SupplierListTests(AutoLoginTest): models.Supplier.objects.create(name="1984 Incorporated") self.page = pages.SupplierList(self.driver, self.live_server_url).open() + # Should be sorted alphabetically def test_order(self): names = list(map(lambda x: x.name, self.page.suppliers)) self.assertEqual("1984 Incorporated", names[0]) @@ -166,6 +167,50 @@ class SupplierListTests(AutoLoginTest): self.assertTrue(len(self.page.suppliers) == 0) +class TestSupplierCreateAndEdit(AutoLoginTest): + def setUp(self): + super().setUp() + self.supplier = models.Supplier.objects.create(name="Fullmetal Heavy Industry") + + def test_supplier_create(self): + self.page = pages.SupplierCreate(self.driver, self.live_server_url).open() + + self.page.name = "Optican Health Supplies" + self.page.submit() + self.assertTrue(self.page.success) + + def test_supplier_edit(self): + self.page = pages.SupplierEdit(self.driver, self.live_server_url, supplier_id=self.supplier.pk).open() + + self.assertEquals("Fullmetal Heavy Industry", self.page.name) + new_name = "Cyberdyne Systems" + self.page.name = new_name + self.page.submit() + self.assertTrue(self.page.success) + + +class TestSupplierValidation(TestCase): + @classmethod + def setUpTestData(cls): + cls.profile = rigsmodels.Profile.objects.create(username="SupplierValidationTest", email="SVT@test.com", is_superuser=True, is_active=True, is_staff=True) + cls.supplier = models.Supplier.objects.create(name="Gadgetron Corporation") + + def setUp(self): + self.profile.set_password('testuser') + self.profile.save() + self.assertTrue(self.client.login(username=self.profile.username, password='testuser')) + + def test_create(self): + url = reverse('supplier_create') + response = self.client.post(url) + self.assertFormError(response, 'form', 'name', 'This field is required.') + + def test_edit(self): + url = reverse('supplier_update', kwargs={'pk': self.supplier.pk}) + response = self.client.post(url, {'name': ""}) + self.assertFormError(response, 'form', 'name', 'This field is required.') + + # @tag('slow') TODO: req. Django 3.0 class TestAccessLevels(TestCase): @override_settings(DEBUG=True)