Creates test request helper for API endpoints

Separates common utils into the medusa-core-utils package.
Sets up a testing environment where mocked models/services/etc. can be placed in
__mocks__ folder within its corresponding directory. The mocks will
automatically be registered in a awilix container only used for testing.
This commit is contained in:
Sebastian Rindom
2020-01-21 15:13:47 +01:00
parent 3d494bc652
commit ed472e9fba
33 changed files with 14053 additions and 76 deletions
@@ -1,5 +1,5 @@
import passport from "passport"
export default () => {
return passport.authenticate("jwt", { session: false })
return passport.authenticate(["jwt", "bearer"], { session: false })
}
@@ -0,0 +1,30 @@
import jwt from "jsonwebtoken"
import { Validator } from "medusa-core-utils"
import config from "../../../../config"
export default async (req, res) => {
const { body } = req
const schema = Validator.object().keys({
email: Validator.string().required(),
password: Validator.string().required(),
})
const { value, error } = schema.validate(body)
if (error) {
throw error
}
const authService = req.scope.resolve("authService")
const result = await authService.authenticate(value.email, value.password)
if (!result.success) {
res.sendStatus(401)
return
}
// Add JWT to cookie
req.session.jwt = jwt.sign({ userId: result.user._id }, config.jwtSecret, {
expiresIn: "24h",
})
res.json(result.user)
}
@@ -0,0 +1,12 @@
import { Router } from "express"
import middlewares from "../../../middlewares"
const route = Router()
export default app => {
app.use("/auth", route)
route.post("/", middlewares.wrap(require("./create-session").default))
return app
}
@@ -1,5 +1,8 @@
import { Router } from "express"
import middlewares from "../../middlewares"
import authRoutes from "./auth"
import productRoutes from "./products"
import productVariantRoutes from "./product-variants"
const route = Router()
@@ -7,12 +10,13 @@ export default app => {
app.use("/admin", route)
// Unauthenticated routes
// route.use("/auth", require("./auth").default)
authRoutes(route)
// Authenticated routes
route.use(middlewares.authenticate())
route.use("/products", require("./products").default)
route.use("/product-variants", require("./product-variants").default)
productRoutes(route)
// productVariantRoutes(route)
return app
}
@@ -0,0 +1,17 @@
import IdMap from "../../../../../helpers/id-map"
import { request } from "../../../../../helpers/test-request"
describe("POST /admin/products", () => {
describe("successful creation", () => {
it("calls mock function", async () => {
const res = await request("POST", "/admin/products", {
adminSession: {
jwt: {
userId: IdMap.getId("admin_user"),
},
},
})
expect(res.status).toEqual(200)
})
})
})
@@ -0,0 +1,11 @@
import { Validator } from "medusa-core-utils"
export default async (req, res) => {
try {
const variantService = req.scope.resolve("productVariantService")
} catch (err) {
console.log(err)
}
res.sendStatus(200)
}
@@ -4,5 +4,11 @@ import middlewares from "../../../middlewares"
const route = Router()
export default app => {
app.use("/products", route)
route.post("/", middlewares.wrap(require("./create-product").default))
// route.get("/:productId", middlewares.wrap(require("./get-product").default))
return app
}
@@ -1,9 +1,9 @@
import validator from "../../../../utils/validator"
import { Validator } from "medusa-core-utils"
export default async (req, res) => {
const { productId } = req.params
const schema = validator.objectId()
const schema = Validator.objectId()
const { value, error } = schema.validate(productId)
if (error) {
@@ -5,6 +5,8 @@ const route = Router()
export default app => {
app.use("/products", route)
route.get("/:productId", middlewares.wrap(require("./get-product").default))
return app
}