Files
enviPy-bayer/tests/views/test_package_views.py
Tim Lorsbach 138846d84d ...
2025-10-29 19:46:20 +01:00

223 lines
7.0 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 Group, GroupPackagePermission, Permission, UserPackagePermission
Package = s.GET_PACKAGE_MODEL()
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(
"You cannot delete the default package. "
"If you want to delete this package you have to "
"set another default package first" in response.content.decode()
)