Commit 4fa7ec02 authored by George Papathanail's avatar George Papathanail
Browse files

[200~fix(traffic-influence): drop sink_credential_ref removed from CallbackRegistration

parent c7a47dbf
Loading
Loading
Loading
Loading
Loading
+0 −3
Changes for src/open_exposure_gateway/api/camara/traffic_influence/v0_10_0/schemas.py: 0 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -40,9 +40,6 @@ class Config(BaseModel):
class SubscriptionRequest(BaseModel):
    protocol: SubscriptionProtocol
    sink: str = Field(pattern=r"^https:\/\/.+$")
    # sinkCredential is a discriminated union (PLAIN/ACCESSTOKEN/REFRESHTOKEN) in the
    # CAMARA spec; kept generic here since OEG only persists a sink_credential_ref
    # (never the raw credential) and doesn't branch on credential type.
    sinkCredential: Optional[dict[str, Any]] = None
    types: list[SubscriptionEventType] = Field(min_length=1, max_length=1)
    config: Config
+0 −5
Changes for src/open_exposure_gateway/application/services/traffic_influence_service.py: 0 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -292,11 +292,6 @@ class TrafficInfluenceService:
                    api_family=_API_FAMILY,
                    sink=request.subscriptionRequest.sink,
                    event_types=list(request.subscriptionRequest.types),
                    sink_credential_ref=(
                        f"secret://oeg/{operation_id}/notification-auth-token"
                        if request.subscriptionRequest.sinkCredential
                        else None
                    ),
                    expires_at=request.subscriptionRequest.config.subscriptionExpireTime,
                )
            )
+5 −28
Changes for tests/unit/test_traffic_influence_flows.py: 5 added lines, 28 removed lines.
Original line number Diff line number Diff line
@@ -145,43 +145,20 @@ class TestTrafficInfluenceCreateFlow:
        response = api_client.post(f"{TI_BASE}/traffic-influences", json=body)
        assert response.status_code == 201

    def test_create_persists_sink_credential_ref_when_supplied(
    def test_create_persists_callback_registration(
        self,
        api_client: TestClient,
        operation_repo: FakeOperationRepository,
        callback_registration_repo: FakeCallbackRegistrationRepository,
    ) -> None:
        body = {
            **TI_BODY,
            "subscriptionRequest": {
                **SUBSCRIPTION_REQUEST,
                "sinkCredential": {"credentialType": "ACCESSTOKEN"},
            },
        }
        body = {**TI_BODY, "subscriptionRequest": SUBSCRIPTION_REQUEST}
        response = api_client.post(f"{TI_BASE}/traffic-influences", json=body)
        operation_id = list(operation_repo.rows)[0]

        registration = next(
            row
            for row in callback_registration_repo.rows.values()
            if row.operation_id == operation_id
        )
        assert (
            registration.sink_credential_ref
            == f"secret://oeg/{operation_id}/notification-auth-token"
        )
        assert response.status_code == 201

    def test_create_without_sink_credential_leaves_ref_unset(
        self,
        api_client: TestClient,
        callback_registration_repo: FakeCallbackRegistrationRepository,
    ) -> None:
        body = {**TI_BODY, "subscriptionRequest": SUBSCRIPTION_REQUEST}
        api_client.post(f"{TI_BASE}/traffic-influences", json=body)

        registration = next(iter(callback_registration_repo.rows.values()))
        assert registration.sink_credential_ref is None
        assert registration.operation_id == operation_id
        assert registration.sink == SUBSCRIPTION_REQUEST["sink"]
        assert response.status_code == 201

    def test_create_resolves_zone_from_app_instance_id(
        self, api_client: TestClient, fake_bus: FakeDataBus, fake_srm: FakeSRMClient