From 61eb77b0cb92a90d21bd1c8fc212080635416210 Mon Sep 17 00:00:00 2001
From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com>
Date: Tue, 21 Jan 2025 13:33:00 +0100
Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9BFixes=20invalid=20invitation=20link?=
 =?UTF-8?q?s=20(#7057)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Odei Maiz <33152403+odeimaiz@users.noreply.github.com>
---
 .../src/simcore_service_invitations/services/invitations.py   | 3 +--
 services/invitations/tests/unit/api/test_api_invitations.py   | 4 ++++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/services/invitations/src/simcore_service_invitations/services/invitations.py b/services/invitations/src/simcore_service_invitations/services/invitations.py
index d6065b08d0c..6200dcf6408 100644
--- a/services/invitations/src/simcore_service_invitations/services/invitations.py
+++ b/services/invitations/src/simcore_service_invitations/services/invitations.py
@@ -64,8 +64,7 @@ def _build_link(
     r = URL("/registration").include_query_params(invitation=code_url_safe)
 
     # Adds query to fragment
-    base_url = f"{base_url}/"
-    url = URL(base_url).replace(fragment=f"{r}")
+    url = URL(f"{base_url.rstrip('/')}/").replace(fragment=f"{r}")
     return TypeAdapter(HttpUrl).validate_python(f"{url}")
 
 
diff --git a/services/invitations/tests/unit/api/test_api_invitations.py b/services/invitations/tests/unit/api/test_api_invitations.py
index 751a0a96bb9..84f97fb45fe 100644
--- a/services/invitations/tests/unit/api/test_api_invitations.py
+++ b/services/invitations/tests/unit/api/test_api_invitations.py
@@ -41,6 +41,10 @@ def test_create_invitation(
     assert invitation.guest == invitation_input.guest
     assert invitation.trial_account_days == invitation_input.trial_account_days
 
+    # checks issue with `//` reported in https://github.com/ITISFoundation/osparc-simcore/issues/7055
+    assert invitation.invitation_url
+    assert invitation.invitation_url.path == "/"
+
     assert invitation.product
     if invitation_input.product:
         assert invitation.product == invitation_input.product