code: def test_project(self):
      dataset = (
          foz.load_zoo_dataset("quickstart", max_samples=2)
          .select_fields("ground_truth")
          .clone()
      )
  
      anno_key = "anno_key"
      project_name = "cvat_unittest_project"
  
      results = dataset.annotate(
          anno_key,
          backend="cvat",
          label_field="ground_truth",
          project_name=project_name,
      )
      with results:
          api = results.connect_to_api()
          project_id = api.get_project_id(project_name)
          self.assertIsNotNone(project_id)
          if project_id not in results.project_ids:
              # Delete project if it exists
              api.delete_project(project_id)
              anno_key_retry = "anno_key_retry"
              results = dataset.annotate(
                  anno_key_retry,
                  backend="cvat",
                  label_field="ground_truth",
                  project_name=project_name,
              )
              api = results.connect_to_api()
              project_id = api.get_project_id(project_name)
              self.assertIsNotNone(project_id)
              self.assertIn(project_id, results.project_ids)
  
          anno_key2 = "anno_key2"
          results2 = dataset.annotate(
              anno_key2,
              backend="cvat",
              label_field="ground_truth",
              project_name=project_name,
          )
          self.assertNotIn(project_id, results2.project_ids)
          self.assertIsNotNone(api.get_project_id(project_name))
  
          # Test upload without schema
          anno_key3 = "anno_key3"
          results3 = dataset.annotate(
              anno_key3,
              backend="cvat",
              project_name=project_name,
          )
  
          with self.assertRaises(ValueError):
              label_schema = {
                  "ground_truth": {
                      "attributes": {"occluded": {"type": "occluded"}}
                  }
              }
              anno_key3 = "occluded_failure"
              dataset.annotate(
                  anno_key3,
                  label_schema=label_schema,
                  project_name=project_name,
              )
  
          with self.assertRaises(ValueError):
              label_schema = {
                  "ground_truth": {
                      "attributes": {"group_id": {"type": "group_id"}}
                  }
              }
              anno_key4 = "group_id_failure"
              dataset.annotate(
                  anno_key4,
                  label_schema=label_schema,
                  project_name=project_name,
              )
  
          dataset.load_annotations(anno_key, cleanup=True)
          project_id = api.get_project_id(project_name)
          self.assertIsNotNone(project_id)
  
          project_tasks = api.get_project_tasks(project_id)
          task_ids = (
              results.task_ids + results2.task_ids + results3.task_ids
          )
          self.assertListEqual(sorted(project_tasks), sorted(task_ids))
  
          dataset.load_annotations(anno_key2, cleanup=True)
          self.assertIsNotNone(api.get_project_id(project_name))
          api.delete_project(project_id)
  
      with results:
          api = results.connect_to_api()
          self.assertIsNone(api.get_project_id(project_name))
  
imports: from bson import ObjectId
  from collections import defaultdict
  import numpy
  import os
  import unittest
  import eta.core.utils
  import fiftyone
  import fiftyone.utils.cvat
  import fiftyone.zoo
  from fiftyone.core.expressions import ViewField
label_desc: Use image node_id 5 for calling the CVATTests obj's underlying member method code with example usage: obj.test_project() without return types