Skip to content

Commit

Permalink
feat: Add command for Edge V2 migration (#4415)
Browse files Browse the repository at this point in the history
  • Loading branch information
khvn26 authored Jul 31, 2024
1 parent 104d66d commit 035fe77
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 0 deletions.
1 change: 1 addition & 0 deletions api/app/settings/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@
"organisations.permissions",
"projects",
"sales_dashboard",
"edge_api",
"environments",
"environments.permissions",
"environments.identities",
Expand Down
5 changes: 5 additions & 0 deletions api/edge_api/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class EdgeAPIAppConfig(AppConfig):
name = "edge_api"
Empty file.
17 changes: 17 additions & 0 deletions api/edge_api/management/commands/migrate_to_edge_v2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from typing import Any

from django.core.management import BaseCommand

from projects.models import EdgeV2MigrationStatus, Project
from projects.tasks import migrate_project_environments_to_v2


class Command(BaseCommand):
def handle(self, *args: Any, **options: Any) -> str | None:
for project_id in Project.objects.filter(
edge_v2_migration_status__in=(
EdgeV2MigrationStatus.NOT_STARTED,
EdgeV2MigrationStatus.INCOMPLETE,
)
).values_list("id", flat=True):
migrate_project_environments_to_v2(project_id)
41 changes: 41 additions & 0 deletions api/tests/unit/edge_api/test_unit_edge_api_commands.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from django.core.management import call_command
from pytest_mock import MockerFixture

from projects.models import EdgeV2MigrationStatus, Project


def test_migrate_to_edge_v2__new_projects__dont_migrate(
mocker: MockerFixture, project: Project
) -> None:
# Given
# unmigrated projects are present
unmigrated_projects = Project.objects.bulk_create(
[
Project(
name="edge_v2_not_started",
organisation=project.organisation,
edge_v2_migration_status=EdgeV2MigrationStatus.NOT_STARTED,
),
Project(
name="edge_v2_incomplete",
organisation=project.organisation,
edge_v2_migration_status=EdgeV2MigrationStatus.INCOMPLETE,
),
],
)

migrate_project_environments_to_v2_mock = mocker.patch(
"edge_api.management.commands.migrate_to_edge_v2.migrate_project_environments_to_v2",
autospec=True,
)

# When
call_command("migrate_to_edge_v2")

# Then
# unmigrated projects were migrated
migrate_project_environments_to_v2_mock.assert_has_calls(
[mocker.call(project.id) for project in unmigrated_projects]
)
# the migrated `project` was not redundantly migrated
migrate_project_environments_to_v2_mock.call_count == len(unmigrated_projects)

0 comments on commit 035fe77

Please sign in to comment.