Files
enviPy-bayer/tests/views/test_package_views.py

193 lines
6.6 KiB
Python

from django.conf import settings as s
from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase, tag
from django.urls import reverse
from epdb.logic import UserManager
from epdb.models import Package, UserPackagePermission, Permission, GroupPackagePermission, Group
class PackageViewTest(TestCase):
fixtures = ["test_fixtures.jsonl.gz"]
@classmethod
def setUpClass(cls):
super(PackageViewTest, cls).setUpClass()
cls.user1 = UserManager.create_user("user1", "user1@envipath.com", "SuperSafe",
set_setting=False, add_to_group=True, is_active=True)
cls.user2 = UserManager.create_user("user2", "user2@envipath.com", "SuperSafe",
set_setting=False, add_to_group=True, is_active=True)
def setUp(self):
self.client.force_login(self.user1)
def test_create_package(self):
response = self.client.post(reverse("packages"), {
"package-name": "Test Package",
"package-description": "Just a Description",
})
self.assertEqual(response.status_code, 302)
package_url = response.url
p = Package.objects.get(url=package_url)
self.assertEqual(p.name, "Test Package")
self.assertEqual(p.description, "Just a Description")
upp = UserPackagePermission.objects.get(package=p, user=self.user1)
self.assertEqual(upp.permission, Permission.ALL[0])
def test_import_package(self):
file = SimpleUploadedFile(
"Fixture_Package.json",
open(s.FIXTURE_DIRS[0] / "Fixture_Package.json", "rb").read(),
content_type="application/json"
)
response = self.client.post(reverse("packages"), {
"file": file,
"hidden": "import-package-json"
})
self.assertEqual(response.status_code, 302)
package_url = response.url
p = Package.objects.get(url=package_url)
self.assertEqual(p.pathways.count(), 22)
self.assertEqual(p.rules.count(), 45)
self.assertEqual(p.compounds.count(), 223)
self.assertEqual(p.reactions.count(), 212)
upp = UserPackagePermission.objects.get(package=p, user=self.user1)
self.assertEqual(upp.permission, Permission.ALL[0])
@tag("slow")
def test_import_legacy_package(self):
file = SimpleUploadedFile(
"EAWAG-BBD.json",
open(s.FIXTURE_DIRS[0] / "packages" / "2025-07-18" / "EAWAG-BBD.json", "rb").read(),
content_type="application/json"
)
response = self.client.post(reverse("packages"), {
"file": file,
"hidden": "import-legacy-package-json"
})
self.assertEqual(response.status_code, 302)
package_url = response.url
p = Package.objects.get(url=package_url)
self.assertEqual(p.pathways.count(), 219)
self.assertEqual(p.rules.count(), 498)
self.assertEqual(p.compounds.count(), 1399)
self.assertEqual(p.reactions.count(), 1480)
self.assertEqual(p.scenarios.count(), 1914)
upp = UserPackagePermission.objects.get(package=p, user=self.user1)
self.assertEqual(upp.permission, Permission.ALL[0])
def test_edit_package(self):
response = self.client.post(reverse("packages"), {
"package-name": "Test Package",
"package-description": "Just a Description",
})
self.assertEqual(response.status_code, 302)
package_url = response.url
self.client.post(package_url, {
"package-name": "New Name",
"package-description": "New Description",
})
p = Package.objects.get(url=package_url)
self.assertEqual(p.name, "New Name")
self.assertEqual(p.description, "New Description")
def test_edit_package_permissions(self):
response = self.client.post(reverse("packages"), {
"package-name": "Test Package",
"package-description": "Just a Description",
})
self.assertEqual(response.status_code, 302)
package_url = response.url
p = Package.objects.get(url=package_url)
with self.assertRaises(UserPackagePermission.DoesNotExist):
UserPackagePermission.objects.get(package=p, user=self.user2)
self.client.post(package_url, {
"grantee": self.user2.url,
"read": "on",
"write": "on",
})
upp = UserPackagePermission.objects.get(package=p, user=self.user2)
self.assertEqual(upp.permission, Permission.WRITE[0])
def test_publish_package(self):
response = self.client.post(reverse("packages"), {
"package-name": "Test Package",
"package-description": "Just a Description",
})
self.assertEqual(response.status_code, 302)
package_url = response.url
p = Package.objects.get(url=package_url)
self.client.post(package_url, {
"hidden": "publish-package"
})
self.assertEqual(Group.objects.filter(public=True).count(), 1)
g = Group.objects.get(public=True)
gpp = GroupPackagePermission.objects.get(package=p, group=g)
self.assertEqual(gpp.permission, Permission.READ[0])
def test_set_package_license(self):
response = self.client.post(reverse("packages"), {
"package-name": "Test Package",
"package-description": "Just a Description",
})
package_url = response.url
p = Package.objects.get(url=package_url)
self.client.post(package_url, {
"license": "no-license"
})
self.assertIsNone(p.license)
# TODO test others
def test_delete_package(self):
response = self.client.post(reverse("packages"), {
"package-name": "Test Package",
"package-description": "Just a Description",
})
package_url = response.url
p = Package.objects.get(url=package_url)
p.delete()
response = self.client.get(package_url)
self.assertEqual(response.status_code, 404)
def test_delete_default_package(self):
self.client.force_login(self.user1)
# Try to delete the default package
response = self.client.post(self.user1.default_package.url, {
"hidden": "delete"
})
self.assertEqual(response.status_code, 400)
self.assertTrue(f'You cannot delete the default package. '
f'If you want to delete this package you have to '
f'set another default package first' in response.content.decode())