import { describe, expect, it } from "@effect/vitest"; import { OAuthClientSlug, type OAuthClientSummary } from "@executor-js/sdk/shared"; import { ENTERPRISE_IDENTITY_PROVIDER_CLIENT_OWNER, ENTERPRISE_IDENTITY_PROVIDER_CLIENT_SLUG, ENTERPRISE_IDENTITY_PROVIDER_DESCRIPTOR, canSubmitEnterpriseIdentityProvider, enterpriseIdentityProviderPayload, findEnterpriseIdentityProvider, } from "./enterprise-idp-section"; const client = (overrides: Partial): OAuthClientSummary => ({ owner: "org", slug: OAuthClientSlug.make("some-app"), grant: "authorization_code", authorizationUrl: "https://example.com/authorize", tokenUrl: "https://example.com/token", clientId: "client-id", origin: { kind: "manual" }, ...overrides, }); describe("findEnterpriseIdentityProvider", () => { it("finds the workspace registration under the reserved slug", () => { const provider = client({ slug: ENTERPRISE_IDENTITY_PROVIDER_CLIENT_SLUG }); expect(findEnterpriseIdentityProvider([client({}), provider])).toBe(provider); }); it("returns null when the organization has registered none", () => { expect(findEnterpriseIdentityProvider([client({})])).toBeNull(); }); it("ignores a personal app that happens to carry the reserved slug", () => { // The provider is an ORGANIZATION control; a user-owned app under the same // slug is a different app and must never stand in for it. expect( findEnterpriseIdentityProvider([ client({ owner: "user", slug: ENTERPRISE_IDENTITY_PROVIDER_CLIENT_SLUG }), ]), ).toBeNull(); }); }); describe("canSubmitEnterpriseIdentityProvider", () => { const valid = { submitting: false, issuerUrl: "https://idp.example/oauth2/default", clientId: "abc", }; it("accepts a public client with no secret", () => { expect(canSubmitEnterpriseIdentityProvider(valid)).toBe(true); }); it("requires the issuer the endpoints are discovered from", () => { // Endpoints are never typed: they are probed off the issuer, so the issuer // is the field the registration cannot proceed without. expect(canSubmitEnterpriseIdentityProvider({ ...valid, issuerUrl: " " })).toBe(false); }); it("requires the client id the exchange authenticates as", () => { expect(canSubmitEnterpriseIdentityProvider({ ...valid, clientId: "" })).toBe(false); }); it("refuses a second submit while one is in flight", () => { expect(canSubmitEnterpriseIdentityProvider({ ...valid, submitting: true })).toBe(false); }); }); describe("enterpriseIdentityProviderPayload", () => { const discovered = { authorizationUrl: " https://idp.example/authorize ", tokenUrl: " https://idp.example/token ", }; it("registers the workspace-owned app under the reserved slug", () => { const payload = enterpriseIdentityProviderPayload({ ...discovered, clientId: " abc ", clientSecret: " shh ", }); expect(payload.owner).toBe(ENTERPRISE_IDENTITY_PROVIDER_CLIENT_OWNER); expect(String(payload.slug)).toBe(String(ENTERPRISE_IDENTITY_PROVIDER_CLIENT_SLUG)); expect(payload.tokenUrl).toBe("https://idp.example/token"); expect(payload.clientId).toBe("abc"); expect(payload.clientSecret).toBe("shh"); }); it("records the authorization endpoint the work-identity link needs", () => { // The ID-JAG exchange itself only touches the token endpoint. The // authorization endpoint is here for the hop that produces the subject // token in the first place: an assertion issued BY this provider and // audienced to THIS client, which a brokered login does not yield. expect( enterpriseIdentityProviderPayload({ ...discovered, clientId: "abc", clientSecret: "" }) .authorizationUrl, ).toBe("https://idp.example/authorize"); }); it("registers the authorization-code grant, not the enterprise grant", () => { // `id_jag` names the registration at an MCP server's authorization server. // THIS app is the registration at the identity provider — it authenticates // the exchange and runs the work-identity hop, both authorization-code // shaped. expect( enterpriseIdentityProviderPayload({ ...discovered, clientId: "abc", clientSecret: "" }).grant, ).toBe("authorization_code"); }); it("stamps no originating integration — it backs every managed server", () => { expect( enterpriseIdentityProviderPayload({ ...discovered, clientId: "abc", clientSecret: "" }) .originIntegration, ).toBeNull(); }); }); describe("ENTERPRISE_IDENTITY_PROVIDER_DESCRIPTOR", () => { it("names the same registration the section writes", () => { // A server declaration and a connect request both point at the provider by // (owner, slug). If this descriptor and the payload ever disagreed, every // managed server would name a registration that does not exist. expect(String(ENTERPRISE_IDENTITY_PROVIDER_DESCRIPTOR.client)).toBe( String(ENTERPRISE_IDENTITY_PROVIDER_CLIENT_SLUG), ); expect(ENTERPRISE_IDENTITY_PROVIDER_DESCRIPTOR.clientOwner).toBe( ENTERPRISE_IDENTITY_PROVIDER_CLIENT_OWNER, ); }); });