123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- from flask import url_for
- from pycs.database.Collection import Collection
- from pycs.database.File import File
- from pycs.database.Label import Label
- from pycs.database.Model import Model
- from pycs.database.Project import Project
- 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())
- class ProjectListTests(_BaseProjectTests):
- def test_list_projects(self):
- self.assertEqual(0, Project.query.count())
- for i in range(1, 11):
- Project.new(
- name=f"TestProject{i}",
- description=f"Project for a test case #{i}",
- model=self.model,
- root_folder=f"project_folder{i}",
- external_data=False,
- data_folder=f"project_folder{i}/data",
- )
- self.assertEqual(10, Project.query.count())
- response = self.get(url_for("list_projects"))
- self.assertTrue(response.is_json)
- content = response.json
- self.assertTrue(10, len(content))
- for entry in content:
- project = Project.query.get(entry["id"])
- self.assertIsNotNone(project)
- self.assertDictEqual(entry, project.serialize())
- def test_list_project_collections(self):
- project = Project.new(
- name="TestProject",
- description="Project for a test case #",
- model=self.model,
- root_folder="project_folder",
- external_data=False,
- data_folder="project_folder/data",
- )
- self.assertEqual(0, Collection.query.count())
- for i in range(1, 11):
- project.create_collection(
- reference=f"collection_{i}",
- name=f"Some collection {i}",
- description=f"A description {i}",
- position=i,
- autoselect=i is 1
- )
- self.assertEqual(10, Collection.query.count())
- response = self.get(url_for("list_collections",
- project_id=project.id))
- self.assertTrue(response.is_json)
- content = response.json
- self.assertTrue(10, len(content))
- for entry in content:
- collection = Collection.query.get(entry["id"])
- self.assertIsNotNone(collection)
- self.assertDictEqual(entry, collection.serialize())
|