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 _BaseProjectTests(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 class ProjectCreationTests(_BaseProjectTests): def setUp(self): super().setUp() self.url = url_for("create_project") def test_project_creation_without_name(self): self.assertEqual(0, Project.query.count()) self.post(self.url, json=dict( # name="Some Project", description="Some description", model=self.model.id, label=None, external=None, ), status_code=400, ) self.assertEqual(0, Project.query.count()) def test_project_creation_without_description(self): self.assertEqual(0, Project.query.count()) self.post(self.url, json=dict( name="Some Project", # description="Some description", model=self.model.id, label=None, external=None, ), status_code=400, ) self.assertEqual(0, Project.query.count()) def test_project_creation(self): self.assertEqual(0, Project.query.count()) self.post(self.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) class ProjectDeletionTests(_BaseProjectTests): def setupModels(self): super().setupModels() self.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",) @property def url(self): return url_for("remove_project", project_id=self.project.id) def test_project_deletion(self): self.assertEqual(1, Project.query.count()) self.post(self.url, json=dict(remove=True)) self.assertEqual(0, Project.query.count()) def test_project_deletion_without_flag(self): self.assertEqual(1, Project.query.count()) self.post(self.url, json=dict(), status_code=400) self.assertEqual(1, Project.query.count()) self.post(self.url, json=dict(remove=False), status_code=400) self.assertEqual(1, Project.query.count()) def test_project_deletion_with_labels(self): self.assertEqual(1, Project.query.count()) self.assertEqual(0, Label.query.count()) for i in range(1, 11): self.project.create_label(name=f"Label_{i}") self.assertEqual(10, Label.query.count()) self.post(self.url, json=dict(remove=True)) self.assertEqual(0, Project.query.count()) self.assertEqual(0, Label.query.count())