1
0
Fork 0
mirror of synced 2024-06-26 18:10:51 +12:00

Setup common test data

This commit is contained in:
Rory Powell 2021-07-13 12:08:58 +01:00
parent 62533e40d7
commit 0982968f79
4 changed files with 141 additions and 103 deletions

View file

@ -1,3 +1,23 @@
// Mock data
const { data } = require("./utilities")
const googleConfig = {
callbackURL: "http://somecallbackurl",
clientID: data.clientID,
clientSecret: data.clientSecret,
}
const profile = {
id: "mockId",
_json: {
email : data.email
},
provider: "google"
}
const user = data.buildThirdPartyUser("google", "google", profile)
describe("google", () => { describe("google", () => {
describe("strategyFactory", () => { describe("strategyFactory", () => {
// mock passport strategy factory // mock passport strategy factory
@ -6,22 +26,17 @@ describe("google", () => {
it("should create successfully create a google strategy", async () => { it("should create successfully create a google strategy", async () => {
const google = require("../google") const google = require("../google")
// mock the config supplied to the strategy factory await google.strategyFactory(googleConfig)
config = {
callbackURL: "http://somecallbackurl", const expectedOptions = {
clientID: "clientId", clientID: googleConfig.clientID,
clientSecret: "clientSecret", clientSecret: googleConfig.clientSecret,
callbackURL: googleConfig.callbackURL,
} }
await google.strategyFactory(config)
expect(mockStrategy).toHaveBeenCalledWith( expect(mockStrategy).toHaveBeenCalledWith(
{ expectedOptions,
clientID: config.clientID,
clientSecret: config.clientSecret,
callbackURL: config.callbackURL,
},
expect.anything() expect.anything()
) )
}) })
@ -36,43 +51,21 @@ describe("google", () => {
jest.mock("../third-party-common") jest.mock("../third-party-common")
const authenticateThirdParty = require("../third-party-common").authenticateThirdParty const authenticateThirdParty = require("../third-party-common").authenticateThirdParty
// parameters
const profile = {
id: "mockId",
_json: {
email : "mock@budibase.com"
},
provider: "google"
}
const accessToken = "mockAccessToken"
const refreshToken = "mockRefreshToken"
// mock the passport callback // mock the passport callback
const mockDone = jest.fn() const mockDone = jest.fn()
const thirdPartyUser = {
provider: "google",
providerType: "google",
userId: profile.id,
profile: profile,
email: "mock@budibase.com",
oauth2: {
accessToken: accessToken,
refreshToken: refreshToken,
},
}
it("delegates authentication to third party common", async () => { it("delegates authentication to third party common", async () => {
const google = require("../google") const google = require("../google")
await google.authenticate( await google.authenticate(
accessToken, data.accessToken,
refreshToken, data.refreshToken,
profile, profile,
mockDone mockDone
) )
expect(authenticateThirdParty).toHaveBeenCalledWith( expect(authenticateThirdParty).toHaveBeenCalledWith(
thirdPartyUser, user,
true, true,
mockDone) mockDone)
}) })

View file

@ -1,50 +1,69 @@
// Mock data
const { data } = require("./utilities")
const issuer = "mockIssuer"
const sub = "mockSub"
const profile = {
id: "mockId",
_json: {
email : data.email
}
}
let jwtClaims = {}
const idToken = "mockIdToken"
const params = {}
const callbackUrl = "http://somecallbackurl"
// response from .well-known/openid-configuration
const oidcConfigUrlResponse = {
issuer: issuer,
authorization_endpoint: "mockAuthorizationEndpoint",
token_endpoint: "mockTokenEndpoint",
userinfo_endpoint: "mockUserInfoEndpoint"
}
const oidcConfig = {
configUrl: "http://someconfigurl",
clientID: data.clientID,
clientSecret: data.clientSecret,
}
const user = data.buildThirdPartyUser(issuer, "oidc", profile)
describe("oidc", () => { describe("oidc", () => {
describe("strategyFactory", () => { describe("strategyFactory", () => {
// mock passport strategy factory // mock passport strategy factory
jest.mock("@techpass/passport-openidconnect") jest.mock("@techpass/passport-openidconnect")
const mockStrategy = require("@techpass/passport-openidconnect").Strategy const mockStrategy = require("@techpass/passport-openidconnect").Strategy
// mock the response from .well-known/openid-configuration
const configUrlResponse = {
issuer: "mockIssuer",
authorization_endpoint: "mockAuthorizationEndpoint",
token_endpoint: "mockTokenEndpoint",
userinfo_endpoint: "mockUserInfoEndpoint"
}
// mock the request to retrieve the oidc configuration // mock the request to retrieve the oidc configuration
jest.mock("node-fetch", () => jest.fn(() => ( jest.mock("node-fetch")
{
ok: true,
json: async () => configUrlResponse
}
)))
const mockFetch = require("node-fetch") const mockFetch = require("node-fetch")
mockFetch.mockReturnValue({
ok: true,
json: () => oidcConfigUrlResponse
})
it("should create successfully create an oidc strategy", async () => { it("should create successfully create an oidc strategy", async () => {
const oidc = require("../oidc") const oidc = require("../oidc")
// mock the config supplied to the strategy factory await oidc.strategyFactory(oidcConfig, callbackUrl)
config = {
configUrl: "http://someconfigurl", expect(mockFetch).toHaveBeenCalledWith(oidcConfig.configUrl)
clientID: "clientId",
clientSecret: "clientSecret", const expectedOptions = {
issuer: oidcConfigUrlResponse.issuer,
authorizationURL: oidcConfigUrlResponse.authorization_endpoint,
tokenURL: oidcConfigUrlResponse.token_endpoint,
userInfoURL: oidcConfigUrlResponse.userinfo_endpoint,
clientID: oidcConfig.clientID,
clientSecret: oidcConfig.clientSecret,
callbackURL: callbackUrl,
} }
callbackUrl = "http://somecallbackurl"
await oidc.strategyFactory(config, callbackUrl)
expect(mockFetch).toHaveBeenCalledWith("http://someconfigurl")
expect(mockStrategy).toHaveBeenCalledWith( expect(mockStrategy).toHaveBeenCalledWith(
{ expectedOptions,
issuer: configUrlResponse.issuer,
authorizationURL: configUrlResponse.authorization_endpoint,
tokenURL: configUrlResponse.token_endpoint,
userInfoURL: configUrlResponse.userinfo_endpoint,
clientID: config.clientID,
clientSecret: config.clientSecret,
callbackURL: callbackUrl,
},
expect.anything() expect.anything()
) )
}) })
@ -58,36 +77,10 @@ describe("oidc", () => {
// mock third party common authentication // mock third party common authentication
jest.mock("../third-party-common") jest.mock("../third-party-common")
const authenticateThirdParty = require("../third-party-common").authenticateThirdParty const authenticateThirdParty = require("../third-party-common").authenticateThirdParty
// parameters
const issuer = "mockIssuer"
const sub = "mockSub"
const profile = {
id: "mockId",
_json: {
email : "mock@budibase.com"
}
}
let jwtClaims = {}
const accessToken = "mockAccessToken"
const refreshToken = "mockRefreshToken"
const idToken = "mockIdToken"
const params = {}
// mock the passport callback // mock the passport callback
const mockDone = jest.fn() const mockDone = jest.fn()
const thirdPartyUser = {
provider: issuer,
providerType: "oidc",
userId: profile.id,
profile: profile,
email: "mock@budibase.com",
oauth2: {
accessToken: accessToken,
refreshToken: refreshToken,
},
}
async function doAuthenticate() { async function doAuthenticate() {
const oidc = require("../oidc") const oidc = require("../oidc")
@ -96,8 +89,8 @@ describe("oidc", () => {
sub, sub,
profile, profile,
jwtClaims, jwtClaims,
accessToken, data.accessToken,
refreshToken, data.refreshToken,
idToken, idToken,
params, params,
mockDone mockDone
@ -108,7 +101,7 @@ describe("oidc", () => {
await doAuthenticate() await doAuthenticate()
expect(authenticateThirdParty).toHaveBeenCalledWith( expect(authenticateThirdParty).toHaveBeenCalledWith(
thirdPartyUser, user,
false, false,
mockDone) mockDone)
} }

View file

@ -0,0 +1,19 @@
// Mock data
const { authenticateThirdParty } = require("../third-party-common")
describe("third party common", () => {
describe("authenticateThirdParty", () => {
it("", () => {
})
})
describe("syncUser", () => {
it("", () => {
})
})
})

View file

@ -0,0 +1,33 @@
// Mock Data
const mockClientID = "mockClientID"
const mockClientSecret = "mockClientSecret"
const mockEmail = "mock@budibase.com"
const mockAccessToken = "mockAccessToken"
const mockRefreshToken = "mockRefreshToken"
const buildOauth2 = (accessToken=mockAccessToken, refreshToken=mockRefreshToken) => (
{
accessToken: accessToken,
refreshToken: refreshToken,
}
)
const buildThirdPartyUser = (provider, providerType, profile, email=mockEmail, oauth2=buildOauth2()) => ({
provider: provider,
providerType: providerType,
userId: profile.id,
profile: profile,
email: email,
oauth2: oauth2,
})
exports.data = {
clientID: mockClientID,
clientSecret: mockClientSecret,
email: mockEmail,
accessToken: mockAccessToken,
refreshToken: mockRefreshToken,
buildThirdPartyUser
}