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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user