From c4de21767c70094ca69eec495ac851cbe0c84811 Mon Sep 17 00:00:00 2001 From: Peter Evans Date: Mon, 2 Mar 2026 10:27:29 +0000 Subject: [PATCH 1/2] Ensure that the router node label can be updated if the service isn't provided in the request payload. (#4823) --- .../contrib/automation/nodes/node_types.py | 8 ++-- .../automation/api/nodes/test_nodes_views.py | 38 +++++++++++++++++++ ..._prevented_router_nodes_from_being_re.json | 9 +++++ 3 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 changelog/entries/unreleased/bug/resolved_an_issue_which_prevented_router_nodes_from_being_re.json diff --git a/backend/src/baserow/contrib/automation/nodes/node_types.py b/backend/src/baserow/contrib/automation/nodes/node_types.py index 2e85587926..43612551c0 100644 --- a/backend/src/baserow/contrib/automation/nodes/node_types.py +++ b/backend/src/baserow/contrib/automation/nodes/node_types.py @@ -277,12 +277,12 @@ def prepare_values( :return: The prepared values for the router node. """ - if instance: - service = instance.service.specific - + service_values = values.get("service", {}) + if instance and "edges" in service_values: prepared_uids = [ - str(edge["uid"]) for edge in values["service"].get("edges", []) + str(edge["uid"]) for edge in service_values.get("edges", []) ] + service = instance.service.specific persisted_uids = [str(edge.uid) for edge in service.edges.only("uid")] removed_uids = list(set(persisted_uids) - set(prepared_uids)) diff --git a/backend/tests/baserow/contrib/automation/api/nodes/test_nodes_views.py b/backend/tests/baserow/contrib/automation/api/nodes/test_nodes_views.py index 52cc35b989..095c823564 100644 --- a/backend/tests/baserow/contrib/automation/api/nodes/test_nodes_views.py +++ b/backend/tests/baserow/contrib/automation/api/nodes/test_nodes_views.py @@ -676,6 +676,44 @@ def test_updating_router_node_with_edge_removals_when_they_have_output_nodes_dis } +@pytest.mark.django_db +def test_updating_router_node_without_service_allowed( + api_client, + data_fixture, +): + user, token = data_fixture.create_user_and_token() + workflow = data_fixture.create_automation_workflow(user) + service = data_fixture.create_core_router_service(default_edge_label="Default") + router = data_fixture.create_core_router_action_node( + workflow=workflow, service=service, label="Original" + ) + edge = data_fixture.create_core_router_service_edge( + service=service, label="Do this", condition="'true'" + ) + + assert ( + workflow.get_graph().get_node_at_position(router, "south", str(edge.uid)) + is not None + ) + + response = api_client.patch( + reverse(API_URL_ITEM, kwargs={"node_id": router.id}), + {"label": "Modified"}, + **get_api_kwargs(token), + ) + assert response.status_code == HTTP_200_OK + response_json = response.json() + assert response_json["label"] == "Modified" + assert response_json["service"]["edges"] == [ + { + "uid": str(edge.uid), + "label": edge.label, + "order": AnyStr(), + "condition": edge.condition, + } + ] + + @pytest.mark.django_db def test_deleting_router_node_with_output_nodes_disallowed(api_client, data_fixture): user, token = data_fixture.create_user_and_token() diff --git a/changelog/entries/unreleased/bug/resolved_an_issue_which_prevented_router_nodes_from_being_re.json b/changelog/entries/unreleased/bug/resolved_an_issue_which_prevented_router_nodes_from_being_re.json new file mode 100644 index 0000000000..630ec3159a --- /dev/null +++ b/changelog/entries/unreleased/bug/resolved_an_issue_which_prevented_router_nodes_from_being_re.json @@ -0,0 +1,9 @@ +{ + "type": "bug", + "message": "Resolved an issue which prevented router nodes from being renamed once they had branches.", + "issue_origin": "github", + "issue_number": null, + "domain": "automation", + "bullet_points": [], + "created_at": "2026-02-19" +} \ No newline at end of file From 7c4c2760bb3ea7b24211954317fc7337fdd7049d Mon Sep 17 00:00:00 2001 From: Davide Silvestri <75379892+silvestrid@users.noreply.github.com> Date: Mon, 2 Mar 2026 13:39:29 +0100 Subject: [PATCH 2/2] chore (CI): remove domain::core from labels for database CI workflow (#4896) --- .github/workflows/database-projects-issues-workflow.yml | 2 +- .github/workflows/database-projects-pr-workflow.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/database-projects-issues-workflow.yml b/.github/workflows/database-projects-issues-workflow.yml index 04dc2670ae..0add195aee 100644 --- a/.github/workflows/database-projects-issues-workflow.yml +++ b/.github/workflows/database-projects-issues-workflow.yml @@ -2,7 +2,7 @@ name: Update Database Team Project Fields env: PROJECT_NUMBER: '3' - DOMAIN_LABELS: '["domain::database", "domain::core"]' + DOMAIN_LABELS: '["domain::database"]' STATUS_FIELD_NAME: 'Status' STATUS_TODO: 'Todo' diff --git a/.github/workflows/database-projects-pr-workflow.yml b/.github/workflows/database-projects-pr-workflow.yml index e7579eea5f..44ee045275 100644 --- a/.github/workflows/database-projects-pr-workflow.yml +++ b/.github/workflows/database-projects-pr-workflow.yml @@ -2,7 +2,7 @@ name: Database Team PR Automation env: PROJECT_NUMBER: '3' - DOMAIN_LABELS: '["domain::database", "domain::core"]' + DOMAIN_LABELS: '["domain::database"]' STATUS_FIELD_NAME: 'Status' REVIEW_STATUS_FIELD_NAME: 'Review Status' STATUS_IN_PROGRESS: 'In Progress'