From 2a99e0912b406978c1132df116f97ac2b2b07756 Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Wed, 5 Feb 2020 13:21:19 +0000 Subject: [PATCH] FEAT: Adapt unit tests from RIGS to assets --- assets/tests/test_assets.py | 138 ++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/assets/tests/test_assets.py b/assets/tests/test_assets.py index 1c59fc60..57077c93 100644 --- a/assets/tests/test_assets.py +++ b/assets/tests/test_assets.py @@ -1,8 +1,14 @@ from . import pages +from django.core.management import call_command +from django.test import TestCase +from assets import models +from django.test.utils import override_settings +from django.urls import reverse from urllib.parse import urlparse from RIGS import models as rigsmodels from PyRIGS.tests.base import BaseTest, AutoLoginTest from assets import models +from reversion import revisions as reversion import datetime @@ -41,3 +47,135 @@ class AssetListTests(AutoLoginTest): self.assertEqual("2", assetIDs[1]) self.assertEqual("10", assetIDs[2]) self.assertEqual("C1", assetIDs[3]) + + +class TestSampleDataGenerator(TestCase): + @override_settings(DEBUG=True) + def test_generate_sample_data(self): + # Run the management command and check there are no exceptions + call_command('generateSampleAssetsData') + + # Check there are lots + self.assertTrue(models.Asset.objects.all().count() > 50) + self.assertTrue(models.Supplier.objects.all().count() > 50) + + def test_production_exception(self): + from django.core.management.base import CommandError + + self.assertRaisesRegex(CommandError, ".*production", call_command, 'generateSampleAssetsData') + + +class TestVersioningViews(TestCase): + @classmethod + def setUpTestData(cls): + cls.profile = rigsmodels.Profile.objects.create(username="VersionTest", email="version@test.com", is_superuser=True, is_active=True, is_staff=True) + + working = models.AssetStatus.objects.create(name="Working", should_show=True) + broken = models.AssetStatus.objects.create(name="Broken", should_show=False) + general = models.AssetCategory.objects.create(name="General") + lighting = models.AssetCategory.objects.create(name="Lighting") + + cls.assets = {} + + with reversion.create_revision(): + reversion.set_user(cls.profile) + cls.assets[1] = models.Asset.objects.create(asset_id="1991", description="Spaceflower", status=broken, category=lighting, date_acquired=datetime.date(1991, 12, 26)) + + with reversion.create_revision(): + reversion.set_user(cls.profile) + cls.assets[2] = models.Asset.objects.create(asset_id="0001", description="Virgil", status=working, category=lighting, date_acquired=datetime.date(2015, 1, 1)) + + with reversion.create_revision(): + reversion.set_user(cls.profile) + cls.assets[1].status = working + cls.assets[1].save() + + def setUp(self): + self.profile.set_password('testuser') + self.profile.save() + self.assertTrue(self.client.login(username=self.profile.username, password='testuser')) + + def test_history_loads_successfully(self): + request_url = reverse('asset_history', kwargs={'pk': self.assets[1].asset_id}) + + response = self.client.get(request_url, follow=True) + self.assertEqual(response.status_code, 200) + + def test_activity_table_loads_successfully(self): + request_url = reverse('asset_activity_table') + + response = self.client.get(request_url, follow=True) + self.assertEqual(response.status_code, 200) + +class TestEmbeddedViews(TestCase): + @classmethod + def setUpTestData(cls): + cls.profile = rigsmodels.Profile.objects.create(username="EmbeddedViewsTest", email="embedded@test.com", is_superuser=True, is_active=True, is_staff=True) + + working = models.AssetStatus.objects.create(name="Working", should_show=True) + lighting = models.AssetCategory.objects.create(name="Lighting") + + cls.assets = { + 1: models.Asset.objects.create(asset_id="1991", description="Spaceflower", status=working, category=lighting, date_acquired=datetime.date(1991, 12, 26)) + } + + def setUp(self): + self.profile.set_password('testuser') + self.profile.save() + + def testLoginRedirect(self): + request_url = reverse('asset_embed', kwargs={'pk': self.assets[1].asset_id}) + expected_url = "{0}?next={1}".format(reverse('login_embed'), request_url) + + # Request the page and check it redirects + response = self.client.get(request_url, follow=True) + self.assertRedirects(response, expected_url, status_code=302, target_status_code=200) + + # Now login + self.assertTrue(self.client.login(username=self.profile.username, password='testuser')) + + # And check that it no longer redirects + response = self.client.get(request_url, follow=True) + self.assertEqual(len(response.redirect_chain), 0) + + def testLoginCookieWarning(self): + login_url = reverse('login_embed') + response = self.client.post(login_url, follow=True) + self.assertContains(response, "Cookies do not seem to be enabled") + + def testXFrameHeaders(self): + asset_url = reverse('asset_embed', kwargs={'pk': self.assets[1].asset_id}) + login_url = reverse('login_embed') + + self.assertTrue(self.client.login(username=self.profile.username, password='testuser')) + + response = self.client.get(asset_url, follow=True) + with self.assertRaises(KeyError): + response._headers["X-Frame-Options"] + + response = self.client.get(login_url, follow=True) + with self.assertRaises(KeyError): + response._headers["X-Frame-Options"] + + def testOEmbed(self): + asset_url = reverse('asset_detail', kwargs={'pk': self.assets[1].asset_id}) + asset_embed_url = reverse('asset_embed', kwargs={'pk': self.assets[1].asset_id}) + oembed_url = reverse('asset_oembed', kwargs={'pk': self.assets[1].asset_id}) + + alt_oembed_url = reverse('asset_oembed', kwargs={'pk': 999}) + alt_asset_embed_url = reverse('asset_embed', kwargs={'pk': 999}) + + # Test the meta tag is in place + response = self.client.get(asset_url, follow=True, HTTP_HOST='example.com') + self.assertContains(response, '