From 27bb3f1d8e61a53a698bc8cb964121367f077aa7 Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Tue, 15 Feb 2022 02:28:19 +0000 Subject: [PATCH] Port/fix asset tests --- assets/tests/conftest.py | 13 ++- assets/tests/test_interaction.py | 142 ++++++++++++++++--------------- assets/views.py | 3 - 3 files changed, 84 insertions(+), 74 deletions(-) diff --git a/assets/tests/conftest.py b/assets/tests/conftest.py index fbe8982f..cc068c92 100644 --- a/assets/tests/conftest.py +++ b/assets/tests/conftest.py @@ -18,18 +18,23 @@ def status(db): @pytest.fixture -def test_cable(db, category, status): +def cable_type(db): connector = models.Connector.objects.create(description="16A IEC", current_rating=16, voltage_rating=240, num_pins=3) cable_type = models.CableType.objects.create(circuits=11, cores=3, plug=connector, socket=connector) - cable = models.Asset.objects.create(asset_id="9666", description="125A -> Jack", comments="The cable from Hell...", status=status, category=category, date_acquired=datetime.date(2006, 6, 6), is_cable=True, cable_type=cable_type, length=10, csa="1.5") - yield cable + yield cable_type connector.delete() cable_type.delete() + + +@pytest.fixture +def test_cable(db, category, status, cable_type): + cable = models.Asset.objects.create(asset_id="9666", description="125A -> Jack", comments="The cable from Hell...", status=status, category=category, date_acquired=datetime.date(2006, 6, 6), is_cable=True, cable_type=cable_type, length=10, csa="1.5", salvage_value=50) + yield cable cable.delete() @pytest.fixture def test_asset(db, category, status): - asset, created = models.Asset.objects.get_or_create(asset_id="91991", description="Spaceflower", status=status, category=category, date_acquired=datetime.date(1991, 12, 26)) + asset, created = models.Asset.objects.get_or_create(asset_id="91991", description="Spaceflower", status=status, category=category, date_acquired=datetime.date(1991, 12, 26), salvage_value=100) yield asset asset.delete() diff --git a/assets/tests/test_interaction.py b/assets/tests/test_interaction.py index f028afe0..5d144917 100644 --- a/assets/tests/test_interaction.py +++ b/assets/tests/test_interaction.py @@ -94,6 +94,55 @@ class TestAssetList(AutoLoginTest): self.assertEqual("10", asset_ids[1]) +def test_cable_create(logged_in_browser, admin_user, live_server, test_asset, category, status, cable_type): + page = pages.AssetCreate(logged_in_browser.driver, live_server.url).open() + wait = WebDriverWait(logged_in_browser.driver, 20) + page.description = str(cable_type) + page.category = category.name + page.status = status.name + page.serial_number = "MELON-MELON-MELON" + page.comments = "You might need that" + page.salvage_value = "666" + page.is_cable = True + + assert logged_in_browser.driver.find_element(By.ID, 'cable-table').is_displayed() + wait.until(animation_is_finished()) + page.cable_type = str(cable_type) + page.length = 10 + page.csa = "1.5" + + page.submit() + assert page.success + + +def test_asset_edit(logged_in_browser, admin_user, live_server, test_asset): + page = pages.AssetEdit(logged_in_browser.driver, live_server.url, asset_id=test_asset.asset_id).open() + + assert logged_in_browser.driver.find_element(By.ID, 'id_asset_id').get_attribute('readonly') is not None + + new_description = "Big Shelf" + page.description = new_description + + page.submit() + assert page.success + + assert models.Asset.objects.get(asset_id=test_asset.asset_id).description == new_description + + +def test_asset_duplicate(logged_in_browser, admin_user, live_server, test_asset): + page = pages.AssetDuplicate(logged_in_browser.driver, live_server.url, asset_id=test_asset.asset_id).open() + + assert test_asset.asset_id != page.asset_id + assert test_asset.description == page.description + assert test_asset.status.name == page.status + assert test_asset.category.name == page.category + assert test_asset.date_acquired == page.date_acquired.date() + + page.submit() + assert page.success + assert models.Asset.objects.last().description == test_asset.description + + @screenshot_failure_cls class TestAssetForm(AutoLoginTest): def setUp(self): @@ -160,50 +209,6 @@ class TestAssetForm(AutoLoginTest): # This one is important as it defaults to today's date self.assertEqual(asset.date_acquired, acquired) - def test_cable_create(self): - self.page.description = "IEC -> IEC" - self.page.category = "Health & Safety" - self.page.status = "O.K." - self.page.serial_number = "MELON-MELON-MELON" - self.page.comments = "You might need that" - self.page.is_cable = True - - self.assertTrue(self.driver.find_element_by_id('cable-table').is_displayed()) - self.wait.until(animation_is_finished()) - self.page.cable_type = "IEC → IEC" - self.page.socket = "IEC" - self.page.length = 10 - self.page.csa = "1.5" - - self.page.submit() - self.assertTrue(self.page.success) - - def test_asset_edit(self): - self.page = pages.AssetEdit(self.driver, self.live_server_url, asset_id=self.parent.asset_id).open() - - self.assertIsNotNone(self.driver.find_element_by_id('id_asset_id').get_attribute('readonly')) - - new_description = "Big Shelf" - self.page.description = new_description - - self.page.submit() - self.assertTrue(self.page.success) - - self.assertEqual(models.Asset.objects.get(asset_id=self.parent.asset_id).description, new_description) - - def test_asset_duplicate(self): - self.page = pages.AssetDuplicate(self.driver, self.live_server_url, asset_id=self.parent.asset_id).open() - - self.assertNotEqual(self.parent.asset_id, self.page.asset_id) - self.assertEqual(self.parent.description, self.page.description) - self.assertEqual(self.parent.status.name, self.page.status) - self.assertEqual(self.parent.category.name, self.page.category) - self.assertEqual(self.parent.date_acquired, self.page.date_acquired.date()) - - self.page.submit() - self.assertTrue(self.page.success) - self.assertEqual(models.Asset.objects.last().description, self.parent.description) - @screenshot_failure_cls class TestSupplierList(AutoLoginTest): @@ -283,6 +288,28 @@ def test_audit_search(logged_in_browser, live_server, test_asset): assert logged_in_browser.is_text_present("Asset with that ID does not exist!") +def test_audit_success(logged_in_browser, admin_user, live_server, test_asset): + page = pages.AssetAuditList(logged_in_browser.driver, live_server.url).open() + wait = WebDriverWait(logged_in_browser.driver, 20) + page.set_query(test_asset.asset_id) + page.search() + wait.until(ec.visibility_of_element_located((By.ID, 'modal'))) + # Now do it properly + page.modal.description = new_desc = "A BIG hammer" + page.modal.submit() + logged_in_browser.driver.implicitly_wait(4) + wait.until(animation_is_finished()) + submit_time = timezone.now() + # Check data is correct + test_asset.refresh_from_db() + assert test_asset.description in new_desc + # Make sure audit 'log' was filled out + assert admin_user.initials == test_asset.last_audited_by.initials + assert_times_almost_equal(submit_time, test_asset.last_audited_at) + # Check we've removed it from the 'needing audit' list + assert test_asset.asset_id not in page.assets + + @screenshot_failure_cls class TestAssetAudit(AutoLoginTest): def setUp(self): @@ -293,14 +320,14 @@ class TestAssetAudit(AutoLoginTest): self.connector = models.Connector.objects.create(description="Trailer Socket", current_rating=1, voltage_rating=40, num_pins=13) models.Asset.objects.create(asset_id="1", description="Trailer Cable", status=self.status, - category=self.category, date_acquired=datetime.date(2020, 2, 1)) + category=self.category, date_acquired=datetime.date(2020, 2, 1), salvage_value=10) models.Asset.objects.create(asset_id="11", description="Trailerboard", status=self.status, - category=self.category, date_acquired=datetime.date(2020, 2, 1)) + category=self.category, date_acquired=datetime.date(2020, 2, 1), salvage_value=10) models.Asset.objects.create(asset_id="111", description="Erms", status=self.status, category=self.category, - date_acquired=datetime.date(2020, 2, 1)) + date_acquired=datetime.date(2020, 2, 1), salvage_value=10) self.asset = models.Asset.objects.create(asset_id="1111", description="A hammer", status=self.status, category=self.category, - date_acquired=datetime.date(2020, 2, 1)) + date_acquired=datetime.date(2020, 2, 1), salvage_value=10) self.page = pages.AssetAuditList(self.driver, self.live_server_url).open() self.wait = WebDriverWait(self.driver, 20) @@ -316,25 +343,6 @@ class TestAssetAudit(AutoLoginTest): self.driver.implicitly_wait(4) self.assertIn("This field is required.", self.page.modal.errors["Description"]) - def test_audit_success(self): - self.page.set_query(self.asset.asset_id) - self.page.search() - self.wait.until(ec.visibility_of_element_located((By.ID, 'modal'))) - # Now do it properly - self.page.modal.description = new_desc = "A BIG hammer" - self.page.modal.submit() - self.driver.implicitly_wait(4) - self.wait.until(animation_is_finished()) - submit_time = timezone.now() - # Check data is correct - self.asset.refresh_from_db() - self.assertEqual(self.asset.description, new_desc) - # Make sure audit 'log' was filled out - self.assertEqual(self.profile.initials, self.asset.last_audited_by.initials) - assert_times_almost_equal(submit_time, self.asset.last_audited_at) - # Check we've removed it from the 'needing audit' list - self.assertNotIn(self.asset.asset_id, self.page.assets) - def test_audit_list(self): self.assertEqual(models.Asset.objects.filter(last_audited_at=None).count(), len(self.page.assets)) asset_row = self.page.assets[0] diff --git a/assets/views.py b/assets/views.py index 448be2d1..d9541574 100644 --- a/assets/views.py +++ b/assets/views.py @@ -31,7 +31,6 @@ class AssetList(LoginRequiredMixin, generic.ListView): model = models.Asset template_name = 'asset_list.html' paginate_by = 40 - ordering = ['-pk'] hide_hidden_status = True def get_initial(self): @@ -327,7 +326,6 @@ class CableTypeCreate(generic.CreateView): context = super().get_context_data(**kwargs) context["create"] = True context["page_title"] = "Create Cable Type" - return context def get_success_url(self): @@ -343,7 +341,6 @@ class CableTypeUpdate(generic.UpdateView): context = super().get_context_data(**kwargs) context["edit"] = True context["page_title"] = f"Edit Cable Type {self.object}" - return context def get_success_url(self):