|
30 | 30 | )
|
31 | 31 | from ami.ml.models.pipeline import Pipeline
|
32 | 32 | from ami.tests.fixtures.main import create_captures, create_occurrences, create_taxa, setup_test_project
|
| 33 | +from ami.tests.fixtures.storage import populate_bucket |
33 | 34 | from ami.users.models import User
|
34 | 35 | from ami.users.roles import BasicMember, Identifier, ProjectManager
|
35 | 36 |
|
@@ -1572,3 +1573,56 @@ def test_project_manager_permissions_(self):
|
1572 | 1573 | self._test_sourceimageupload_permissions(
|
1573 | 1574 | user=self.project_manager, permission_map=self.PERMISSIONS_MAPS["project_manager"]["sourceimageupload"]
|
1574 | 1575 | )
|
| 1576 | + |
| 1577 | + |
| 1578 | +class TestDeploymentSyncCreatesEvents(TestCase): |
| 1579 | + def test_sync_creates_events_and_updates_counts(self): |
| 1580 | + # Set up a new project and deployment with test data |
| 1581 | + project, deployment = setup_test_project(reuse=False) |
| 1582 | + |
| 1583 | + # Populate the object store with image data |
| 1584 | + assert deployment.data_source is not None |
| 1585 | + populate_bucket( |
| 1586 | + config=deployment.data_source.config, |
| 1587 | + subdir=f"deployment_{deployment.pk}", |
| 1588 | + skip_existing=False, |
| 1589 | + ) |
| 1590 | + |
| 1591 | + # Sync captures |
| 1592 | + deployment.sync_captures() |
| 1593 | + |
| 1594 | + # Refresh and check results |
| 1595 | + deployment.refresh_from_db() |
| 1596 | + initial_events = Event.objects.filter(deployment=deployment) |
| 1597 | + initial_events_count = initial_events.count() |
| 1598 | + |
| 1599 | + # Assertions |
| 1600 | + self.assertTrue(initial_events.exists(), "Expected events to be created") |
| 1601 | + self.assertEqual( |
| 1602 | + deployment.events_count, initial_events.count(), "Deployment events_count should match actual events" |
| 1603 | + ) |
| 1604 | + # Simulate new images added to object store |
| 1605 | + populate_bucket( |
| 1606 | + config=deployment.data_source.config, |
| 1607 | + subdir=f"deployment_{deployment.pk}", |
| 1608 | + skip_existing=False, |
| 1609 | + num_nights=2, |
| 1610 | + images_per_day=5, |
| 1611 | + minutes_interval=120, |
| 1612 | + ) |
| 1613 | + |
| 1614 | + # Sync again |
| 1615 | + deployment.sync_captures() |
| 1616 | + deployment.refresh_from_db() |
| 1617 | + updated_events = Event.objects.filter(deployment=deployment) |
| 1618 | + |
| 1619 | + # Assertions for second sync |
| 1620 | + self.assertGreater( |
| 1621 | + updated_events.count(), initial_events_count, "New events should be created after adding new images" |
| 1622 | + ) |
| 1623 | + self.assertEqual( |
| 1624 | + deployment.events_count, |
| 1625 | + updated_events.count(), |
| 1626 | + "Deployment events_count should reflect updated event count", |
| 1627 | + ) |
| 1628 | + logger.info(f"Initial events count: {initial_events_count}, Updated events count: {updated_events.count()}") |
0 commit comments