1
0
Fork 0
mirror of synced 2024-06-02 18:44:54 +12:00
budibase/packages/worker/src/api/routes/tests/auth.spec.js

106 lines
3.1 KiB
JavaScript
Raw Normal View History

const setup = require("./utilities")
2021-08-04 21:02:24 +12:00
const { Cookies } = require("@budibase/auth").constants
jest.mock("nodemailer")
const sendMailMock = setup.emailMock()
2021-08-04 21:02:24 +12:00
describe("/api/admin/auth", () => {
let request = setup.getRequest()
let config = setup.getConfig()
let code
beforeAll(async () => {
await config.init()
})
afterAll(setup.afterAll)
afterEach(() => {
jest.clearAllMocks()
})
it("should be able to generate password reset email", async () => {
// initially configure settings
await config.saveSmtpConfig()
await config.saveSettingsConfig()
await config.createUser("test@test.com")
const res = await request
2021-08-04 21:02:24 +12:00
.post(`/api/admin/auth/reset`)
.send({
email: "test@test.com",
})
.expect("Content-Type", /json/)
.expect(200)
expect(res.body).toEqual({ message: "Please check your email for a reset link." })
expect(sendMailMock).toHaveBeenCalled()
const emailCall = sendMailMock.mock.calls[0][0]
// after this URL there should be a code
2021-08-04 21:02:24 +12:00
const parts = emailCall.html.split("http://localhost:10000/builder/auth/reset?code=")
code = parts[1].split("\"")[0]
expect(code).toBeDefined()
})
it("should allow resetting user password with code", async () => {
const res = await request
2021-08-04 21:02:24 +12:00
.post(`/api/admin/auth/reset/update`)
.send({
password: "newpassword",
resetCode: code,
})
.expect("Content-Type", /json/)
.expect(200)
expect(res.body).toEqual({ message: "password reset successfully." })
})
describe("oidc", () => {
const auth = require("@budibase/auth").auth
// mock the oidc strategy implementation and return value
strategyFactory = jest.fn()
mockStrategyReturn = jest.fn()
strategyFactory.mockReturnValue(mockStrategyReturn)
auth.oidc.strategyFactory = strategyFactory
const passportSpy = jest.spyOn(auth.passport, "authenticate")
let oidcConf
2021-07-14 04:07:48 +12:00
let chosenConfig
let configId
beforeEach(async () => {
oidcConf = await config.saveOIDCConfig()
2021-07-14 04:07:48 +12:00
chosenConfig = oidcConf.config.configs[0]
configId = chosenConfig.uuid
})
afterEach(() => {
expect(strategyFactory).toBeCalledWith(
2021-07-14 04:07:48 +12:00
chosenConfig,
2021-08-04 21:02:24 +12:00
`http://127.0.0.1:4003/api/admin/auth/oidc/callback` // calculated url
)
})
2021-08-04 21:02:24 +12:00
describe("/api/admin/auth/oidc/configs", () => {
it("should load strategy and delegate to passport", async () => {
2021-08-04 21:02:24 +12:00
await request.get(`/api/admin/auth/oidc/configs/${configId}`)
expect(passportSpy).toBeCalledWith(mockStrategyReturn, {
scope: ["profile", "email"],
})
expect(passportSpy.mock.calls.length).toBe(1);
})
})
2021-08-04 21:02:24 +12:00
describe("/api/admin/auth/oidc/callback", () => {
it("should load strategy and delegate to passport", async () => {
2021-08-04 21:02:24 +12:00
await request.get(`/api/admin/auth/oidc/callback`)
.set(config.getOIDConfigCookie(configId))
expect(passportSpy).toBeCalledWith(mockStrategyReturn, {
successRedirect: "/", failureRedirect: "/error"
}, expect.anything())
expect(passportSpy.mock.calls.length).toBe(1);
})
})
})
})