Files
medusa-store/packages/medusa/src/services/__tests__/user.js
Oliver Windall Juhl bcaac913d2 Adds UserService (#10)
2020-02-18 20:14:20 +01:00

111 lines
2.9 KiB
JavaScript

import mongoose from "mongoose"
import jwt from "jsonwebtoken"
import { IdMap } from "medusa-test-utils"
import UserService from "../user"
import { UserModelMock, users } from "../../models/__mocks__/user"
describe("UserService", () => {
describe("retrieve", () => {
let result
beforeAll(async () => {
jest.clearAllMocks()
const userService = new UserService({
userModel: UserModelMock,
})
result = await userService.retrieve(IdMap.getId("test-user"))
})
it("calls cart model functions", () => {
expect(UserModelMock.findOne).toHaveBeenCalledTimes(1)
expect(UserModelMock.findOne).toHaveBeenCalledWith({
_id: IdMap.getId("test-user"),
})
})
it("returns the user", () => {
expect(result).toEqual(users.testUser)
})
})
describe("setMetadata", () => {
const userService = new UserService({
userModel: UserModelMock,
})
beforeEach(() => {
jest.clearAllMocks()
})
it("calls updateOne with correct params", async () => {
const id = mongoose.Types.ObjectId()
await userService.setMetadata(`${id}`, "metadata", "testMetadata")
expect(UserModelMock.updateOne).toBeCalledTimes(1)
expect(UserModelMock.updateOne).toBeCalledWith(
{ _id: `${id}` },
{ $set: { "metadata.metadata": "testMetadata" } }
)
})
it("throw error on invalid key type", async () => {
const id = mongoose.Types.ObjectId()
try {
await userService.setMetadata(`${id}`, 1234, "nono")
} catch (err) {
expect(err.message).toEqual(
"Key type is invalid. Metadata keys must be strings"
)
}
})
})
describe("setPassword", () => {
const userService = new UserService({
userModel: UserModelMock,
})
beforeEach(() => {
jest.clearAllMocks()
})
it("calls updateOne with correct params", async () => {
await userService.setPassword(IdMap.getId("test-user"), "123456789")
expect(UserModelMock.updateOne).toBeCalledTimes(1)
expect(UserModelMock.updateOne).toBeCalledWith(
{ _id: IdMap.getId("test-user") },
{
$set: {
// Since bcrypt hashing always varies, we are testing the password
// match by using a regular expression.
password: expect.stringMatching(
/^\$2[aby]?\$[\d]+\$[./A-Za-z0-9]{53}$/
),
},
}
)
})
})
describe("generateResetPasswordToken", () => {
const userService = new UserService({
userModel: UserModelMock,
})
beforeEach(() => {
jest.clearAllMocks()
})
it("generates a token successfully", async () => {
const token = await userService.generateResetPasswordToken(
IdMap.getId("test-user")
)
expect(token).toMatch(
/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/
)
})
})
})