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())