6
0
Jelajahi Sumber

added project creation and deletion tests. Fixed deletion related bug

Dimitri Korsch 3 tahun lalu
induk
melakukan
e2d5f95096

+ 5 - 2
pycs/database/File.py

@@ -51,8 +51,11 @@ class File(NamedBaseModel):
     )
 
 
-    results = db.relationship("Result", backref="file",
-        lazy="dynamic", passive_deletes=True)
+    results = db.relationship("Result",
+        backref="file",
+        lazy="dynamic",
+        passive_deletes=True,
+    )
 
 
     serialize_only = NamedBaseModel.serialize_only + (

+ 9 - 3
pycs/database/Project.py

@@ -43,17 +43,23 @@ class Project(NamedBaseModel):
     files = db.relationship(
         "File",
         backref="project",
-        lazy="dynamic")
+        lazy="dynamic",
+        passive_deletes=True,
+    )
 
     labels = db.relationship(
         "Label",
         backref="project",
-        lazy="dynamic")
+        lazy="dynamic",
+        passive_deletes=True,
+    )
 
     collections = db.relationship(
         "Collection",
         backref="project",
-        lazy="dynamic")
+        lazy="dynamic",
+        passive_deletes=True,
+    )
 
 
     serialize_only = NamedBaseModel.serialize_only + (

+ 2 - 0
tests/__init__.py

@@ -1,2 +1,4 @@
 from tests.test_database import *
+
 from tests.client.label_tests import *
+from tests.client.project_tests import *

+ 1 - 0
tests/client/__init__.py

@@ -1 +1,2 @@
 from tests.client.label_tests import *
+from tests.client.project_tests import *

+ 6 - 0
tests/client/label_tests.py

@@ -121,6 +121,12 @@ class LabelRemovalTests(_BaseLabelTests):
         self.post(self.url(self.labels[0].id), json=dict(remove=True))
         self.assertEqual(self.N-1, self.project.labels.count())
 
+    def test_remove_non_existing_label(self):
+        self.assertEqual(self.N, self.project.labels.count())
+
+        self.post(self.url(424242), json=dict(remove=True), status_code=404)
+        self.assertEqual(self.N, self.project.labels.count())
+
 
 class LabelTreeRemovalTests(_BaseLabelTests):
 

+ 108 - 0
tests/client/project_tests.py

@@ -0,0 +1,108 @@
+from flask import url_for
+
+from pycs.database.Model import Model
+from pycs.database.Project import Project
+from pycs.database.Label import Label
+
+from tests.base import BaseTestCase
+
+
+class ProjectCreationTests(BaseTestCase):
+
+    def setupModels(self):
+
+        model = Model.new(
+            commit=False,
+            name="TestModel",
+            description="Model for a test case",
+            root_folder="models/fixed_model",
+        )
+        model.supports = ["labeled-image"]
+        model.flush()
+
+        self.model = model
+
+    def test_project_creation(self):
+
+        self.assertEqual(0, Project.query.count())
+        url = url_for("create_project")
+
+        self.post(url, json=dict(
+            name="Some Project",
+            description="Some description",
+            model=self.model.id,
+            label=None,
+            external=None,
+            )
+        )
+        self.assertEqual(1, Project.query.count())
+
+        project = Project.query.first()
+
+        self.assertIsNotNone(project)
+        self.assertIsNotNone(project.model)
+        self.assertIsNone(project.label_provider)
+
+    def test_project_deletion(self):
+
+        self.assertEqual(0, Project.query.count())
+        project = Project.new(
+            name="test_project",
+            description="Project for a test case",
+            model=self.model,
+            root_folder="project_folder",
+            external_data=False,
+            data_folder="project_folder/data",)
+
+        self.assertEqual(1, Project.query.count())
+
+        url = url_for("remove_project", project_id=project.id)
+        self.post(url, json=dict(remove=True))
+        self.assertEqual(0, Project.query.count())
+
+    def test_project_deletion_without_flag(self):
+
+        self.assertEqual(0, Project.query.count())
+        project = Project.new(
+            name="test_project",
+            description="Project for a test case",
+            model=self.model,
+            root_folder="project_folder",
+            external_data=False,
+            data_folder="project_folder/data",)
+
+        self.assertEqual(1, Project.query.count())
+
+        url = url_for("remove_project", project_id=project.id)
+        self.post(url, json=dict(), status_code=400)
+        self.assertEqual(1, Project.query.count())
+
+        url = url_for("remove_project", project_id=project.id)
+        self.post(url, json=dict(remove=False), status_code=400)
+        self.assertEqual(1, Project.query.count())
+
+    def test_project_deletion_with_labels(self):
+
+        self.assertEqual(0, Project.query.count())
+        self.assertEqual(0, Label.query.count())
+
+        project = Project.new(
+            name="test_project",
+            description="Project for a test case",
+            model=self.model,
+            root_folder="project_folder",
+            external_data=False,
+            data_folder="project_folder/data",)
+
+        self.assertEqual(1, Project.query.count())
+
+        for i in range(1, 11):
+            project.create_label(name=f"Label_{i}")
+
+        self.assertEqual(10, Label.query.count())
+
+        url = url_for("remove_project", project_id=project.id)
+        self.post(url, json=dict(remove=True))
+
+        self.assertEqual(0, Project.query.count())
+        self.assertEqual(0, Label.query.count())