6
0

project_tests.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. from flask import url_for
  2. from pycs.database.Model import Model
  3. from pycs.database.Project import Project
  4. from pycs.database.Label import Label
  5. from tests.base import BaseTestCase
  6. class _BaseProjectTests(BaseTestCase):
  7. def setupModels(self):
  8. model = Model.new(
  9. commit=False,
  10. name="TestModel",
  11. description="Model for a test case",
  12. root_folder="models/fixed_model",
  13. )
  14. model.supports = ["labeled-image"]
  15. model.flush()
  16. self.model = model
  17. class ProjectCreationTests(_BaseProjectTests):
  18. def setUp(self):
  19. super().setUp()
  20. self.url = url_for("create_project")
  21. def test_project_creation_without_name(self):
  22. self.assertEqual(0, Project.query.count())
  23. self.post(self.url, json=dict(
  24. # name="Some Project",
  25. description="Some description",
  26. model=self.model.id,
  27. label=None,
  28. external=None,
  29. ),
  30. status_code=400,
  31. )
  32. self.assertEqual(0, Project.query.count())
  33. def test_project_creation_without_description(self):
  34. self.assertEqual(0, Project.query.count())
  35. self.post(self.url, json=dict(
  36. name="Some Project",
  37. # description="Some description",
  38. model=self.model.id,
  39. label=None,
  40. external=None,
  41. ),
  42. status_code=400,
  43. )
  44. self.assertEqual(0, Project.query.count())
  45. def test_project_creation(self):
  46. self.assertEqual(0, Project.query.count())
  47. self.post(self.url, json=dict(
  48. name="Some Project",
  49. description="Some description",
  50. model=self.model.id,
  51. label=None,
  52. external=None,
  53. )
  54. )
  55. self.assertEqual(1, Project.query.count())
  56. project = Project.query.first()
  57. self.assertIsNotNone(project)
  58. self.assertIsNotNone(project.model)
  59. self.assertIsNone(project.label_provider)
  60. class ProjectDeletionTests(_BaseProjectTests):
  61. def setupModels(self):
  62. super().setupModels()
  63. self.project = Project.new(
  64. name="test_project",
  65. description="Project for a test case",
  66. model=self.model,
  67. root_folder="project_folder",
  68. external_data=False,
  69. data_folder="project_folder/data",)
  70. @property
  71. def url(self):
  72. return url_for("remove_project",
  73. project_id=self.project.id)
  74. def test_project_deletion(self):
  75. self.assertEqual(1, Project.query.count())
  76. self.post(self.url, json=dict(remove=True))
  77. self.assertEqual(0, Project.query.count())
  78. def test_project_deletion_without_flag(self):
  79. self.assertEqual(1, Project.query.count())
  80. self.post(self.url, json=dict(), status_code=400)
  81. self.assertEqual(1, Project.query.count())
  82. self.post(self.url, json=dict(remove=False), status_code=400)
  83. self.assertEqual(1, Project.query.count())
  84. def test_project_deletion_with_labels(self):
  85. self.assertEqual(1, Project.query.count())
  86. self.assertEqual(0, Label.query.count())
  87. for i in range(1, 11):
  88. self.project.create_label(name=f"Label_{i}")
  89. self.assertEqual(10, Label.query.count())
  90. self.post(self.url, json=dict(remove=True))
  91. self.assertEqual(0, Project.query.count())
  92. self.assertEqual(0, Label.query.count())