feat(cart): Cart + Address services (#6055)
Duplicate of #6008, but I messed up my git history big time :'( **What** - CartService and CartRepository + tests - AddressService and AddressRepository + tests - CartModuleService skeleton. Full implementation + tests will be added in a separate PR
This commit is contained in:
1 parent
b6ac768698
commit
ce81cade88
20 files changed
+847
-33
No files matched your search
@@ -0,0 +1,23 @@
|
||||
export const defaultCartsData = [
|
||||
{
|
||||
id: "cart-id-1",
|
||||
region_id: "region-id-1",
|
||||
customer_id: "customer-id-1",
|
||||
email: "test@email.com",
|
||||
currency_code: "usd",
|
||||
},
|
||||
{
|
||||
id: "cart-id-2",
|
||||
region_id: "region-id-1",
|
||||
customer_id: "customer-id-1",
|
||||
shipping_address: {
|
||||
first_name: "Tony",
|
||||
last_name: "Stark",
|
||||
},
|
||||
billing_address_id: {
|
||||
address_1: "Stark Industries",
|
||||
city: "New York",
|
||||
},
|
||||
currency_code: "usd",
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,21 @@
|
||||
import { CreateCartDTO } from "@medusajs/types"
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
import { Cart } from "../../../src/models"
|
||||
import { defaultCartsData } from "./data"
|
||||
|
||||
export * from "./data"
|
||||
|
||||
export async function createCarts(
|
||||
manager: SqlEntityManager,
|
||||
cartsData: CreateCartDTO[] = defaultCartsData
|
||||
): Promise<Cart[]> {
|
||||
const carts: Cart[] = []
|
||||
|
||||
for (let cartData of cartsData) {
|
||||
let cart = manager.create(Cart, cartData)
|
||||
|
||||
await manager.persistAndFlush(cart)
|
||||
}
|
||||
|
||||
return carts
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
import { AddressRepository } from "../../../../src/repositories"
|
||||
import { AddressService } from "../../../../src/services"
|
||||
import { MikroOrmWrapper } from "../../../utils"
|
||||
|
||||
jest.setTimeout(30000)
|
||||
|
||||
describe("Address Service", () => {
|
||||
let service: AddressService
|
||||
let testManager: SqlEntityManager
|
||||
let repositoryManager: SqlEntityManager
|
||||
|
||||
beforeEach(async () => {
|
||||
await MikroOrmWrapper.setupDatabase()
|
||||
repositoryManager = await MikroOrmWrapper.forkManager()
|
||||
testManager = await MikroOrmWrapper.forkManager()
|
||||
|
||||
const addressRepository = new AddressRepository({
|
||||
manager: repositoryManager,
|
||||
})
|
||||
|
||||
service = new AddressService({
|
||||
addressRepository: addressRepository,
|
||||
})
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
await MikroOrmWrapper.clearDatabase()
|
||||
})
|
||||
|
||||
describe("create", () => {
|
||||
it("should create an address successfully", async () => {
|
||||
const [createdAddress] = await service.create([
|
||||
{
|
||||
first_name: "John",
|
||||
last_name: "Doe",
|
||||
address_1: "Test street 1",
|
||||
city: "Test city",
|
||||
country_code: "US",
|
||||
postal_code: "12345",
|
||||
},
|
||||
])
|
||||
|
||||
const [address] = await service.list({ id: [createdAddress.id] })
|
||||
|
||||
expect(address).toEqual(
|
||||
expect.objectContaining({
|
||||
id: createdAddress.id,
|
||||
first_name: "John",
|
||||
last_name: "Doe",
|
||||
address_1: "Test street 1",
|
||||
city: "Test city",
|
||||
country_code: "US",
|
||||
postal_code: "12345",
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe("update", () => {
|
||||
it("should throw an error if address does not exist", async () => {
|
||||
const error = await service
|
||||
.update([
|
||||
{
|
||||
id: "none-existing",
|
||||
},
|
||||
])
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.message).toContain(
|
||||
"Address with id \"none-existing\" not found"
|
||||
)
|
||||
})
|
||||
|
||||
it("should update an address successfully", async () => {
|
||||
const [createdAddress] = await service.create([
|
||||
{
|
||||
first_name: "Jane",
|
||||
last_name: "Doe",
|
||||
address_1: "Test street 1",
|
||||
city: "Test city",
|
||||
country_code: "US",
|
||||
postal_code: "12345",
|
||||
},
|
||||
])
|
||||
|
||||
await service.update([
|
||||
{
|
||||
id: createdAddress.id,
|
||||
address_1: "Test street 2",
|
||||
city: "Test city 2",
|
||||
},
|
||||
])
|
||||
|
||||
const [address] = await service.list({ id: [createdAddress.id] })
|
||||
|
||||
expect(address).toEqual(
|
||||
expect.objectContaining({
|
||||
id: createdAddress.id,
|
||||
first_name: "Jane",
|
||||
last_name: "Doe",
|
||||
address_1: "Test street 2",
|
||||
city: "Test city 2",
|
||||
country_code: "US",
|
||||
postal_code: "12345",
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe("delete", () => {
|
||||
it("should delete a cart successfully", async () => {
|
||||
const [createdAddress] = await service.create([
|
||||
{
|
||||
first_name: "Jane",
|
||||
last_name: "Doe",
|
||||
},
|
||||
])
|
||||
|
||||
await service.delete([createdAddress.id])
|
||||
|
||||
const carts = await service.list({ id: [createdAddress.id] })
|
||||
|
||||
expect(carts.length).toEqual(0)
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,124 @@
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
import { CartRepository } from "../../../../src/repositories"
|
||||
import { CartService } from "../../../../src/services"
|
||||
import { createCarts } from "../../../__fixtures__/cart"
|
||||
import { MikroOrmWrapper } from "../../../utils"
|
||||
|
||||
jest.setTimeout(30000)
|
||||
|
||||
describe("Cart Service", () => {
|
||||
let service: CartService
|
||||
let testManager: SqlEntityManager
|
||||
let repositoryManager: SqlEntityManager
|
||||
|
||||
beforeEach(async () => {
|
||||
await MikroOrmWrapper.setupDatabase()
|
||||
repositoryManager = await MikroOrmWrapper.forkManager()
|
||||
testManager = await MikroOrmWrapper.forkManager()
|
||||
|
||||
const cartRepository = new CartRepository({
|
||||
manager: repositoryManager,
|
||||
})
|
||||
|
||||
service = new CartService({
|
||||
cartRepository: cartRepository,
|
||||
})
|
||||
|
||||
await createCarts(testManager)
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
await MikroOrmWrapper.clearDatabase()
|
||||
})
|
||||
|
||||
describe("create", () => {
|
||||
it("should throw an error when required params are not passed", async () => {
|
||||
const error = await service
|
||||
.create([
|
||||
{
|
||||
email: "test@email.com",
|
||||
} as any,
|
||||
])
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.message).toContain(
|
||||
"Value for Cart.currency_code is required, 'undefined' found"
|
||||
)
|
||||
})
|
||||
|
||||
it("should create a cart successfully", async () => {
|
||||
const [createdCart] = await service.create([
|
||||
{
|
||||
currency_code: "eur",
|
||||
},
|
||||
])
|
||||
|
||||
const [cart] = await service.list({ id: [createdCart.id] })
|
||||
|
||||
expect(cart).toEqual(
|
||||
expect.objectContaining({
|
||||
id: createdCart.id,
|
||||
currency_code: "eur",
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe("update", () => {
|
||||
it("should throw an error if cart does not exist", async () => {
|
||||
const error = await service
|
||||
.update([
|
||||
{
|
||||
id: "none-existing",
|
||||
},
|
||||
])
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.message).toContain(
|
||||
"Cart with id \"none-existing\" not found"
|
||||
)
|
||||
})
|
||||
|
||||
it("should update a cart successfully", async () => {
|
||||
const [createdCart] = await service.create([
|
||||
{
|
||||
currency_code: "eur",
|
||||
},
|
||||
])
|
||||
|
||||
const [updatedCart] = await service.update([
|
||||
|
||||
{
|
||||
id: createdCart.id,
|
||||
email: "test@email.com",
|
||||
},
|
||||
])
|
||||
|
||||
const [cart] = await service.list({ id: [createdCart.id] })
|
||||
|
||||
expect(cart).toEqual(
|
||||
expect.objectContaining({
|
||||
id: createdCart.id,
|
||||
currency_code: "eur",
|
||||
email: updatedCart.email,
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe("delete", () => {
|
||||
it("should delete a cart successfully", async () => {
|
||||
const [createdCart] = await service.create([
|
||||
{
|
||||
currency_code: "eur",
|
||||
},
|
||||
])
|
||||
|
||||
await service.delete([createdCart.id])
|
||||
|
||||
const carts = await service.list({ id: [createdCart.id] })
|
||||
|
||||
expect(carts.length).toEqual(0)
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user