diff --git a/src/openhound_github/resources/enterprise.py b/src/openhound_github/resources/enterprise.py index 0a6da47..08ab1f5 100644 --- a/src/openhound_github/resources/enterprise.py +++ b/src/openhound_github/resources/enterprise.py @@ -638,7 +638,14 @@ def enterprise_saml_provider(enterprise_data: Enterprise, ctx: SourceContext): ) return - enterprise_object = (response.get("data") or {}).get("enterprise", {}) + enterprise_object = (response.get("data") or {}).get("enterprise") + if not enterprise_object: + logger.warning( + "No enterprise object returned while fetching SAML provider for enterprise '%s'", + ctx.enterprise_name, + ) + return + saml_provider = (enterprise_object.get("ownerInfo") or {}).get("samlIdentityProvider") if not saml_provider: logger.warning( diff --git a/tests/test_enterprise_resources.py b/tests/test_enterprise_resources.py index 81a8c02..61a5272 100644 --- a/tests/test_enterprise_resources.py +++ b/tests/test_enterprise_resources.py @@ -144,6 +144,63 @@ def test_enterprise_saml_provider_logs_and_returns_on_request_failure(caplog) -> ) +def test_enterprise_saml_provider_logs_and_returns_when_enterprise_is_null( + caplog, +) -> None: + client = _FakeClient(payload={"data": {"enterprise": None}}) + ctx = SourceContext(client=client, sso_client=client, enterprise_name="acme") + enterprise_data = SimpleNamespace(id="E_1", name="Acme", slug="acme") + + with caplog.at_level(logging.WARNING, logger="openhound_github.resources.enterprise"): + rows = list(enterprise_saml_provider.__wrapped__(enterprise_data, ctx)) + + assert rows == [] + assert any( + "No enterprise object returned while fetching SAML provider for enterprise 'acme'" + in record.getMessage() + and record.levelno == logging.WARNING + for record in caplog.records + ) + + +def test_enterprise_saml_provider_logs_and_returns_when_enterprise_is_missing( + caplog, +) -> None: + client = _FakeClient(payload={"data": {}}) + ctx = SourceContext(client=client, sso_client=client, enterprise_name="acme") + enterprise_data = SimpleNamespace(id="E_1", name="Acme", slug="acme") + + with caplog.at_level(logging.WARNING, logger="openhound_github.resources.enterprise"): + rows = list(enterprise_saml_provider.__wrapped__(enterprise_data, ctx)) + + assert rows == [] + assert any( + "No enterprise object returned while fetching SAML provider for enterprise 'acme'" + in record.getMessage() + and record.levelno == logging.WARNING + for record in caplog.records + ) + + +def test_enterprise_saml_provider_logs_and_returns_when_provider_is_missing( + caplog, +) -> None: + client = _FakeClient(payload={"data": {"enterprise": {"ownerInfo": {}}}}) + ctx = SourceContext(client=client, sso_client=client, enterprise_name="acme") + enterprise_data = SimpleNamespace(id="E_1", name="Acme", slug="acme") + + with caplog.at_level(logging.WARNING, logger="openhound_github.resources.enterprise"): + rows = list(enterprise_saml_provider.__wrapped__(enterprise_data, ctx)) + + assert rows == [] + assert any( + "No enterprise SAML provider returned for enterprise 'acme'" + in record.getMessage() + and record.levelno == logging.WARNING + for record in caplog.records + ) + + def test_enterprise_external_identity_logs_and_returns_on_pagination_failure( caplog, ) -> None: