All tests passing
This commit is contained in:
@@ -57,7 +57,7 @@ class BaseModel {
|
|||||||
* @return {?mongoose.Document} the retreived mongoose document or null.
|
* @return {?mongoose.Document} the retreived mongoose document or null.
|
||||||
*/
|
*/
|
||||||
findOne(query, options = {}) {
|
findOne(query, options = {}) {
|
||||||
return this.mongooseModel_.findOne(query, options)
|
return this.mongooseModel_.findOne(query, options).lean()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -68,7 +68,7 @@ class BaseModel {
|
|||||||
* an empty array
|
* an empty array
|
||||||
*/
|
*/
|
||||||
find(query, options) {
|
find(query, options) {
|
||||||
return this.mongooseModel_.find(query, options)
|
return this.mongooseModel_.find(query, options).lean()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,7 +80,7 @@ class BaseModel {
|
|||||||
*/
|
*/
|
||||||
updateOne(query, update, options = {}) {
|
updateOne(query, update, options = {}) {
|
||||||
options.new = true
|
options.new = true
|
||||||
return this.mongooseModel_.findOneAndUpdate(query, update, options)
|
return this.mongooseModel_.findOneAndUpdate(query, update, options).lean()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["prettier"],
|
||||||
|
"extends": ["prettier"],
|
||||||
|
"rules": {
|
||||||
|
"prettier/prettier": "error",
|
||||||
|
"semi": "error",
|
||||||
|
"no-unused-expressions": "true"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@ describe("POST /admin/orders", () => {
|
|||||||
country_code: "US",
|
country_code: "US",
|
||||||
province: "CA",
|
province: "CA",
|
||||||
postal_code: "93011",
|
postal_code: "93011",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
},
|
},
|
||||||
shipping_address: {
|
shipping_address: {
|
||||||
first_name: "Virgil",
|
first_name: "Virgil",
|
||||||
@@ -30,6 +31,7 @@ describe("POST /admin/orders", () => {
|
|||||||
country_code: "US",
|
country_code: "US",
|
||||||
province: "CA",
|
province: "CA",
|
||||||
postal_code: "93011",
|
postal_code: "93011",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
},
|
},
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
@@ -90,6 +92,7 @@ describe("POST /admin/orders", () => {
|
|||||||
country_code: "US",
|
country_code: "US",
|
||||||
province: "CA",
|
province: "CA",
|
||||||
postal_code: "93011",
|
postal_code: "93011",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
},
|
},
|
||||||
shipping_address: {
|
shipping_address: {
|
||||||
first_name: "Virgil",
|
first_name: "Virgil",
|
||||||
@@ -99,6 +102,7 @@ describe("POST /admin/orders", () => {
|
|||||||
country_code: "US",
|
country_code: "US",
|
||||||
province: "CA",
|
province: "CA",
|
||||||
postal_code: "93011",
|
postal_code: "93011",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
},
|
},
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import { IdMap } from "medusa-test-utils"
|
import { IdMap } from "medusa-test-utils"
|
||||||
import { request } from "../../../../../helpers/test-request"
|
import { request } from "../../../../../helpers/test-request"
|
||||||
import { ProductServiceMock } from "../../../../../services/__mocks__/product"
|
import {
|
||||||
|
ProductServiceMock,
|
||||||
|
products,
|
||||||
|
} from "../../../../../services/__mocks__/product"
|
||||||
|
|
||||||
describe("DELETE /admin/products/:id/options/:optionId", () => {
|
describe("DELETE /admin/products/:id/options/:optionId", () => {
|
||||||
describe("successfully updates an option", () => {
|
describe("successfully updates an option", () => {
|
||||||
@@ -28,6 +31,7 @@ describe("DELETE /admin/products/:id/options/:optionId", () => {
|
|||||||
option_id: IdMap.getId("option1"),
|
option_id: IdMap.getId("option1"),
|
||||||
object: "option",
|
object: "option",
|
||||||
deleted: true,
|
deleted: true,
|
||||||
|
product: products.productWithOptions,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,9 @@ export default async (req, res) => {
|
|||||||
const productService = req.scope.resolve("productService")
|
const productService = req.scope.resolve("productService")
|
||||||
const shippingProfileService = req.scope.resolve("shippingProfileService")
|
const shippingProfileService = req.scope.resolve("shippingProfileService")
|
||||||
|
|
||||||
value.thumbnail = value.thumbnail || value.images[0]
|
if (!value.thumbnail && value.images && value.images.length) {
|
||||||
|
value.thumbnail = value.images[0]
|
||||||
|
}
|
||||||
let newProduct = await productService.createDraft(value)
|
let newProduct = await productService.createDraft(value)
|
||||||
|
|
||||||
if (variants) {
|
if (variants) {
|
||||||
|
|||||||
@@ -52,8 +52,13 @@ export default async (req, res) => {
|
|||||||
const productService = req.scope.resolve("productService")
|
const productService = req.scope.resolve("productService")
|
||||||
const oldProduct = await productService.retrieve(id)
|
const oldProduct = await productService.retrieve(id)
|
||||||
|
|
||||||
if (!oldProduct.thumbnail && value.images) {
|
if (
|
||||||
value.thumbnail = value.thumbnail || value.images[0]
|
!oldProduct.thumbnail &&
|
||||||
|
!value.thumbnail &&
|
||||||
|
value.images &&
|
||||||
|
value.images.length
|
||||||
|
) {
|
||||||
|
value.thumbnail = value.images[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
const product = await productService.update(oldProduct._id, value)
|
const product = await productService.update(oldProduct._id, value)
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ describe("POST /store/carts", () => {
|
|||||||
it("calls CartService create", () => {
|
it("calls CartService create", () => {
|
||||||
expect(CartServiceMock.create).toHaveBeenCalledTimes(1)
|
expect(CartServiceMock.create).toHaveBeenCalledTimes(1)
|
||||||
expect(CartServiceMock.create).toHaveBeenCalledWith({
|
expect(CartServiceMock.create).toHaveBeenCalledWith({
|
||||||
|
email: "",
|
||||||
|
customer_id: "",
|
||||||
region_id: IdMap.getId("testRegion"),
|
region_id: IdMap.getId("testRegion"),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ describe("POST /store/carts/:id", () => {
|
|||||||
city: "Los Angeles",
|
city: "Los Angeles",
|
||||||
province: "CA",
|
province: "CA",
|
||||||
postal_code: "91092",
|
postal_code: "91092",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
}
|
}
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
@@ -73,8 +74,8 @@ describe("POST /store/carts/:id", () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it("applies promo code", () => {
|
it("applies promo code", () => {
|
||||||
expect(CartServiceMock.applyPromoCode).toHaveBeenCalledTimes(1)
|
expect(CartServiceMock.applyDiscount).toHaveBeenCalledTimes(1)
|
||||||
expect(CartServiceMock.applyPromoCode).toHaveBeenCalledWith(
|
expect(CartServiceMock.applyDiscount).toHaveBeenCalledWith(
|
||||||
IdMap.getId("emptyCart"),
|
IdMap.getId("emptyCart"),
|
||||||
"TESTCODE"
|
"TESTCODE"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,14 +8,13 @@ describe("POST /store/carts/:id/line-items/:line_id", () => {
|
|||||||
let subject
|
let subject
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
const cartId = IdMap.getId("emptyCart")
|
const cartId = IdMap.getId("fr-cart")
|
||||||
const lineId = IdMap.getId("existingLine")
|
const lineId = IdMap.getId("existingLine")
|
||||||
subject = await request(
|
subject = await request(
|
||||||
"POST",
|
"POST",
|
||||||
`/store/carts/${cartId}/line-items/${lineId}`,
|
`/store/carts/${cartId}/line-items/${lineId}`,
|
||||||
{
|
{
|
||||||
payload: {
|
payload: {
|
||||||
variant_id: IdMap.getId("can-cover"),
|
|
||||||
quantity: 3,
|
quantity: 3,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -33,9 +32,9 @@ describe("POST /store/carts/:id/line-items/:line_id", () => {
|
|||||||
it("calls LineItemService generate", () => {
|
it("calls LineItemService generate", () => {
|
||||||
expect(LineItemServiceMock.generate).toHaveBeenCalledTimes(1)
|
expect(LineItemServiceMock.generate).toHaveBeenCalledTimes(1)
|
||||||
expect(LineItemServiceMock.generate).toHaveBeenCalledWith(
|
expect(LineItemServiceMock.generate).toHaveBeenCalledWith(
|
||||||
IdMap.getId("can-cover"),
|
IdMap.getId("eur-10-us-12"),
|
||||||
3,
|
IdMap.getId("region-france"),
|
||||||
IdMap.getId("testRegion")
|
3
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -44,25 +43,23 @@ describe("POST /store/carts/:id/line-items/:line_id", () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it("returns the cart", () => {
|
it("returns the cart", () => {
|
||||||
expect(subject.body.cart._id).toEqual(IdMap.getId("emptyCart"))
|
expect(subject.body.cart._id).toEqual(IdMap.getId("fr-cart"))
|
||||||
expect(subject.body.cart.decorated).toEqual(true)
|
expect(subject.body.cart.decorated).toEqual(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("handles unsuccessful line item generation", () => {
|
describe("removes line item on quantity 0", () => {
|
||||||
let subject
|
let subject
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
const cartId = IdMap.getId("emptyCart")
|
const cartId = IdMap.getId("fr-cart")
|
||||||
const lineId = IdMap.getId("existingLine")
|
const lineId = IdMap.getId("existingLine")
|
||||||
|
|
||||||
subject = await request(
|
subject = await request(
|
||||||
"POST",
|
"POST",
|
||||||
`/store/carts/${cartId}/line-items/${lineId}`,
|
`/store/carts/${cartId}/line-items/${lineId}`,
|
||||||
{
|
{
|
||||||
payload: {
|
payload: {
|
||||||
variant_id: IdMap.getId("fail"),
|
quantity: 0,
|
||||||
quantity: 3,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -72,21 +69,21 @@ describe("POST /store/carts/:id/line-items/:line_id", () => {
|
|||||||
jest.clearAllMocks()
|
jest.clearAllMocks()
|
||||||
})
|
})
|
||||||
|
|
||||||
it("calls LineItemService generate", () => {
|
it("calls CartService create", () => {
|
||||||
expect(LineItemServiceMock.generate).toHaveBeenCalledTimes(1)
|
expect(CartServiceMock.removeLineItem).toHaveBeenCalledTimes(1)
|
||||||
expect(LineItemServiceMock.generate).toHaveBeenCalledWith(
|
expect(CartServiceMock.removeLineItem).toHaveBeenCalledWith(
|
||||||
IdMap.getId("fail"),
|
IdMap.getId("fr-cart"),
|
||||||
3,
|
IdMap.getId("existingLine")
|
||||||
IdMap.getId("testRegion")
|
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it("returns 400", () => {
|
it("returns 200", () => {
|
||||||
expect(subject.status).toEqual(400)
|
expect(subject.status).toEqual(200)
|
||||||
})
|
})
|
||||||
|
|
||||||
it("returns error", () => {
|
it("returns the cart", () => {
|
||||||
expect(subject.body.message).toEqual("Doesn't exist")
|
expect(subject.body.cart._id).toEqual(IdMap.getId("fr-cart"))
|
||||||
|
expect(subject.body.cart.decorated).toEqual(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ describe("POST /store/carts/:id/payment-method", () => {
|
|||||||
subject = await request("POST", `/store/carts/${cartId}/payment-method`, {
|
subject = await request("POST", `/store/carts/${cartId}/payment-method`, {
|
||||||
payload: {
|
payload: {
|
||||||
provider_id: "default_provider",
|
provider_id: "default_provider",
|
||||||
|
data: {
|
||||||
|
money_id: "success",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -20,14 +23,6 @@ describe("POST /store/carts/:id/payment-method", () => {
|
|||||||
jest.clearAllMocks()
|
jest.clearAllMocks()
|
||||||
})
|
})
|
||||||
|
|
||||||
it("calls CartService retrievePaymentSession", () => {
|
|
||||||
expect(CartServiceMock.retrievePaymentSession).toHaveBeenCalledTimes(1)
|
|
||||||
expect(CartServiceMock.retrievePaymentSession).toHaveBeenCalledWith(
|
|
||||||
IdMap.getId("cartWithPaySessions"),
|
|
||||||
"default_provider"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("calls CartService setPaymentMethod", () => {
|
it("calls CartService setPaymentMethod", () => {
|
||||||
expect(CartServiceMock.setPaymentMethod).toHaveBeenCalledTimes(1)
|
expect(CartServiceMock.setPaymentMethod).toHaveBeenCalledTimes(1)
|
||||||
expect(CartServiceMock.setPaymentMethod).toHaveBeenCalledWith(
|
expect(CartServiceMock.setPaymentMethod).toHaveBeenCalledWith(
|
||||||
@@ -50,50 +45,4 @@ describe("POST /store/carts/:id/payment-method", () => {
|
|||||||
expect(subject.body.cart.decorated).toEqual(true)
|
expect(subject.body.cart.decorated).toEqual(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("fails when pay session not authorized", () => {
|
|
||||||
let subject
|
|
||||||
|
|
||||||
beforeAll(async () => {
|
|
||||||
const cartId = IdMap.getId("cartWithPaySessions")
|
|
||||||
subject = await request("POST", `/store/carts/${cartId}/payment-method`, {
|
|
||||||
payload: {
|
|
||||||
provider_id: "nono",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
afterAll(() => {
|
|
||||||
jest.clearAllMocks()
|
|
||||||
})
|
|
||||||
|
|
||||||
it("calls CartService retrievePaymentSession", () => {
|
|
||||||
expect(CartServiceMock.retrievePaymentSession).toHaveBeenCalledTimes(1)
|
|
||||||
expect(CartServiceMock.retrievePaymentSession).toHaveBeenCalledWith(
|
|
||||||
IdMap.getId("cartWithPaySessions"),
|
|
||||||
"nono"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("calls CartService setPaymentMethod", () => {
|
|
||||||
expect(CartServiceMock.setPaymentMethod).toHaveBeenCalledTimes(1)
|
|
||||||
expect(CartServiceMock.setPaymentMethod).toHaveBeenCalledWith(
|
|
||||||
IdMap.getId("cartWithPaySessions"),
|
|
||||||
{
|
|
||||||
provider_id: "nono",
|
|
||||||
data: {
|
|
||||||
money_id: "fail",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("returns 400", () => {
|
|
||||||
expect(subject.status).toEqual(400)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("returns the cart", () => {
|
|
||||||
expect(subject.body.message).toEqual("Not allowed")
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ export default async (req, res) => {
|
|||||||
|
|
||||||
const { value, error } = schema.validate(req.body)
|
const { value, error } = schema.validate(req.body)
|
||||||
if (error) {
|
if (error) {
|
||||||
|
console.log(error)
|
||||||
throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details)
|
throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,6 +24,13 @@ export default async (req, res) => {
|
|||||||
cart = await cartService.retrieve(id)
|
cart = await cartService.retrieve(id)
|
||||||
|
|
||||||
const existing = cart.items.find(i => i._id.equals(line_id))
|
const existing = cart.items.find(i => i._id.equals(line_id))
|
||||||
|
if (!existing) {
|
||||||
|
throw new MedusaError(
|
||||||
|
MedusaError.Types.INVALID_DATA,
|
||||||
|
"Could not find the line item"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
const lineItem = await lineItemService.generate(
|
const lineItem = await lineItemService.generate(
|
||||||
existing.content.variant._id,
|
existing.content.variant._id,
|
||||||
cart.region_id,
|
cart.region_id,
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
import { IdMap } from "medusa-test-utils"
|
|
||||||
import { request } from "../../../../../helpers/test-request"
|
|
||||||
import { CustomerServiceMock } from "../../../../../services/__mocks__/customer"
|
|
||||||
|
|
||||||
describe("POST /store/customers/:id/password", () => {
|
|
||||||
describe("successfully updates a customer", () => {
|
|
||||||
let subject
|
|
||||||
beforeAll(async () => {
|
|
||||||
subject = await request(
|
|
||||||
"POST",
|
|
||||||
`/store/customers/${IdMap.getId("lebron")}/password`,
|
|
||||||
{
|
|
||||||
payload: {
|
|
||||||
password: "NewPass",
|
|
||||||
},
|
|
||||||
clientSession: {
|
|
||||||
jwt: {
|
|
||||||
customer_id: IdMap.getId("lebron"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
afterAll(() => {
|
|
||||||
jest.clearAllMocks()
|
|
||||||
})
|
|
||||||
|
|
||||||
it("calls CustomerService update", () => {
|
|
||||||
expect(CustomerServiceMock.update).toHaveBeenCalledTimes(1)
|
|
||||||
expect(CustomerServiceMock.update).toHaveBeenCalledWith(
|
|
||||||
IdMap.getId("lebron"),
|
|
||||||
{
|
|
||||||
password: "NewPass",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("returns product decorated", () => {
|
|
||||||
expect(subject.body.customer.first_name).toEqual("LeBron")
|
|
||||||
expect(subject.body.customer.decorated).toEqual(true)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe("fails if not authenticated", () => {
|
|
||||||
let subject
|
|
||||||
beforeAll(async () => {
|
|
||||||
subject = await request(
|
|
||||||
"POST",
|
|
||||||
`/store/customers/${IdMap.getId("customer1")}/password`,
|
|
||||||
{
|
|
||||||
payload: {
|
|
||||||
first_name: "LeBron",
|
|
||||||
last_name: "James",
|
|
||||||
},
|
|
||||||
clientSession: {
|
|
||||||
jwt: {
|
|
||||||
customer_id: IdMap.getId("lebron"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
afterAll(() => {
|
|
||||||
jest.clearAllMocks()
|
|
||||||
})
|
|
||||||
|
|
||||||
it("status code 400", () => {
|
|
||||||
expect(subject.status).toEqual(400)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -12,11 +12,6 @@ describe("POST /store/orders", () => {
|
|||||||
payload: {
|
payload: {
|
||||||
cartId: IdMap.getId("fr-cart"),
|
cartId: IdMap.getId("fr-cart"),
|
||||||
},
|
},
|
||||||
adminSession: {
|
|
||||||
jwt: {
|
|
||||||
userId: IdMap.getId("admin_user"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -25,8 +20,8 @@ describe("POST /store/orders", () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it("calls service create", () => {
|
it("calls service create", () => {
|
||||||
expect(OrderServiceMock.create).toHaveBeenCalledTimes(1)
|
expect(OrderServiceMock.createFromCart).toHaveBeenCalledTimes(1)
|
||||||
expect(OrderServiceMock.create).toHaveBeenCalledWith(carts.frCart)
|
expect(OrderServiceMock.createFromCart).toHaveBeenCalledWith(carts.frCart)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ export default async (req, res) => {
|
|||||||
|
|
||||||
const cart = await cartService.retrieve(value.cartId)
|
const cart = await cartService.retrieve(value.cartId)
|
||||||
let order = await orderService.createFromCart(cart)
|
let order = await orderService.createFromCart(cart)
|
||||||
|
|
||||||
order = await orderService.retrieveByCartId(value.cartId)
|
|
||||||
order = await orderService.decorate(order, [
|
order = await orderService.decorate(order, [
|
||||||
"status",
|
"status",
|
||||||
"fulfillment_status",
|
"fulfillment_status",
|
||||||
@@ -36,6 +34,7 @@ export default async (req, res) => {
|
|||||||
|
|
||||||
res.status(200).json({ order })
|
res.status(200).json({ order })
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
// If something fails it might be because the order has already been created
|
// If something fails it might be because the order has already been created
|
||||||
// if it has we find it from the cart id
|
// if it has we find it from the cart id
|
||||||
const orderService = req.scope.resolve("orderService")
|
const orderService = req.scope.resolve("orderService")
|
||||||
|
|||||||
+4
-5
@@ -8,11 +8,10 @@ describe("GET /store/shipping-options", () => {
|
|||||||
let subject
|
let subject
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
subject = await request("GET", `/store/shipping-options`, {
|
subject = await request(
|
||||||
payload: {
|
"GET",
|
||||||
cart_id: IdMap.getId("emptyCart"),
|
`/store/shipping-options/${IdMap.getId("emptyCart")}`
|
||||||
},
|
)
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
afterAll(() => {
|
afterAll(() => {
|
||||||
@@ -168,13 +168,21 @@ export const carts = {
|
|||||||
},
|
},
|
||||||
completeCart: {
|
completeCart: {
|
||||||
_id: IdMap.getId("complete-cart"),
|
_id: IdMap.getId("complete-cart"),
|
||||||
title: "test",
|
|
||||||
region_id: IdMap.getId("region-france"),
|
region_id: IdMap.getId("region-france"),
|
||||||
items: [],
|
items: [],
|
||||||
|
email: "test",
|
||||||
|
payment_sessions: [
|
||||||
|
{
|
||||||
|
provider_id: "default_provider",
|
||||||
|
data: {
|
||||||
|
money_id: "success",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
payment_method: {
|
payment_method: {
|
||||||
provider_id: "stripe",
|
provider_id: "default_provider",
|
||||||
data: {
|
data: {
|
||||||
yes: "sir",
|
money_id: "success",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
shipping_methods: [
|
shipping_methods: [
|
||||||
@@ -259,7 +267,7 @@ export const carts = {
|
|||||||
shipping_methods: [
|
shipping_methods: [
|
||||||
{
|
{
|
||||||
_id: IdMap.getId("freeShipping"),
|
_id: IdMap.getId("freeShipping"),
|
||||||
profile_id: "default_profile",
|
profile_id: IdMap.getId("default_profile"),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
shipping_options: [
|
shipping_options: [
|
||||||
|
|||||||
@@ -209,11 +209,16 @@ export const orders = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const OrderModelMock = {
|
export const OrderModelMock = {
|
||||||
create: jest.fn().mockReturnValue(Promise.resolve()),
|
create: jest.fn().mockImplementation(data => Promise.resolve(data)),
|
||||||
updateOne: jest.fn().mockImplementation((query, update) => {
|
updateOne: jest.fn().mockImplementation((query, update) => {
|
||||||
return Promise.resolve()
|
return Promise.resolve()
|
||||||
}),
|
}),
|
||||||
deleteOne: jest.fn().mockReturnValue(Promise.resolve()),
|
deleteOne: jest.fn().mockReturnValue(Promise.resolve()),
|
||||||
|
startSession: jest.fn().mockReturnValue(
|
||||||
|
Promise.resolve({
|
||||||
|
withTransaction: fn => fn(),
|
||||||
|
})
|
||||||
|
),
|
||||||
findOne: jest.fn().mockImplementation(query => {
|
findOne: jest.fn().mockImplementation(query => {
|
||||||
if (query._id === IdMap.getId("test-order")) {
|
if (query._id === IdMap.getId("test-order")) {
|
||||||
orders.testOrder.payment_status = "awaiting"
|
orders.testOrder.payment_status = "awaiting"
|
||||||
@@ -240,7 +245,7 @@ export const OrderModelMock = {
|
|||||||
orders.orderToRefund.payment_status = "captured"
|
orders.orderToRefund.payment_status = "captured"
|
||||||
return Promise.resolve(orders.orderToRefund)
|
return Promise.resolve(orders.orderToRefund)
|
||||||
}
|
}
|
||||||
if (query.metadata.cart_id === IdMap.getId("test-cart")) {
|
if (query.cart_id === IdMap.getId("test-cart")) {
|
||||||
return Promise.resolve(orders.testOrder)
|
return Promise.resolve(orders.testOrder)
|
||||||
}
|
}
|
||||||
return Promise.resolve(undefined)
|
return Promise.resolve(undefined)
|
||||||
|
|||||||
@@ -215,13 +215,40 @@ export const CartServiceMock = {
|
|||||||
}),
|
}),
|
||||||
setPaymentMethod: jest.fn().mockImplementation((cartId, method) => {
|
setPaymentMethod: jest.fn().mockImplementation((cartId, method) => {
|
||||||
if (method.provider_id === "default_provider") {
|
if (method.provider_id === "default_provider") {
|
||||||
return Promise.resolve()
|
return Promise.resolve(carts.cartWithPaySessions)
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new MedusaError(MedusaError.Types.NOT_ALLOWED, "Not allowed")
|
throw new MedusaError(MedusaError.Types.NOT_ALLOWED, "Not allowed")
|
||||||
}),
|
}),
|
||||||
|
removeLineItem: jest.fn().mockImplementation((cartId, lineItem) => {
|
||||||
|
if (cartId === IdMap.getId("fr-cart")) {
|
||||||
|
return Promise.resolve(carts.frCart)
|
||||||
|
}
|
||||||
|
if (cartId === IdMap.getId("regionCart")) {
|
||||||
|
return Promise.resolve(carts.regionCart)
|
||||||
|
}
|
||||||
|
if (cartId === IdMap.getId("emptyCart")) {
|
||||||
|
return Promise.resolve(carts.emptyCart)
|
||||||
|
}
|
||||||
|
if (cartId === IdMap.getId("cartWithPaySessions")) {
|
||||||
|
return Promise.resolve(carts.cartWithPaySessions)
|
||||||
|
}
|
||||||
|
throw new MedusaError(MedusaError.Types.NOT_FOUND, "cart not found")
|
||||||
|
}),
|
||||||
updateLineItem: jest.fn().mockImplementation((cartId, lineItem) => {
|
updateLineItem: jest.fn().mockImplementation((cartId, lineItem) => {
|
||||||
return Promise.resolve()
|
if (cartId === IdMap.getId("fr-cart")) {
|
||||||
|
return Promise.resolve(carts.frCart)
|
||||||
|
}
|
||||||
|
if (cartId === IdMap.getId("regionCart")) {
|
||||||
|
return Promise.resolve(carts.regionCart)
|
||||||
|
}
|
||||||
|
if (cartId === IdMap.getId("emptyCart")) {
|
||||||
|
return Promise.resolve(carts.emptyCart)
|
||||||
|
}
|
||||||
|
if (cartId === IdMap.getId("cartWithPaySessions")) {
|
||||||
|
return Promise.resolve(carts.cartWithPaySessions)
|
||||||
|
}
|
||||||
|
throw new MedusaError(MedusaError.Types.NOT_FOUND, "cart not found")
|
||||||
}),
|
}),
|
||||||
setRegion: jest.fn().mockImplementation((cartId, regionId) => {
|
setRegion: jest.fn().mockImplementation((cartId, regionId) => {
|
||||||
if (regionId === IdMap.getId("fail")) {
|
if (regionId === IdMap.getId("fail")) {
|
||||||
@@ -238,7 +265,7 @@ export const CartServiceMock = {
|
|||||||
updateBillingAddress: jest.fn().mockImplementation((cartId, address) => {
|
updateBillingAddress: jest.fn().mockImplementation((cartId, address) => {
|
||||||
return Promise.resolve()
|
return Promise.resolve()
|
||||||
}),
|
}),
|
||||||
applyPromoCode: jest.fn().mockImplementation((cartId, code) => {
|
applyDiscount: jest.fn().mockImplementation((cartId, code) => {
|
||||||
return Promise.resolve()
|
return Promise.resolve()
|
||||||
}),
|
}),
|
||||||
setPaymentSessions: jest.fn().mockImplementation(cartId => {
|
setPaymentSessions: jest.fn().mockImplementation(cartId => {
|
||||||
|
|||||||
@@ -35,6 +35,13 @@ export const CustomerServiceMock = {
|
|||||||
password_hash: "1234",
|
password_hash: "1234",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
if (email === "test@testdom.com") {
|
||||||
|
return Promise.resolve({
|
||||||
|
_id: IdMap.getId("testdom"),
|
||||||
|
email,
|
||||||
|
password_hash: "1234",
|
||||||
|
})
|
||||||
|
}
|
||||||
if (email === "oliver@test.dk") {
|
if (email === "oliver@test.dk") {
|
||||||
return bcrypt
|
return bcrypt
|
||||||
.hash("123456789", 10)
|
.hash("123456789", 10)
|
||||||
|
|||||||
@@ -8,7 +8,28 @@ export const LineItemServiceMock = {
|
|||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}),
|
}),
|
||||||
generate: jest.fn().mockImplementation((variantId, quantity, regionId) => {
|
isEqual: jest.fn().mockImplementation((line, match) => {
|
||||||
|
if (Array.isArray(line.content)) {
|
||||||
|
if (
|
||||||
|
Array.isArray(match.content) &&
|
||||||
|
match.content.length === line.content.length
|
||||||
|
) {
|
||||||
|
return line.content.every(
|
||||||
|
(c, index) =>
|
||||||
|
c.variant._id === match[index].variant._id &&
|
||||||
|
c.quantity === match[index].quantity
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else if (!Array.isArray(match.content)) {
|
||||||
|
return (
|
||||||
|
line.content.variant._id === match.content.variant._id &&
|
||||||
|
line.content.quantity === match.content.quantity
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}),
|
||||||
|
generate: jest.fn().mockImplementation((variantId, regionId, quantity) => {
|
||||||
if (variantId === IdMap.getId("fail") || regionId === IdMap.getId("fail")) {
|
if (variantId === IdMap.getId("fail") || regionId === IdMap.getId("fail")) {
|
||||||
throw new MedusaError(MedusaError.Types.INVALID_DATA, "Doesn't exist")
|
throw new MedusaError(MedusaError.Types.INVALID_DATA, "Doesn't exist")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,6 +125,9 @@ export const OrderServiceMock = {
|
|||||||
create: jest.fn().mockImplementation(data => {
|
create: jest.fn().mockImplementation(data => {
|
||||||
return Promise.resolve(orders.testOrder)
|
return Promise.resolve(orders.testOrder)
|
||||||
}),
|
}),
|
||||||
|
createFromCart: jest.fn().mockImplementation(data => {
|
||||||
|
return Promise.resolve(orders.testOrder)
|
||||||
|
}),
|
||||||
update: jest.fn().mockImplementation(data => Promise.resolve()),
|
update: jest.fn().mockImplementation(data => Promise.resolve()),
|
||||||
retrieve: jest.fn().mockImplementation(orderId => {
|
retrieve: jest.fn().mockImplementation(orderId => {
|
||||||
if (orderId === IdMap.getId("test-order")) {
|
if (orderId === IdMap.getId("test-order")) {
|
||||||
@@ -135,6 +138,9 @@ export const OrderServiceMock = {
|
|||||||
}
|
}
|
||||||
return Promise.resolve(undefined)
|
return Promise.resolve(undefined)
|
||||||
}),
|
}),
|
||||||
|
retrieveByCartId: jest.fn().mockImplementation(cartId => {
|
||||||
|
return Promise.resolve()
|
||||||
|
}),
|
||||||
decorate: jest.fn().mockImplementation(order => {
|
decorate: jest.fn().mockImplementation(order => {
|
||||||
order.decorated = true
|
order.decorated = true
|
||||||
return order
|
return order
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ export const DefaultProviderMock = {
|
|||||||
|
|
||||||
return Promise.resolve("initial")
|
return Promise.resolve("initial")
|
||||||
}),
|
}),
|
||||||
|
retrievePayment: jest.fn().mockImplementation(data => {
|
||||||
|
return Promise.resolve(data)
|
||||||
|
}),
|
||||||
capturePayment: jest.fn().mockReturnValue(Promise.resolve()),
|
capturePayment: jest.fn().mockReturnValue(Promise.resolve()),
|
||||||
refundPayment: jest.fn().mockReturnValue(Promise.resolve()),
|
refundPayment: jest.fn().mockReturnValue(Promise.resolve()),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,9 @@ export const ProductServiceMock = {
|
|||||||
.fn()
|
.fn()
|
||||||
.mockReturnValue(Promise.resolve(products.productWithOptions)),
|
.mockReturnValue(Promise.resolve(products.productWithOptions)),
|
||||||
updateOptionValue: jest.fn().mockReturnValue(Promise.resolve()),
|
updateOptionValue: jest.fn().mockReturnValue(Promise.resolve()),
|
||||||
deleteOption: jest.fn().mockReturnValue(Promise.resolve()),
|
deleteOption: jest
|
||||||
|
.fn()
|
||||||
|
.mockReturnValue(Promise.resolve(products.productWithOptions)),
|
||||||
retrieveVariants: jest
|
retrieveVariants: jest
|
||||||
.fn()
|
.fn()
|
||||||
.mockReturnValue(
|
.mockReturnValue(
|
||||||
@@ -84,8 +86,8 @@ export const ProductServiceMock = {
|
|||||||
}
|
}
|
||||||
return Promise.resolve(undefined)
|
return Promise.resolve(undefined)
|
||||||
}),
|
}),
|
||||||
update: jest.fn().mockImplementation((userId, data) => {
|
update: jest.fn().mockImplementation((product, data) => {
|
||||||
return Promise.resolve()
|
return Promise.resolve(products.product1)
|
||||||
}),
|
}),
|
||||||
list: jest.fn().mockImplementation(data => {
|
list: jest.fn().mockImplementation(data => {
|
||||||
// Used to retrieve a product based on a variant id see
|
// Used to retrieve a product based on a variant id see
|
||||||
|
|||||||
@@ -42,10 +42,10 @@ export const ShippingProfileServiceMock = {
|
|||||||
return Promise.resolve([])
|
return Promise.resolve([])
|
||||||
}
|
}
|
||||||
if (selector.shipping_options === IdMap.getId("freeShipping")) {
|
if (selector.shipping_options === IdMap.getId("freeShipping")) {
|
||||||
return Promise.resolve([{ _id: "default_profile" }])
|
return Promise.resolve([{ _id: IdMap.getId("default_profile") }])
|
||||||
}
|
}
|
||||||
if (selector.shipping_options === IdMap.getId("additional")) {
|
if (selector.shipping_options === IdMap.getId("additional")) {
|
||||||
return Promise.resolve([{ _id: "additional_profile" }])
|
return Promise.resolve([{ _id: IdMap.getId("additional_profile") }])
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
selector.products &&
|
selector.products &&
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import {
|
|||||||
import { ProductVariantServiceMock } from "../__mocks__/product-variant"
|
import { ProductVariantServiceMock } from "../__mocks__/product-variant"
|
||||||
import { RegionServiceMock } from "../__mocks__/region"
|
import { RegionServiceMock } from "../__mocks__/region"
|
||||||
import { EventBusServiceMock } from "../__mocks__/event-bus"
|
import { EventBusServiceMock } from "../__mocks__/event-bus"
|
||||||
|
import { CustomerServiceMock } from "../__mocks__/customer"
|
||||||
import { ShippingOptionServiceMock } from "../__mocks__/shipping-option"
|
import { ShippingOptionServiceMock } from "../__mocks__/shipping-option"
|
||||||
import { ShippingProfileServiceMock } from "../__mocks__/shipping-profile"
|
import { ShippingProfileServiceMock } from "../__mocks__/shipping-profile"
|
||||||
import { CartModelMock, carts } from "../../models/__mocks__/cart"
|
import { CartModelMock, carts } from "../../models/__mocks__/cart"
|
||||||
@@ -497,6 +498,7 @@ describe("CartService", () => {
|
|||||||
const cartService = new CartService({
|
const cartService = new CartService({
|
||||||
cartModel: CartModelMock,
|
cartModel: CartModelMock,
|
||||||
eventBusService: EventBusServiceMock,
|
eventBusService: EventBusServiceMock,
|
||||||
|
customerService: CustomerServiceMock,
|
||||||
})
|
})
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@@ -509,7 +511,11 @@ describe("CartService", () => {
|
|||||||
"test@testdom.com"
|
"test@testdom.com"
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(EventBusServiceMock.emit).toHaveBeenCalledTimes(1)
|
expect(EventBusServiceMock.emit).toHaveBeenCalledTimes(2)
|
||||||
|
expect(EventBusServiceMock.emit).toHaveBeenCalledWith(
|
||||||
|
"cart.customer_updated",
|
||||||
|
expect.any(Object)
|
||||||
|
)
|
||||||
expect(EventBusServiceMock.emit).toHaveBeenCalledWith(
|
expect(EventBusServiceMock.emit).toHaveBeenCalledWith(
|
||||||
"cart.updated",
|
"cart.updated",
|
||||||
expect.any(Object)
|
expect.any(Object)
|
||||||
@@ -521,7 +527,10 @@ describe("CartService", () => {
|
|||||||
_id: IdMap.getId("emptyCart"),
|
_id: IdMap.getId("emptyCart"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$set: { email: "test@testdom.com" },
|
$set: {
|
||||||
|
email: "test@testdom.com",
|
||||||
|
customer_id: IdMap.getId("testdom"),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@@ -556,6 +565,7 @@ describe("CartService", () => {
|
|||||||
country_code: "US",
|
country_code: "US",
|
||||||
province: "CA",
|
province: "CA",
|
||||||
postal_code: "93011",
|
postal_code: "93011",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
}
|
}
|
||||||
|
|
||||||
await cartService.updateBillingAddress(IdMap.getId("emptyCart"), address)
|
await cartService.updateBillingAddress(IdMap.getId("emptyCart"), address)
|
||||||
@@ -593,7 +603,7 @@ describe("CartService", () => {
|
|||||||
address
|
address
|
||||||
)
|
)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
expect(err.message).toEqual("The address is not valid")
|
expect(err.message).toEqual(`"first_name" is required`)
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(CartModelMock.updateOne).toHaveBeenCalledTimes(0)
|
expect(CartModelMock.updateOne).toHaveBeenCalledTimes(0)
|
||||||
@@ -620,6 +630,7 @@ describe("CartService", () => {
|
|||||||
country_code: "US",
|
country_code: "US",
|
||||||
province: "CA",
|
province: "CA",
|
||||||
postal_code: "93011",
|
postal_code: "93011",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
}
|
}
|
||||||
|
|
||||||
await cartService.updateShippingAddress(IdMap.getId("emptyCart"), address)
|
await cartService.updateShippingAddress(IdMap.getId("emptyCart"), address)
|
||||||
@@ -650,6 +661,7 @@ describe("CartService", () => {
|
|||||||
country_code: "ru",
|
country_code: "ru",
|
||||||
province: "CA",
|
province: "CA",
|
||||||
postal_code: "93011",
|
postal_code: "93011",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
}
|
}
|
||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
@@ -672,7 +684,7 @@ describe("CartService", () => {
|
|||||||
|
|
||||||
await expect(
|
await expect(
|
||||||
cartService.updateShippingAddress(IdMap.getId("emptyCart"), address)
|
cartService.updateShippingAddress(IdMap.getId("emptyCart"), address)
|
||||||
).rejects.toThrow("The address is not valid")
|
).rejects.toThrow(`"first_name" is required`)
|
||||||
|
|
||||||
expect(CartModelMock.updateOne).toHaveBeenCalledTimes(0)
|
expect(CartModelMock.updateOne).toHaveBeenCalledTimes(0)
|
||||||
})
|
})
|
||||||
@@ -779,19 +791,12 @@ describe("CartService", () => {
|
|||||||
$set: {
|
$set: {
|
||||||
region_id: IdMap.getId("region-us"),
|
region_id: IdMap.getId("region-us"),
|
||||||
shipping_methods: [],
|
shipping_methods: [],
|
||||||
|
payment_sessions: [],
|
||||||
payment_method: undefined,
|
payment_method: undefined,
|
||||||
shipping_address: {
|
shipping_address: {
|
||||||
first_name: "hi",
|
first_name: "hi",
|
||||||
last_name: "you",
|
last_name: "you",
|
||||||
country_code: "",
|
country_code: "US",
|
||||||
city: "of lights",
|
|
||||||
address_1: "You bet street",
|
|
||||||
postal_code: "4242",
|
|
||||||
},
|
|
||||||
billing_address: {
|
|
||||||
first_name: "hi",
|
|
||||||
last_name: "you",
|
|
||||||
country_code: "",
|
|
||||||
city: "of lights",
|
city: "of lights",
|
||||||
address_1: "You bet street",
|
address_1: "You bet street",
|
||||||
postal_code: "4242",
|
postal_code: "4242",
|
||||||
@@ -858,17 +863,6 @@ describe("CartService", () => {
|
|||||||
IdMap.getId("testRegion")
|
IdMap.getId("testRegion")
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(PaymentProviderServiceMock.retrieveProvider).toHaveBeenCalledTimes(
|
|
||||||
1
|
|
||||||
)
|
|
||||||
expect(PaymentProviderServiceMock.retrieveProvider).toHaveBeenCalledWith(
|
|
||||||
"default_provider"
|
|
||||||
)
|
|
||||||
expect(DefaultProviderMock.getStatus).toHaveBeenCalledTimes(1)
|
|
||||||
expect(DefaultProviderMock.getStatus).toHaveBeenCalledWith({
|
|
||||||
money_id: "success",
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(CartModelMock.updateOne).toHaveBeenCalledTimes(1)
|
expect(CartModelMock.updateOne).toHaveBeenCalledTimes(1)
|
||||||
expect(CartModelMock.updateOne).toHaveBeenCalledWith(
|
expect(CartModelMock.updateOne).toHaveBeenCalledWith(
|
||||||
{
|
{
|
||||||
@@ -904,71 +898,6 @@ describe("CartService", () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
it("fails if the payment provider is not registered", async () => {
|
|
||||||
const paymentMethod = {
|
|
||||||
provider_id: "unregistered",
|
|
||||||
data: {
|
|
||||||
money_id: "success",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
await cartService.setPaymentMethod(
|
|
||||||
IdMap.getId("cartWithLine"),
|
|
||||||
paymentMethod
|
|
||||||
)
|
|
||||||
} catch (err) {
|
|
||||||
expect(RegionServiceMock.retrieve).toHaveBeenCalledTimes(1)
|
|
||||||
expect(RegionServiceMock.retrieve).toHaveBeenCalledWith(
|
|
||||||
IdMap.getId("testRegion")
|
|
||||||
)
|
|
||||||
|
|
||||||
expect(
|
|
||||||
PaymentProviderServiceMock.retrieveProvider
|
|
||||||
).toHaveBeenCalledTimes(1)
|
|
||||||
expect(
|
|
||||||
PaymentProviderServiceMock.retrieveProvider
|
|
||||||
).toHaveBeenCalledWith("unregistered")
|
|
||||||
|
|
||||||
expect(err.message).toEqual(`Provider Not Found`)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
it("fails if the payment is not authorized", async () => {
|
|
||||||
const paymentMethod = {
|
|
||||||
provider_id: "default_provider",
|
|
||||||
data: {
|
|
||||||
money_id: "fail",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
await cartService.setPaymentMethod(
|
|
||||||
IdMap.getId("cartWithLine"),
|
|
||||||
paymentMethod
|
|
||||||
)
|
|
||||||
} catch (err) {
|
|
||||||
expect(RegionServiceMock.retrieve).toHaveBeenCalledTimes(1)
|
|
||||||
expect(RegionServiceMock.retrieve).toHaveBeenCalledWith(
|
|
||||||
IdMap.getId("testRegion")
|
|
||||||
)
|
|
||||||
|
|
||||||
expect(
|
|
||||||
PaymentProviderServiceMock.retrieveProvider
|
|
||||||
).toHaveBeenCalledTimes(1)
|
|
||||||
expect(
|
|
||||||
PaymentProviderServiceMock.retrieveProvider
|
|
||||||
).toHaveBeenCalledWith("default_provider")
|
|
||||||
|
|
||||||
expect(DefaultProviderMock.getStatus).toHaveBeenCalledTimes(1)
|
|
||||||
expect(DefaultProviderMock.getStatus).toHaveBeenCalledWith({
|
|
||||||
money_id: "fail",
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(err.message).toEqual(`The payment method was not authorized`)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("setPaymentSessions", () => {
|
describe("setPaymentSessions", () => {
|
||||||
@@ -1259,7 +1188,7 @@ describe("CartService", () => {
|
|||||||
_id: IdMap.getId("freeShipping"),
|
_id: IdMap.getId("freeShipping"),
|
||||||
price: 0,
|
price: 0,
|
||||||
provider_id: "default_provider",
|
provider_id: "default_provider",
|
||||||
profile_id: "default_profile",
|
profile_id: IdMap.getId("default_profile"),
|
||||||
data,
|
data,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -1297,7 +1226,7 @@ describe("CartService", () => {
|
|||||||
_id: IdMap.getId("freeShipping"),
|
_id: IdMap.getId("freeShipping"),
|
||||||
price: 0,
|
price: 0,
|
||||||
provider_id: "default_provider",
|
provider_id: "default_provider",
|
||||||
profile_id: "default_profile",
|
profile_id: IdMap.getId("default_profile"),
|
||||||
data: {
|
data: {
|
||||||
id: "testshipperid",
|
id: "testshipperid",
|
||||||
},
|
},
|
||||||
@@ -1335,12 +1264,12 @@ describe("CartService", () => {
|
|||||||
shipping_methods: [
|
shipping_methods: [
|
||||||
{
|
{
|
||||||
_id: IdMap.getId("freeShipping"),
|
_id: IdMap.getId("freeShipping"),
|
||||||
profile_id: "default_profile",
|
profile_id: IdMap.getId("default_profile"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
_id: IdMap.getId("additional"),
|
_id: IdMap.getId("additional"),
|
||||||
price: 0,
|
price: 0,
|
||||||
profile_id: "additional_profile",
|
profile_id: IdMap.getId("additional_profile"),
|
||||||
provider_id: "default_provider",
|
provider_id: "default_provider",
|
||||||
data,
|
data,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ describe("CustomerService", () => {
|
|||||||
|
|
||||||
it("calls model layer create", async () => {
|
it("calls model layer create", async () => {
|
||||||
await customerService.create({
|
await customerService.create({
|
||||||
email: "oliver@medusa.com",
|
email: "new@medusa.com",
|
||||||
first_name: "Oliver",
|
first_name: "Oliver",
|
||||||
last_name: "Juhl",
|
last_name: "Juhl",
|
||||||
password: "secretsauce",
|
password: "secretsauce",
|
||||||
@@ -115,7 +115,7 @@ describe("CustomerService", () => {
|
|||||||
|
|
||||||
expect(CustomerModelMock.create).toBeCalledTimes(1)
|
expect(CustomerModelMock.create).toBeCalledTimes(1)
|
||||||
expect(CustomerModelMock.create).toBeCalledWith({
|
expect(CustomerModelMock.create).toBeCalledWith({
|
||||||
email: "oliver@medusa.com",
|
email: "new@medusa.com",
|
||||||
first_name: "Oliver",
|
first_name: "Oliver",
|
||||||
last_name: "Juhl",
|
last_name: "Juhl",
|
||||||
has_account: true,
|
has_account: true,
|
||||||
@@ -200,6 +200,7 @@ describe("CustomerService", () => {
|
|||||||
city: "Copenhagen",
|
city: "Copenhagen",
|
||||||
country_code: "DK",
|
country_code: "DK",
|
||||||
postal_code: "2100",
|
postal_code: "2100",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -217,6 +218,7 @@ describe("CustomerService", () => {
|
|||||||
city: "Copenhagen",
|
city: "Copenhagen",
|
||||||
country_code: "DK",
|
country_code: "DK",
|
||||||
postal_code: "2100",
|
postal_code: "2100",
|
||||||
|
phone: "+1 (222) 333 4444",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { PaymentProviderServiceMock } from "../__mocks__/payment-provider"
|
|||||||
import { FulfillmentProviderServiceMock } from "../__mocks__/fulfillment-provider"
|
import { FulfillmentProviderServiceMock } from "../__mocks__/fulfillment-provider"
|
||||||
import { ShippingProfileServiceMock } from "../__mocks__/shipping-profile"
|
import { ShippingProfileServiceMock } from "../__mocks__/shipping-profile"
|
||||||
import { TotalsServiceMock } from "../__mocks__/totals"
|
import { TotalsServiceMock } from "../__mocks__/totals"
|
||||||
|
import { RegionServiceMock } from "../__mocks__/region"
|
||||||
import { EventBusServiceMock } from "../__mocks__/event-bus"
|
import { EventBusServiceMock } from "../__mocks__/event-bus"
|
||||||
|
|
||||||
describe("OrderService", () => {
|
describe("OrderService", () => {
|
||||||
@@ -34,6 +35,8 @@ describe("OrderService", () => {
|
|||||||
describe("createFromCart", () => {
|
describe("createFromCart", () => {
|
||||||
const orderService = new OrderService({
|
const orderService = new OrderService({
|
||||||
orderModel: OrderModelMock,
|
orderModel: OrderModelMock,
|
||||||
|
paymentProviderService: PaymentProviderServiceMock,
|
||||||
|
regionService: RegionServiceMock,
|
||||||
eventBusService: EventBusServiceMock,
|
eventBusService: EventBusServiceMock,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -44,10 +47,17 @@ describe("OrderService", () => {
|
|||||||
it("calls order model functions", async () => {
|
it("calls order model functions", async () => {
|
||||||
await orderService.createFromCart(carts.completeCart)
|
await orderService.createFromCart(carts.completeCart)
|
||||||
|
|
||||||
expect(OrderModelMock.create).toHaveBeenCalledTimes(1)
|
const order = {
|
||||||
expect(OrderModelMock.create).toHaveBeenCalledWith({
|
|
||||||
...carts.completeCart,
|
...carts.completeCart,
|
||||||
metadata: { cart_id: carts.completeCart._id },
|
currency_code: "eur",
|
||||||
|
cart_id: carts.completeCart._id,
|
||||||
|
}
|
||||||
|
delete order._id
|
||||||
|
delete order.payment_sessions
|
||||||
|
|
||||||
|
expect(OrderModelMock.create).toHaveBeenCalledTimes(1)
|
||||||
|
expect(OrderModelMock.create).toHaveBeenCalledWith([order], {
|
||||||
|
session: expect.anything(),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -89,7 +99,7 @@ describe("OrderService", () => {
|
|||||||
it("calls order model functions", async () => {
|
it("calls order model functions", async () => {
|
||||||
expect(OrderModelMock.findOne).toHaveBeenCalledTimes(1)
|
expect(OrderModelMock.findOne).toHaveBeenCalledTimes(1)
|
||||||
expect(OrderModelMock.findOne).toHaveBeenCalledWith({
|
expect(OrderModelMock.findOne).toHaveBeenCalledWith({
|
||||||
metadata: { cart_id: IdMap.getId("test-cart") },
|
cart_id: IdMap.getId("test-cart"),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -281,17 +281,6 @@ describe("ProductService", () => {
|
|||||||
expect(err.message).toEqual("Use setMetadata to update metadata fields")
|
expect(err.message).toEqual("Use setMetadata to update metadata fields")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
it("throws error when trying to update variants", async () => {
|
|
||||||
const id = mongoose.Types.ObjectId()
|
|
||||||
try {
|
|
||||||
await productService.update(`${id}`, { variants: ["1", "2"] })
|
|
||||||
} catch (err) {
|
|
||||||
expect(err.message).toEqual(
|
|
||||||
"Use addVariant, reorderVariants, removeVariant to update Product Variants"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("delete", () => {
|
describe("delete", () => {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import jwt from "jsonwebtoken"
|
|||||||
import { IdMap } from "medusa-test-utils"
|
import { IdMap } from "medusa-test-utils"
|
||||||
import UserService from "../user"
|
import UserService from "../user"
|
||||||
import { UserModelMock, users } from "../../models/__mocks__/user"
|
import { UserModelMock, users } from "../../models/__mocks__/user"
|
||||||
|
import { EventBusServiceMock } from "../__mocks__/event-bus"
|
||||||
|
|
||||||
describe("UserService", () => {
|
describe("UserService", () => {
|
||||||
describe("retrieve", () => {
|
describe("retrieve", () => {
|
||||||
@@ -144,6 +145,7 @@ describe("UserService", () => {
|
|||||||
|
|
||||||
describe("generateResetPasswordToken", () => {
|
describe("generateResetPasswordToken", () => {
|
||||||
const userService = new UserService({
|
const userService = new UserService({
|
||||||
|
eventBusService: EventBusServiceMock,
|
||||||
userModel: UserModelMock,
|
userModel: UserModelMock,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ class CartService extends BaseService {
|
|||||||
* @return {Cart} return the decorated cart.
|
* @return {Cart} return the decorated cart.
|
||||||
*/
|
*/
|
||||||
async decorate(cart, fields, expandFields = []) {
|
async decorate(cart, fields, expandFields = []) {
|
||||||
const c = cart.toObject()
|
const c = cart
|
||||||
c.shipping_total = await this.totalsService_.getShippingTotal(cart)
|
c.shipping_total = await this.totalsService_.getShippingTotal(cart)
|
||||||
c.discount_total = await this.totalsService_.getDiscountTotal(cart)
|
c.discount_total = await this.totalsService_.getDiscountTotal(cart)
|
||||||
c.tax_total = await this.totalsService_.getTaxTotal(cart)
|
c.tax_total = await this.totalsService_.getTaxTotal(cart)
|
||||||
@@ -1054,11 +1054,14 @@ class CartService extends BaseService {
|
|||||||
|
|
||||||
// Payment methods are region specific so the user needs to find a
|
// Payment methods are region specific so the user needs to find a
|
||||||
// new payment method
|
// new payment method
|
||||||
if (!_.isEmpty(cart.payment_method) || cart.payment_sessions.length) {
|
if (!_.isEmpty(cart.payment_method)) {
|
||||||
update.payment_sessions = []
|
|
||||||
update.payment_method = undefined
|
update.payment_method = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cart.payment_sessions && cart.payment_sessions.length) {
|
||||||
|
update.payment_sessions = []
|
||||||
|
}
|
||||||
|
|
||||||
return this.cartModel_
|
return this.cartModel_
|
||||||
.updateOne({ _id: cart._id }, { $set: update })
|
.updateOne({ _id: cart._id }, { $set: update })
|
||||||
.then(result => {
|
.then(result => {
|
||||||
|
|||||||
@@ -264,9 +264,16 @@ class OrderService extends BaseService {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const { payment_method } = cart
|
const { payment_method, payment_sessions } = cart
|
||||||
|
|
||||||
let paymentSession = cart.payment_sessions.find(
|
if (!payment_sessions || !payment_sessions.length) {
|
||||||
|
throw new MedusaError(
|
||||||
|
MedusaError.Types.INVALID_ARGUMENT,
|
||||||
|
"cart must have payment sessions"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
let paymentSession = payment_sessions.find(
|
||||||
ps => ps.provider_id === payment_method.provider_id
|
ps => ps.provider_id === payment_method.provider_id
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -301,6 +308,7 @@ class OrderService extends BaseService {
|
|||||||
provider_id: paymentSession.provider_id,
|
provider_id: paymentSession.provider_id,
|
||||||
data: paymentData,
|
data: paymentData,
|
||||||
},
|
},
|
||||||
|
discounts: cart.discounts,
|
||||||
shipping_methods: cart.shipping_methods,
|
shipping_methods: cart.shipping_methods,
|
||||||
items: cart.items,
|
items: cart.items,
|
||||||
shipping_address: cart.shipping_address,
|
shipping_address: cart.shipping_address,
|
||||||
@@ -651,7 +659,7 @@ class OrderService extends BaseService {
|
|||||||
* @return {Order} return the decorated order.
|
* @return {Order} return the decorated order.
|
||||||
*/
|
*/
|
||||||
async decorate(order, fields, expandFields = []) {
|
async decorate(order, fields, expandFields = []) {
|
||||||
const o = order.toObject()
|
const o = order
|
||||||
o.shipping_total = await this.totalsService_.getShippingTotal(order)
|
o.shipping_total = await this.totalsService_.getShippingTotal(order)
|
||||||
o.discount_total = await this.totalsService_.getDiscountTotal(order)
|
o.discount_total = await this.totalsService_.getDiscountTotal(order)
|
||||||
o.tax_total = await this.totalsService_.getTaxTotal(order)
|
o.tax_total = await this.totalsService_.getTaxTotal(order)
|
||||||
|
|||||||
@@ -136,8 +136,7 @@ class ShippingOptionService extends BaseService {
|
|||||||
* @return {ShippingOption} the validated shipping option
|
* @return {ShippingOption} the validated shipping option
|
||||||
*/
|
*/
|
||||||
async validateCartOption(optionId, cart) {
|
async validateCartOption(optionId, cart) {
|
||||||
const optionDoc = await this.retrieve(optionId)
|
const option = await this.retrieve(optionId)
|
||||||
let option = optionDoc.toObject()
|
|
||||||
|
|
||||||
if (cart.region_id !== option.region_id) {
|
if (cart.region_id !== option.region_id) {
|
||||||
throw new MedusaError(
|
throw new MedusaError(
|
||||||
|
|||||||
Reference in New Issue
Block a user