diff --git a/packages/server/src/api/routes/tests/oauth2.spec.ts b/packages/server/src/api/routes/tests/oauth2.spec.ts index 347c4e8d09..ea63abd997 100644 --- a/packages/server/src/api/routes/tests/oauth2.spec.ts +++ b/packages/server/src/api/routes/tests/oauth2.spec.ts @@ -1,5 +1,6 @@ import { OAuth2Config, + OAuth2CredentialsMethod, PASSWORD_REPLACEMENT, UpsertOAuth2ConfigRequest, VirtualDocumentType, @@ -17,6 +18,7 @@ describe("/oauth2", () => { url: generator.url(), clientId: generator.guid(), clientSecret: generator.hash(), + method: generator.pickone(Object.values(OAuth2CredentialsMethod)), } } @@ -54,6 +56,7 @@ describe("/oauth2", () => { url: c.url, clientId: c.clientId, clientSecret: PASSWORD_REPLACEMENT, + method: c.method, })) ), }) @@ -74,6 +77,7 @@ describe("/oauth2", () => { url: oauth2Config.url, clientId: oauth2Config.clientId, clientSecret: PASSWORD_REPLACEMENT, + method: oauth2Config.method, }, ], }) @@ -93,6 +97,7 @@ describe("/oauth2", () => { url: oauth2Config.url, clientId: oauth2Config.clientId, clientSecret: PASSWORD_REPLACEMENT, + method: oauth2Config.method, }, { id: expectOAuth2ConfigId, @@ -100,6 +105,7 @@ describe("/oauth2", () => { url: oauth2Config2.url, clientId: oauth2Config2.clientId, clientSecret: PASSWORD_REPLACEMENT, + method: oauth2Config2.method, }, ]) expect(response.configs[0].id).not.toEqual(response.configs[1].id) @@ -125,6 +131,7 @@ describe("/oauth2", () => { url: oauth2Config.url, clientId: oauth2Config.clientId, clientSecret: PASSWORD_REPLACEMENT, + method: oauth2Config.method, }, ]) }) @@ -161,6 +168,7 @@ describe("/oauth2", () => { url: configData.url, clientId: configData.clientId, clientSecret: PASSWORD_REPLACEMENT, + method: configData.method, }, ]) ) diff --git a/packages/server/src/sdk/app/oauth2/tests/utils.spec.ts b/packages/server/src/sdk/app/oauth2/tests/utils.spec.ts index 918bf59ca7..2f8b151908 100644 --- a/packages/server/src/sdk/app/oauth2/tests/utils.spec.ts +++ b/packages/server/src/sdk/app/oauth2/tests/utils.spec.ts @@ -6,6 +6,7 @@ import { generateToken } from "../utils" import path from "path" import { KEYCLOAK_IMAGE } from "../../../../integrations/tests/utils/images" import { startContainer } from "../../../../integrations/tests/utils" +import { OAuth2CredentialsMethod } from "@budibase/types" const config = new TestConfiguration() @@ -41,70 +42,77 @@ describe("oauth2 utils", () => { keycloakUrl = `http://127.0.0.1:${port}` }) - describe("generateToken", () => { - it("successfully generates tokens", async () => { - const response = await config.doInContext(config.appId, async () => { - const oauthConfig = await sdk.oauth2.create({ - name: generator.guid(), - url: `${keycloakUrl}/realms/myrealm/protocol/openid-connect/token`, - clientId: "my-client", - clientSecret: "my-secret", + describe.each(Object.values(OAuth2CredentialsMethod))( + "generateToken (in %s)", + method => { + it("successfully generates tokens", async () => { + const response = await config.doInContext(config.appId, async () => { + const oauthConfig = await sdk.oauth2.create({ + name: generator.guid(), + url: `${keycloakUrl}/realms/myrealm/protocol/openid-connect/token`, + clientId: "my-client", + clientSecret: "my-secret", + method, + }) + + const response = await generateToken(oauthConfig.id) + return response }) - const response = await generateToken(oauthConfig.id) - return response + expect(response).toEqual(expect.stringMatching(/^Bearer .+/)) }) - expect(response).toEqual(expect.stringMatching(/^Bearer .+/)) - }) + it("handles wrong urls", async () => { + await expect( + config.doInContext(config.appId, async () => { + const oauthConfig = await sdk.oauth2.create({ + name: generator.guid(), + url: `${keycloakUrl}/realms/wrong/protocol/openid-connect/token`, + clientId: "my-client", + clientSecret: "my-secret", + method, + }) - it("handles wrong urls", async () => { - await expect( - config.doInContext(config.appId, async () => { - const oauthConfig = await sdk.oauth2.create({ - name: generator.guid(), - url: `${keycloakUrl}/realms/wrong/protocol/openid-connect/token`, - clientId: "my-client", - clientSecret: "my-secret", + await generateToken(oauthConfig.id) }) + ).rejects.toThrow("Error fetching oauth2 token: Not Found") + }) - await generateToken(oauthConfig.id) - }) - ).rejects.toThrow("Error fetching oauth2 token: Not Found") - }) + it("handles wrong client ids", async () => { + await expect( + config.doInContext(config.appId, async () => { + const oauthConfig = await sdk.oauth2.create({ + name: generator.guid(), + url: `${keycloakUrl}/realms/myrealm/protocol/openid-connect/token`, + clientId: "wrong-client-id", + clientSecret: "my-secret", + method, + }) - it("handles wrong client ids", async () => { - await expect( - config.doInContext(config.appId, async () => { - const oauthConfig = await sdk.oauth2.create({ - name: generator.guid(), - url: `${keycloakUrl}/realms/myrealm/protocol/openid-connect/token`, - clientId: "wrong-client-id", - clientSecret: "my-secret", + await generateToken(oauthConfig.id) }) + ).rejects.toThrow( + "Error fetching oauth2 token: Invalid client or Invalid client credentials" + ) + }) - await generateToken(oauthConfig.id) - }) - ).rejects.toThrow( - "Error fetching oauth2 token: Invalid client or Invalid client credentials" - ) - }) + it("handles wrong secrets", async () => { + await expect( + config.doInContext(config.appId, async () => { + const oauthConfig = await sdk.oauth2.create({ + name: generator.guid(), + url: `${keycloakUrl}/realms/myrealm/protocol/openid-connect/token`, + clientId: "my-client", + clientSecret: "wrong-secret", + method, + }) - it("handles wrong secrets", async () => { - await expect( - config.doInContext(config.appId, async () => { - const oauthConfig = await sdk.oauth2.create({ - name: generator.guid(), - url: `${keycloakUrl}/realms/myrealm/protocol/openid-connect/token`, - clientId: "my-client", - clientSecret: "wrong-secret", + await generateToken(oauthConfig.id) }) - - await generateToken(oauthConfig.id) - }) - ).rejects.toThrow( - "Error fetching oauth2 token: Invalid client or Invalid client credentials" - ) - }) - }) + ).rejects.toThrow( + "Error fetching oauth2 token: Invalid client or Invalid client credentials" + ) + }) + } + ) })